【问题标题】:Problem with optimization of a function which contains a "for-loop"优化包含“for-loop”的函数的问题
【发布时间】:2020-04-02 22:35:49
【问题描述】:

我正在尝试优化 MATLAB 中包含 for-loop 的函数。我尝试了不同的代码,但没有得到任何结果,也不知道问题出在哪里。

这里是函数:

function U2 = least1(ydata,xdata,x,y1,w,A,sz,yprime,y) 
for i=1:1:1000 
    U2(1,i) = sum((sqrt(1+yprime.^2)).*(A(1) * exp(-y/A(2))*(1 - exp(-ydata(i)/A(2)))...
           + A(3) * exp(-y/A(4))*(exp(-ydata(i)/A(4))-1)).*w);     
 end
end

所有变量都可用我只需要优化它以获得A的完美匹配。 我尝试使用基于问题的优化来解决它,如下代码: 但我得到的不是A 的四个值 -Inf -Inf -Inf -Inf

A = optimvar('A',4);
potential = fcn2optimexpr(@least1,A);
obj = sum((potential - u1).^2);
prob = optimproblem('Objective',obj);
x0.A = [11.959,0.069,3.53,4.118*10^(-3)];
show(prob)
sol =  solve(prob,x0)

如果有什么遗漏请告诉我

【问题讨论】:

    标签: matlab function optimization


    【解决方案1】:

    优化器现在不处理least1(ydata,xdata,x,y1,w,A,sz,yprime,y) 的其他输入。

    您需要在将其分配为成本函数时告诉它值,即

    @(A) least1(ydata,xdata,x,y1,w,A,sz,yprime,y) 
    

    关键字是匿名函数句柄(你所拥有的只是一个函数句柄

    您设置优化问题的方式让我非常恼火(也许这是一种新方式?)。

    我会这样直截了当:

    % anonymous function handle to original function
    fnc_ogl = @(A) least1(ydata,xdata,x,y1,w,A,sz,yprime,y) -u1;
    % create least-squares cost function (you need to have a single cost value
    % for fminsearch)
    fnc_cst = @(A) sum( fnc_ogl.^2 );
    % initial guess
    A0 = [11.959,0.069,3.53,4.118*10^(-3)]
    % call unconstrained local optimization
    [A_opt, fval, exitflag] = fminsearch(fnc,A0)
    

    顺便说一句

    1. 你应该预先分配U2的大小和U2 = NaN(1,1000)来加速成本函数
    2. 您的示例不起作用,因为 least1 的所有输入都丢失了
    3. least1 不使用变量 xdataxy1sz

    .

    【讨论】:

    • 非常感谢您的指导,我想做基于最小化非线性最小二乘法的优化。因此,我使用了这一行 'obj = sum((potential - u1).^2);' .最后,结果应该是“A”的最佳匹配值,它为“u1”值和从函数“least1”计算的潜在值提供了最佳匹配线。如果您有任何想法将“u1”值添加到优化中,请告诉我。
    • 您可以简单地将其添加到fnc_ogl(就像我刚才所做的那样)。 anonymous function (structure@(x)...x) 将不在括号@( ) 内的所有变量假定为它们在匿名函数时具有的值的常量> 已定义(因此在这行代码中)。这使您的函数具有 10 个参数 least1(...) - u1 成为具有单个参数的函数(在上面的答案代码中是 A,在此评论的 sn-p 中是 x
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多