用于循环使用fmincon函数用于不同的初始点

时间:2017-05-24 11:59:38

标签: matlab loops

我知道这个问题实际上太基础了,但是因为我是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

1 个答案:

答案 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

相关问题