我有一个循环,在其中我使用 ppval 从分段多项式样条中评估一组值。插值很容易成为循环中最耗时的部分,我正在寻找一种提高函数效率的方法。
更具体地说,我使用有限差分方案来计算摩擦焊缝中的瞬态温度分布。为此,我需要在每个时间步重新计算材料属性(作为温度和位置的函数)。速率限制因素是这些值的插值。我可以使用另一种有限差分方案(在时域中限制较少),但如果可能的话,我宁愿坚持我所拥有的。
我在下面包含了一个 MWE:
x=0:.1:10;
y=sin(x);
pp=spline(x,y);
tic
for n=1:10000
x_int=10*rand(1000,1);
y_int=ppval(pp,x_int);
end
toc
plot(x,y,x_int,y_int,'*') % plot for sanity of data
Elapsed time is 1.265442 seconds.
编辑-我可能应该提到,我对值之间的简单线性插值非常满意,但 interp1 函数比 ppval 慢
x=0:.1:10;
y=sin(x);
tic
for n=1:10000
x_int=10*rand(1000,1);
y_int=interp1(x,y,x_int,'linear');
end
toc
plot(x,y,x_int,y_int,'*') % plot for sanity of data
Elapsed time is 1.957256 seconds.