matlab中的匿名函数
Anonymus functions in matlab
我想在 matlab 中优化一个带参数的函数。当我只想优化一个参数时,这是我如何使用一个函数来实现的:
fminsearch(@(x) fun(x, 3, 1, 2, 3),2);
它工作正常。但是,当我想优化函数的两个参数时:
fminsearch(@(x, y) fun(x, y, 1, 2, 3),[2,2]);
我收到以下错误:
Error using test>@(x,y)fun(x,y,1,2,3) (line 7)
Not enough input arguments.
我不明白,我的代码有什么问题。它类似于 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 所做的,但是它不起作用。为什么?
fminsearch
总是假定一个单输入函数,你的是双输入,如。如果您有多个参数,请使用 数组值输入 到 fminsearch
,但只能使用一个。这正是该示例所做的:传递带有参数 a
(fminsearch
未看到)和 array x
的 @(x) myfun(x,a)
。
你必须像
那样调用你的函数
fminsearch(@(x) fun(x(1), x(2), 1, 2, 3),[2,2]);
为了遵守 fminsearch
所期望的语法。
fminsearch
和相关函数的实现是这样的,它们查看起始参数 ([2,2]
),并从该变量的维度得出参数的数量。因此,相同大小的数组总是作为单个输入变量提供给您的匿名函数。
我想在 matlab 中优化一个带参数的函数。当我只想优化一个参数时,这是我如何使用一个函数来实现的:
fminsearch(@(x) fun(x, 3, 1, 2, 3),2);
它工作正常。但是,当我想优化函数的两个参数时:
fminsearch(@(x, y) fun(x, y, 1, 2, 3),[2,2]);
我收到以下错误:
Error using test>@(x,y)fun(x,y,1,2,3) (line 7)
Not enough input arguments.
我不明白,我的代码有什么问题。它类似于 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 所做的,但是它不起作用。为什么?
fminsearch
总是假定一个单输入函数,你的是双输入,如fminsearch
,但只能使用一个。这正是该示例所做的:传递带有参数 a
(fminsearch
未看到)和 array x
的 @(x) myfun(x,a)
。
你必须像
那样调用你的函数fminsearch(@(x) fun(x(1), x(2), 1, 2, 3),[2,2]);
为了遵守 fminsearch
所期望的语法。
fminsearch
和相关函数的实现是这样的,它们查看起始参数 ([2,2]
),并从该变量的维度得出参数的数量。因此,相同大小的数组总是作为单个输入变量提供给您的匿名函数。