用于循环使用fmincon函数用于不同的初始点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于循环使用fmincon函数用于不同的初始点相关的知识,希望对你有一定的参考价值。
我知道这个问题实在太基础了,但是因为我是MATLAB的新手,所以我很困难。问题是我不知道如何使用for循环在一次运行中为不同的初始点显示V的三个输出。
我希望得到如下输出:
V1(第一个初始点)----- V2(第二个初始点)----- V3(第三个初始点)
这是我的代码:
%variables
ENG1=0.52;
ENG2 = [0.00139;0.00149;0.00122;0.00130;0.000866;0.000731;0.001002;0.001285];
ENG3 = zeros(8,1);
%6.2.2) minimization term
fun = @(V) abs(ENG1 - V'*ENG2);
%6.2.3) constrains:
Aeq = [ENG3';ones(1,8)];
beq = [0;1];
lb = zeros(8,1); %lower bound
ub = ones(8,1); %upper bound
V0 = rand(8,1);V0 = V0/sum(V0); %initial guess
options = optimset('Display', 'off'); %supressing extra unnecessary outputs.
for i=1:3
V(i) = fmincon(fun,V0,[],[],Aeq,beq,lb,ub,[],options)
end
答案
如果将不同的初始条件存储为矩阵的列,则可以按以下方式执行:
V0 = rand(8,3); %3 columns of initial guesses
V0 = bsxfun(@rdivide, V0, sum(V0));
% V0 = V0./sum(V0); % similar to previous line, but only supported from R2016b
V = zeros(size(V0)); % preallocate memory for efficiency
for i=1:3
V(:, i) = fmincon(fun,V0(:, i),[],[],Aeq,beq,lb,ub,[],options);
end
注意使用元素划分(./
)来规范化您的初始猜测。
请注意,V(:, i)
选择列i
的所有元素。
有关兼容性问题的详细信息,请参阅this post。
以上是关于用于循环使用fmincon函数用于不同的初始点的主要内容,如果未能解决你的问题,请参考以下文章