嵌套的匿名函数,包括arrayfun

时间:2014-05-02 17:05:07

标签: matlab nested vectorization anonymous-function

我尝试做类似以下代码的事情:

k = linspace(a,b);
x = c:0.01:d;
% k and x are of different sizes
f = @(s) arrayfun(@(t) normcdf(s, b0+b1*t, sigma), x);
y = arrayfun(f, k);

我收到以下错误

  

在统一输出中使用arrayfun非标量时出错,索引为1,   输出1.将'UniformOutput'设置为false

我试图避免对k中的每个元素使用for循环 另外,对于匹配k中元素的每个结果,我需要做另一个小计算

循环示例:

for i=1:m  % m is the number of elements in k
    f = @(t) normcdf(k(i), b0+b1*x, sigma);
    y = arrayfun(f, x);
    res(i) = trapz(x,y);
end

任何想法如何使用第一种方法获得与for循环相同的结果?
为什么我得到错误?

1 个答案:

答案 0 :(得分:0)

我建议如下:

k = linspace(a,b);
x = c:0.01:d;
[X,K] = meshgrid(x,k)

y = arrayfun(@(p,t) normcdf(p, b0+b1*t, sigma), K(:), X(:))
res = cumtrapz(x,y)

虽然未提供示例数据和所需结果,但未经测试。也许您需要交换xk以及XK的顺序来获得所需的结果。 (或使用ndgrid代替meshgrid,具有相同的效果)