如何在Matlab上推断矩阵值函数?

时间:2014-04-24 21:02:57

标签: matlab matrix numerical-methods spline extrapolation

我有一个矩阵值函数,我试图找到它的极限,因为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维向量的情况。

谢谢!

1 个答案:

答案 0 :(得分:0)

免责声明:天真的推断是冒险的事情,这样做需要您自担风险

这就是我要说的

  1. 使用样条线进行推断是一项有风险的业务,通常不建议使用。你对x = 1附近函数的行为有什么了解吗?
  2. 如果您只有3个点,那么使用二阶多项式(抛物线)可能会更好,而不是通过三个点拟合样条。 (除非你有充分的理由不这样做。)
  3. 如果你想使用抛物线(或者当你有更多的点时使用更高阶的插值多项​​式),你可以对代码进行矢量化并使用LagrangeNewton多项式来执行外推,这可能会给出你加快了。
  4. 使用插值多项式也可以很容易地推广给出更多点的高阶多项式。然而,由于高阶内插多项式倾向于在域的末端附近剧烈振荡,这将使得外推更具风险。
  5. 如果你想使用拉格朗日多项式形成一个抛物线,你的结果由下式给出:

    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) );
    

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