为什么我得到fminsearch未定义函数错误

时间:2019-07-16 14:23:28

标签: matlab mathematical-optimization function-handle fminsearch

我正在尝试使用2个输入优化函数。尝试使用fminsearch,但是尽管已经定义了fminsearch,但它总是说未定义的函数或变量。

我已经在与主脚本位于同一目录中的单独脚本中定义了该函数。我有一个包含优化工具箱的教室许可证,调用该函数时没有拼写错误。

function o=u(x,y)  
%some code here
end

%in a second script

init=[0.1,0.1];

b=fminsearch(o,init);

错误是:

  

未定义的函数或变量'o'。

1 个答案:

答案 0 :(得分:1)

根据fminsearch的文档,被最小化的函数必须具有单个参数,并使用function handle访问(请参阅相关的answer)。

您得到的错误是因为您无法调用o并将其用作fminsearch()的输入,因为o是未定义的。要获取o,您必须首先获取u(x,y),此外,如上所述,fminsearch需要输入function handle

您有几个选项仍使用独立功能u(x,y)

1。创建一个函数句柄
定义一个函数句柄,该函数句柄调用u(x,y),但有一个单独的参数,即2 x 1向量z = [x; y]

fh =@(z) u(z(1),z(2));
z0 = [1; 2];                         % Initial Guess for z = [x; y]
[z,TC] = fminsearch(fh,z0)     

2。更改功能并直接调用

使用

可以得到相同的结果
[z,TC] = fminsearch(@u,z0)

如果您将u(x,y)重新定义如下:

function o=u(z) 
   x = z(1);
   y = z(2); 
   % your function code here
end