我在使用时遇到问题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)
我的功能有问题吗?每当我想将它用作任何其他命令的输入函数时,我都会不断收到错误。
我在使用时遇到问题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)
我的功能有问题吗?每当我想将它用作任何其他命令的输入函数时,我都会不断收到错误。
我在使用
fminsearch
[...]时遇到问题
停在那里,想一想你试图最小化的功能。
数值优化(这是什么fminsearch
)是不必要的,在这里。您的函数是 vector 的二次函数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 的回答;但尽可能不要fminsearch
。
这正是 Matlab 告诉你的:你的函数需要三个参数。你只通过了一个。
代替
[x, val] = fminsearch(f,0)
你应该这样称呼它
[x, val] = fminsearch(f,[0,0,0])
因为您将函数定义f
为仅接受三维向量作为输入。
fminsearch
您可以在http://mathworks.com/help/matlab/ref/fminsearch.html的在线文档中阅读更多关于规范的信息:
x = fminsearch(fun,x0) 从点 x0 开始并返回一个值 x,它是 fun 中描述的函数的局部最小值。x0 可以是标量、向量或矩阵。fun 是一个函数句柄。