0

fmincon()を使用して、最適化しようとしているベクトルのすべての値がゼロより大きいという制約をどのように課しますか?

ドキュメントによると、いくつかのパラメーターAとbが必要です。ここで、A *x≤bですが、Aを-1とb 0のベクトルにすると、代わりにx>0の合計に最適化されると思います。 0より大きいxの各値の。

あなたがそれを必要とする場合に備えて、ここに私のコードがあります。xと行列(multiplierMatrixと呼ばれる)の(コンポーネントごとの)積が列の合計がxである行列を作成するように、ベクトル(x)を最適化しようとしています。

function [sse] = myfun(x)        % this is a nested function
    bigMatrix = repmat(x,1,120) .* multiplierMatrix;
    answer = sum(bigMatrix,1)';
    sse = sum((expectedAnswer - answer).^2);
end

xGuess = ones(1:120,1);
[sse xVals] = fmincon(@myfun,xGuess,???);

問題をよりよく説明する必要がある場合はお知らせください。よろしくお願いします!

4

1 に答える 1

0

下限を使用できます。

xGuess = ones(120,1);
lb = zeros(120,1);
[sse xVals] = fmincon(@myfun,xGuess, [],[],[],[], lb);

おそらく交換する必要があることに注意しxValssseください(名前が何かを意味する場合)。

下限lbは、決定変数xの要素が、の対応する要素を下回らないことを意味しますlb。これは、ここで求めているものです。

空( )は、線形制約(たとえば、、、、)を使用しておらず、下限のみを使用し[]ていることを示します。AbAeqbeqlb

いくつかのアドバイス:fminconかなり高度な機能です。そのドキュメントを覚えて、さまざまな問題の例を使用して、数時間試してみることをお勧めします。

于 2012-08-30T21:38:18.503 に答える