包含"for-loop"的函数的优化问题



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

这是功能:

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)

如果丢失了什么,请告诉我

优化器现在不知道如何处理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)

BTW

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

最新更新