如何在Matlab中存储由循环生成的结构匿名函数?

时间:2014-11-27 09:24:30

标签: matlab

我想将Matlab循环生成的每个匿名函数存储在结构而不是单元格)中,然后访问和评估每个存储的匿名函数另一个分开的循环我用单元格方法报告了一个非常简单的例子。我不知道在这种情况下使用结构的最有效方法是哪种。

gammatrue = 2;
deltatrue = -3;
T = 4;
n = 3;
BS = 10;
r = 5;
bsdensdraws = cell(1, BS);
bsdensdrawsev = zeros(T*n*r, BS);

for w = 1:BS
    data = randn(T*n, n-1);
    mutrue = gammatrue/deltatrue*data;   
    sigmatrue = repmat(1/(deltatrue^2)*eye(n-1), [1 1 T*n]);
    draws = mvnrnd(repmat(mutrue, [r 1]), repmat(sigmatrue, [1 1 r])); %matrix (r*T*n)x(n-1))
    bsdensdraws{w} = @(z) mvnpdf(draws,repmat(z(1)/z(2)*data, [r 1]), ...
                       repmat(repmat(1/(z(2)^2)*eye(n-1), [1 1 T*n]), [1 1 r])); 
end

param = [2 3; 4 5; 6 7];
for w = 1:BS
    for y = 1:size(param,1)
        gamma = param(y,1);
        delta = param(y,2);
        bsdensdrawsev(:,w) = bsdensdraws{w}([gamma delta]); %vector (T*n*r)x1 
    end
end

1 个答案:

答案 0 :(得分:0)

您需要通过名称访问结构的字段,您需要首先生成字段名称列表。因为你只有10个字段,我建议

fields = char(double('a'):double('a')+BS)'

生成包含字母a到k的数组。您通过

预先分配bsdensdraws
bsdensdraws = struct();

并通过

将句柄写入其中
bsdensdraws.(fields(w)) = ...

您可以以相同的方式访问它。如果您需要更多迭代,那么您可能需要更复杂的方法来生成字段名称。