【问题标题】:Need help saving a parameter to a variable each iteration每次迭代都需要帮助将参数保存到变量中
【发布时间】:2017-05-23 07:37:33
【问题描述】:

在显示的代码中,我想在一个变量中每次迭代保存一个参数 (fval),但不知道该怎么做。有人可以建议吗?

clear;
close all;
clc;

for i = 0 : 100
    ii = i * 0.01;
    options = optimset('Display','iter-detailed', ...
                       'Algorithm','interior point', ...
                       'Diagnostics','on');

    options.TolCon = 0;
    options.TolFun = 0;
    [X,faval,exitfag,output,lambda,grad,hessian]=fmincon(@myfun9,0,[],[],[],[],ii,1,@mycon,options);

end;   

【问题讨论】:

  • 是否每次迭代都将返回值fval 保存在单独的变量中?所以循环后你会有 100 个变量?
  • 如何使用数组,例如在循环之前定义fval = [];,然后在每次迭代结束时执行fval = [fval; faval]; 以存储新值。请注意,这仅在 faval 的所有迭代具有相同尺寸时才有效。
  • @hmofrad 不建议这样做。阅读原因:mathworks.com/help/matlab/matlab_prog/preallocating-arrays.html
  • @Sardar_Usama 我明白你的意思了!
  • 请注意,您可以将所有 options... 设置排除在循环之外

标签: matlab variables for-loop save iteration


【解决方案1】:

如果您想创建 101 separate variables 来存储每个值,不建议这样做。 Pre-allocatefval 的数组,用于在每次迭代中存储faval 的值,如下所示:

fval = zeros(101,1);      %Pre-allocating memory for fval
for k = 0 : 100
    ii = k * 0.01;
    options = optimset('Display','iter-detailed', ...
                       'Algorithm','interior point', ...
                       'Diagnostics','on');

    options.TolCon = 0;
    options.TolFun = 0;
    [X,faval,exitfag,output,lambda,grad,hessian]=fmincon(@myfun9,0,[],[],[],[],ii,1, ...
                       @mycon,options);

    %Storing value of faval in fval(k+1). Note that indexing starts from 1 in MATLAB
    fval(k+1) = faval;    
end

顺便说一句,从您的代码看来,您对所有其他参数的值不感兴趣,即X,exitfag,output,lambda,grad,hessi,因为这些参数将在每次迭代中被覆盖。如果您对这些值不感兴趣。您可以使用tilde (~) 跳过存储它们。因此,您可能还想改用以下内容:

[~,faval]=fmincon(@myfun9,0,[],[],[],[],ii,1, @mycon,options);
% exitfag, output, lambda, grad, hessi are skipped automatically as per fmincon doc

建议阅读:
1。 Dynamic Variables
2。 Preallocation
3。 Why does MATLAB have 1 based indexing?
4。 Tilde as an Argument Placeholder

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 2015-11-20
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2013-02-15
    相关资源
    最近更新 更多