1

我在使用时遇到问题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)

我的功能有问题吗?每当我想将它用作任何其他命令的输入函数时,我都会不断收到错误。

4

2 回答 2

3

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

于 2015-06-03T21:38:24.307 回答
1

这正是 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 是一个函数句柄。

于 2015-06-03T21:23:47.513 回答