如何使用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,???);
如果我需要更好地解释我的问题,请告诉我。感谢您的帮助!
答案 0 :(得分:0)
您可以使用下限:
xGuess = ones(120,1);
lb = zeros(120,1);
[sse xVals] = fmincon(@myfun,xGuess, [],[],[],[], lb);
请注意xVals
和sse
应该交换(如果他们的名字意味着什么)。
下限lb
表示您的决策变量x
中的元素永远不会低于lb
中的相应元素,这就是您在此之后的内容。
空([]
)表示您使用线性约束 (例如A
,b
,Aeq
,{{ 1}}),只有下限beq
。
一些建议:lb
是一个非常先进的功能。您最好记住它上面的文档,并使用许多不同的示例问题与它一起玩几个小时。