我尝试做类似以下代码的事情:
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循环相同的结果?
为什么我得到错误?
答案 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)
虽然未提供示例数据和所需结果,但未经测试。也许您需要交换x
和k
以及X
和K
的顺序来获得所需的结果。 (或使用ndgrid
代替meshgrid
,具有相同的效果)