我正在尝试使用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'。
答案 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