如何在fseminf函数中从输出保存funccount

时间:2019-05-22 11:58:37

标签: matlab optimization

我在算法中使用fseminf和fmincon函数。我用这种方式

[x,fval,exitflag,output,lambda] = fseminf(f,x0,1,@seminfcon1,A,b,Aeq,beq,lb,ub);

作为输出,我得到一些信息:

iterations: 5
          funcCount: 21
       lssteplength: 1
           stepsize: 4.9851e-06
          algorithm: 'active-set'
      firstorderopt: 2.9906e-08
    constrviolation: 1.1283e-10

我对funcCount感兴趣,我想保存它。在我的其他算法中,我在循环中使用此函数,并希望对我的算法所做的所有funcCount求和。为此,我需要在每次迭代时保存此funcCount并将其添加。我怎样才能做到这一点?例如output(2)不起作用。

1 个答案:

答案 0 :(得分:1)

  • output.funcCoun为您提供当前的funcCoun

  • output.lssteplength为您提供当前的lssteplength,依此类推

% l is the length of the iteration 
% Initialize an 1D array to store funcCoun
funcCoun_per_iteration = zeros(1,l);

for i = 1:l
   [x,fval,exitflag,output,lambda] = fseminf(f,x0,1,@seminfcon1,A,b,Aeq,beq,lb,ub);
   funcCoun_per_iteration(i) = output.funcCoun;
end

要对它们全部求和,只需使用sum()

Total_funcCoun = sum(funcCoun_per_iteration)

但是,如果您真的只想要总和而无需存储它们,则可以直接按照

进行操作
% l is the length of the iteration
% Initialize Total_funcCoun to accumulate funcCoun 
Total_funcCoun = 0;

for i = 1:l
[x,fval,exitflag,output,lambda] = fseminf(f,x0,1,@seminfcon1,A,b,Aeq,beq,lb,ub);
Total_funcCoun = Total_funcCoun + output.funcCoun;
end
相关问题