Anonymus在matlab中起作用

时间:2016-01-30 15:19:13

标签: matlab optimization anonymous-function

我想在matlab中使用参数优化函数。当我想要只优化一个参数时,我就可以使用函数来执行此操作:

fminsearch(@(x) fun(x, 3, 1, 2, 3),2); 

工作正常。但是,当我想优化我的函数的两个参数时:

fminsearch(@(x, y) fun(x, y, 1, 2, 3),[2,2]);

我收到以下错误:

  

使用测试时出错> @(x,y)fun(x,y,1,2,3)(第7行)

     

没有足够的输入参数。

我不明白,我的代码出了什么问题。它与Mathworks为我的问题建议的类似: http://www.mathworks.com/help/matlab/ref/fminsearch.html

以下是该网站的示例:

function f = myfun(x,a)
f = x(1)^2 + a*x(2)^2;
x = fminsearch(@(x) myfun(x,a),[0,1])

这正是我使用我的函数 fun 所做的事情,然而,它不起作用。为什么呢?

1 个答案:

答案 0 :(得分:3)

fminsearch总是假定一个单输入函数,你的是双输入,如@Adriaan noted。如果您有多个参数,请使用数组值输入fminsearch,但只能使用一个参数。这正是示例所做的:传递@(x) myfun(x,a)参数afminsearch未见)和数组 x

您必须像

一样调用您的函数
fminsearch(@(x) fun(x(1), x(2), 1, 2, 3),[2,2]);

为了遵守fminsearch所期望的语法。

fminsearch和相关函数的实现使得它们查看起始参数([2,2]),并且它们从该变量的维度中得出参数的数量。因此,相同大小的数组总是作为单个输入变量提供给您的匿名函数。