如何在节省时间的同时在给定函数上插入一个点?

55次浏览(过去30天)
你好,
我有一个函数 我有N个点的集合 ,即 关于函数f,我想在单个点上求函数的值 不一致 X ,所以 。到目前为止,我一直在使用Matlab函数 = interp1 ( ,“样条”)。但也许这种方法需要一定的计算量。由于我总是在单个点(而不是点的向量)上评估我的函数,是否有替代函数(或方法)来interp1来完成这项任务,从而节省时间?
提前感谢!
4评论
图像分析
图像分析 2021年3月20日
一切都需要计算。请说明 需要多长时间? , 你想要多快 。你可以用tic和toc来计时。

登录评论。

接受的答案

1月
1月 2021年3月22日
如果你专注于社区,在没有开销的情况下快3倍:
X = -360:0.5:359.5;
Y = rand(size(X));
抽搐
K = 1:11 e4
yi1 = interp1(X, Y, xi,样条的);
结束
toc
抽搐
index = find(X, 0, 1)“最后一次”);
XX = X(index-8:index+8);
K = 1:11 e4
F = griddedInterpolant(XX, Y(index-8:index+8),样条的);
y2 = F(xi);
结束
toc
Yi1 - yi2当然有区别:RAND是非常嘈杂的输入数据
运行时间为1.554598秒。
运行时间为0.513496秒。

更多答案(1)

沃尔特·罗伯森
沃尔特·罗伯森 2021年3月19日
在对X进行排序和已知增量的情况下,对于任何xstar,都可以直接计算不超过xstar的相应X bin,即xstar*2+721。称之为idx
jdxstart = min(max(1,idx-2), length(X) - 4);
JDX = jdxstart:jdxstart+4;
pp = spline(X(jdx), y(idx))
Ystar = ppval(pp, xstar);
也就是说,我们在xstar“附近”提取xy,并只在那里样条以减少工作量。
6个评论

登录评论。

社区寻宝

在MATLAB Central中寻找宝藏,并了解社区如何帮助您!

开始狩猎!