我知道这个问题实际上太基础了,但是因为我是MATLAB的新手而被困。问题是我不知道如何使用 for-loop 在一次运行中为不同的初始点显示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
答案 0 :(得分:1)
如果您将不同的初始条件存储为矩阵的列,则可以通过以下方式执行此操作:
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。