Matlab 中三变量函数的最小化

Minimization of a three variables function in Matlab

我正在尝试使用 Matlab 文档中给出的最小化函数示例,运行 它在 Matlab R2016a 中给出,但它会产生错误。 这是示例:

这是我基于此编写的代码:

function b = test_algo(v)
x = v(1);
y = v(2);
z = v(3);
b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2;

v = [-0.6 -1.2 0.135];
a = fminsearch(@test_algo,v);

disp('a', a);

但是我得到的不是预期的结果,而是一个错误:

Not enough input arguments.

Error in test_algo (line 3)
x = v(1);

知道为什么吗?谢谢!

根据您执行代码的方式,您必须将 fminsearch 的调用放在单独的函数中:

function test()

v = [-0.6 -1.2 0.135];
a = fminsearch(@test_algo,v);

disp(a);

function b = test_algo(v)
x = v(1);
y = v(2);
z = v(3);
b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2;

如果我将所有内容都放入 m 文件并执行,以上示例对我有用。

您需要将 objective 函数 test_algo 与调用它的代码分开定义。由于您不需要太多代码来定义您的 objective 函数,您可以使用匿名函数来定义它:

b = @(v) v(1).^2 + 2.5*sin(v(2)) - v(3)^2*v(1)^2*v(2)^2;
v0 = [-0.6 -1.2 0.135];
a = fminsearch(b,v0);
disp(a);