脚本内部的匿名函数错误

时间:2013-04-03 00:01:01

标签: matlab optimization anonymous-function

我在脚本中创建了一个匿名函数,我无法让MATLAB运行fminsearch?这是我到目前为止所拥有的:

V=x(1);
f=x(2);
q=@(x) (pi.*D.*L)./(1000.*V.*f);
fminsearch(@q,x);

定义变量D和L,但MATLAB给出了以下错误:

错误:文件:Testing.m行:51列:17 “q”以前用作变量,与此处用作函数或命令的名称相冲突。 有关详细信息,请参阅MATLAB文档中的“MATLAB如何识别命令语法”。

在此命令之前未提及

q。我做错了什么?

可以解决我的问题的另一件事是让我的脚本编写一个函数文件,但是如何做到这一点?

2 个答案:

答案 0 :(得分:3)

删除第二个@

V=x(1);
f=x(2);
q=@(x) (pi.*D.*L)./(1000.*V.*f);
fminsearch(q,x);

q是一个函数句柄。 fminsearch需要一个函数句柄。您可以使用@(例如@min)从函数中创建函数句柄,但这里不需要这样做。

您还可以使用搜索命令内联编写匿名函数:

V=x(1);
f=x(2);
fminsearch(@(x) (pi.*D.*L)./(1000.*V.*f),x);

更新(@wakjah的信用)

为了让你的代码做任何合理的事情,你应该使用匿名函数的x参数:

x0 = [initialV, initialF];
fminsearch(@(x) (pi.*D.*L)./(1000.*x(1).*x(2)), x0);

答案 1 :(得分:1)

@function为现有功能创建功能句柄

q = @(x) whatever...创建一个名为q函数句柄

但是,您无法为函数句柄创建函数句柄,仅适用于函数。

见:

>> fones = @ones

fones = 

    @ones

>> ffones = @fones
Error: "fones" was previously used as a
variable,
 conflicting with its use here as the name
 of a function or command.
 See MATLAB Programming, "How MATLAB
 Recognizes Function Calls That Use
 Command Syntax" for details.

在Matlab中,函数句柄是一种指向函数的指针,与函数不同(与函数标识符可以作为任何其他变量传递和存储的其他语言不同)。

重要的是要注意调用函数和函数句柄会导致相同的行为。除了使用标识符而后面没有任何括号的情况:

>> ones

ans =

     1

>> fones

fones = 

    @ones

>> ones(2)

ans =

     1     1
     1     1

>> fones(2)

ans =

     1     1
     1     1