对输入在一定间隔内的函数求和,MATLAB

时间:2013-05-13 12:12:30

标签: matlab

标题可能略有混淆,但我想做的是以下内容:

我有函数输入x,t,输出y(即y = f(x,t)),以及一组范围xr,tr和我想做

v = zeros(1,length(xr)-1)
for kk=1:(length(xr)-1)
   ix = x >= xr(kk) & x < xr(kk+1) & t >= tr(kk) & t < tr(kk+1)
   v(kk) = sum(y(ix));
end

这非常慢,而histc几乎相同(除了它总结了区间中的条目数而不是函数输出)非常快。如何更快地实施?我尝试使用arrayfun,但这只增加了25%的速度。

谢谢,

1 个答案:

答案 0 :(得分:1)

如果使用带有两个输出参数的histc,则第二个输出将为每个数据条目提供bin编号。您可以使用bin编号来汇总属于每个bin的条目,例如,使用bsxfunaccumarray

[val, id] = histc(x, xr); 

v = accumarray(id(:), y(:));