我在脚本中创建了一个匿名函数,我无法让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。我做错了什么?
可以解决我的问题的另一件事是让我的脚本编写一个函数文件,但是如何做到这一点?
答案 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