Matlab 如何在匿名函数中使用变量?

Matlab 如何在匿名函数中使用变量?,matlab,Matlab,我试图定义: f = @(x) d*x 其中d是先前定义的变量,例如d=2。我的目标是让它回归: @(x) 2*x 但是,MATLAB返回: @(x) d*x 我这样做的原因是在for循环中定义一系列函数句柄,例如 q = cell(n, 1); for i = 1:n q{i} = @(y) sum(y(1:i)); end 是否可以定义使用匿名函数定义中的索引的函数句柄数组?正确。定义f=@(x)d*xmatlab将在局部范围内查找d。由于函数定义时d是2,因此您的函数f将有

我试图定义:

f = @(x) d*x
其中d是先前定义的变量,例如d=2。我的目标是让它回归:

@(x) 2*x
但是,MATLAB返回:

@(x) d*x
我这样做的原因是在for循环中定义一系列函数句柄,例如

q = cell(n, 1);
for i = 1:n
    q{i} = @(y) sum(y(1:i));
end

是否可以定义使用匿名函数定义中的索引的函数句柄数组?

正确。定义
f=@(x)d*x
matlab将在局部范围内查找
d
。由于函数定义时
d
2
,因此您的函数
f
将有效地
2*x
。即使以后更改d的值,例如
d=10
,“f”函数仍将使用
2

以下是一个例子:

d = 2;

f = @(x) d*x;    

f(2) % gives 4;

d = 10;

f(2) % gives 4 again. matlab will 'remember' that d was 2 at the time of 
     % f function definition 
定义函数时,完全定义函数所需的变量:

通过使用匿名函数,还可以从函数工作区捕获某些变量及其值,并将它们存储在句柄中。这些数据值在句柄构造时存储在句柄中,只要句柄存在,这些数据值就包含在句柄中。无论何时通过函数句柄调用函数,MATLAB都会向函数提供函数调用参数列表中指定的所有变量输入

可以使用创建的控制柄上的命令验证这一点:

>> n=3;
>> for i = 1:n, q{i} = @(y) sum(y(1:i)); end
>> f1 = functions(q{1})
f1 = 
     function: '@(y)sum(y(1:i))'
         type: 'anonymous'
         file: ''
    workspace: {[1x1 struct]}
functions
命令提供有关函数句柄的一般信息,以及包含运行函数所需的所有本地范围变量的完整工作区:

>> f1.workspace{1}
ans = 
    i: 1
正如所料,
i
在第一个句柄
q{1}
中是1。现在,第二个句柄:

>> f2 = functions(q{2});
>> f2.workspace{1}
ans = 
    i: 2
第三点:

>> f3 = functions(q{3});
>> f3.workspace{1}
ans = 
    i: 3

每个句柄都像创建句柄时一样存储
i
的值。

您尝试的方式到底有什么不起作用?在此之后,您是如何尝试使用
q