1

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

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

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

%in a second script

init=[0.1,0.1];

b=fminsearch(o,init);

错误是:

未定义的函数或变量“o”。

4

1 回答 1

1

从上的文档中fminsearch,被最小化的函数必须有一个参数并使用函数句柄访问(请参阅此相关答案)。

您收到的错误是因为您无法调用o并将其用作未定义的输入。要获取,您必须首先获取,并且如上所述,需要一个函数句柄作为输入。fminsearch()oou(x,y)fminsearch

您有几个选项仍然使用您的独立功能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
于 2019-07-17T17:37:15.140 回答