使用fminsearch查找本地最小化器和该值的最小值

时间:2015-06-03 21:12:40

标签: matlab function fminsearch

我在使用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)

我的功能有问题吗?我随时都希望将它用作任何其他命令的输入函数,我一直都会收到错误。

2 个答案:

答案 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。