1

我在脚本中创建了一个匿名函数,但无法让 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 在此命令之前未提及。我究竟做错了什么?

可以解决我的问题的另一件事是让我的脚本编写一个函数文件,但是该怎么做呢?

4

2 回答 2

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);
于 2013-04-03T00:25:55.007 回答
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
于 2013-09-23T06:26:46.177 回答