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);
我正在尝试使用 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);