我在使用fminsearch
时遇到问题:得到的错误是我的函数没有足够的输入参数。
f = @(x1,x2,x3) x1.^2 + 3.*x2.^2 + 4.*x3.^2 - 2.*x1.*x2 + 5.*x1 + 3.*x2 + 2.*x3;
[x, val] = fminsearch(f,0)
我的功能有问题吗?我随时都希望将它用作任何其他命令的输入函数,我一直都会收到错误。
答案 0 :(得分:3)
我无法使用
fminsearch
[...]
停在那儿,想想更多关于你想要最小化的功能。
这里不需要数值优化(这是fminsearch
所做的)。你的函数是向量x
的二次函数;换句话说,它在x
的值可以表示为
x^T A x + b^T x
其中矩阵A
和向量b
定义如下(使用MATLAB表示法):
A = [ 1 -1 0;
-1 3 0;
0 0 4]
和
b = [5 3 2].'
因为A
是正定的,所以你的函数有一个且只有一个最小值,可以在MATLAB中用
x_sol = -0.5 * A \ b;
现在,如果您对所遇到的错误原因感到好奇,请查看fuesika's answer;但是只要你能做就没有fminsearch
。
答案 1 :(得分:1)
这正是Matlab告诉你的:你的函数需要三个参数。你只通过一个。
而不是
[x, val] = fminsearch(f,0)
你应该把它称为
[x, val] = fminsearch(f,[0,0,0])
因为您定义函数f
以接受三维向量作为输入。
您可以在http://mathworks.com/help/matlab/ref/fminsearch.html的在线文档中详细了解fminsearch
的规范:
x = fminsearch(fun,x0)从点x0开始并返回值x 这是有趣的描述功能的局部最小化。 x0可以 标量,向量或矩阵。 fun是function_handle。