我正在编写一个能够在a和b之间集成一个函数的函数。问题是该功能仅由具有相应时间点的数据阵列提供。
问题在于,当我必须切断下限和上限时,我必须切掉这段时间内的数据向量部分 - 而我的问题是,如何最有效地完成这项工作?
我现在正在做的事情如下:
llim = find(time==lima);
ulim = find(time==limb);
data = data(llim:ulim);
int1 = h/2*(data(1) + data(end) + 2*sum(data(2:end)));
但根据分析器50-something%在前3行使用,所以如果可以减少它就会很棒。
我也尝试过使用
data = data(time>=lima & time<=limb);
但这并不快。有什么建议吗?
答案 0 :(得分:2)
底线,逻辑条件线获胜。这是对具有随机时间差的1e3长度向量的分析:
N=1e3;
data=rand(1,N);
time=1:N;
for n=1:100
li=sort(randi(N,2,1)) ;
llim = find(time==li(1));
ulim = find(time==li(2));
f1 = @() data( find(time==li(1)): find(time==li(2)));
f2 = @() data(time>=li(1) & time<=li(2));
d(n)=diff(li);
t1(n)=timeit(f1);
t2(n)=timeit(f2);
end
%%
plot(d,t1,'s',d,t2,'o');
xlabel('llim-ulim');
ylabel('time (sec)');
legend('find method','logical cond method');