用于循环使用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函数用于不同的初始点的主要内容,如果未能解决你的问题,请参考以下文章

如何将多处理用于函数而不是循环?

Javascript循环和代码规范

php循环语句

JavaScript循环

使用定义的 Matlab 函数进行 fmincon 优化

用于数组初始化的 C 宏