2012-08-30 28 views
0

如何使用fmincon()強加一個約束條件,使得您嘗試優化的向量中的所有值都大於零?fmincon:施加大於零的向量約束

根據文檔,我需要一些參數A和B,其中A * x≤b,但我認爲如果使A成爲-1和b 0的向量,那麼我將優化x > 0,而不是每個x大於0的值。

以防萬一你需要它,這裏是我的代碼。我試圖優化一個向量(x),使得x和一個矩陣(稱爲multiplierMatrix)的(分量)乘積產生一個矩陣,其中列的總和爲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,???); 

讓我知道是否需要更好地解釋我的問題。感謝您的幫助!

+2

fmincon有一個下限參數。閱讀幫助。 – 2012-08-30 21:28:24

回答

0

可以使用下界:

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

注意xValssse也許應該被交換(如果他們的名字意味着什麼)。

下限lb意味着您的決策變量x中的元素永遠不會低於lb中的相應元素,這就是您在此之後的內容。

空瓶([])表明您使用線性約束(例如,AbAeqbeq),只有下限lb

一些建議:fmincon是一個非常先進的功能。你最好記住它的文檔,並使用它幾個小時,使用許多不同的示例問題。