0

我有一个矩阵值函数,我试图在 x 变为 1 时找到它的极限。

所以,在这个例子中,我有三个矩阵 v1-3,分别代表 [0.85, 0.9, 0.99] 处的采样值。我现在做的,效率很低,如下:

for i=1:101
 for j = 1:160
  v_splined = spline([0.85,0.9,0.99], [v1(i,j), v2(i,j), v3(i,j)], [1]);
 end
end

必须有更好更有效的方法来做到这一点。尤其是当我很快就会面临 v 将是 4-5 维向量的情况。

谢谢!

4

1 回答 1

0

免责声明:天真地推断是有风险的业务,风险自负

这就是我要说的

  1. 使用样条进行推断是有风险的,通常不推荐。你知道你的函数在 x=1 附近的行为吗?
  2. 在只有 3 个点的情况下,最好使用二阶多项式(抛物线)而不是通过三个点拟合样条曲线。(除非你有充分的理由不这样做。)
  3. 如果你想使用抛物线(或更高阶的插值多项​​式,当你有更多的点),你可以向量化你的代码并使用拉格朗日牛顿多项式来执行外推,这可能会给你一个很好的加速。
  4. 使用插值多项式也可以很容易地推广到给出更多点的高阶多项式。然而,这将使外推更具风险,因为高阶插值多项式往往在域末端附近剧烈振荡。

如果您想使用拉格朗日多项式形成抛物线,您的结果由下式给出:

v_splined = v1*(1-.9)*(1-.99)/( (.85-.9)*(.85-.99) ) ...
           +v2*(1-.85)*(1-.99)/( (.9-.85)*(.9-.99) ) ...
           +v3*(1-.85)*(1-.9)/( (.99-.85)*(.99-.9) );

我没有简化这个,所以你可以看到它是如何来自拉格朗日多项式的,但显然简化很容易。另请注意,这消除了循环的需要。

于 2014-04-25T01:41:12.943 回答