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

如何在Matlab上外推矩阵值函数?,matlab,matrix,numerical-methods,spline,extrapolation,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维向量的情况 谢谢 免责声明:

我有一个矩阵值函数,当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维向量的情况

谢谢

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

这是我要说的

使用样条曲线进行外推是一项风险较高的业务,通常不推荐使用。你知道函数在x=1附近的行为吗? 在只有3个点的情况下,最好使用二阶多项式或抛物线,而不是通过三个点拟合样条曲线。除非你有充分的理由不这样做。 如果要在有更多点时使用抛物线或更高阶插值多项式,可以对代码进行矢量化,并使用或多项式来执行外推,这可能会给您一个很好的速度。 使用插值多项式也可以很容易地推广到给定更多点的高阶多项式。然而,这将使外推更加危险,因为高阶插值多项式往往在域的末端附近剧烈振荡。 如果要使用拉格朗日多项式形成抛物线,则结果如下所示:

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

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

Hi Doug,thnx获得帮助。以下是你问题的一些答案:以下是你问题的一些答案:1接近x=1,矩阵中的一些值在数学上变得无限大,因为它是NLS的奇异解。2这就是为什么我不强迫外推到抛物线。我可以生成更多的点,但它们都将小于0.995,我的模拟已经中断。即使不使用抛物线,样条函数也会强制使用三次多项式。此外,在远离x=1的位置添加更多的点对x=1附近的样条曲线行为影响相对较小,您的外推几乎完全由最接近1的三个点和您选择的边界条件决定,例如自然、非节点、规定坡度。由于不了解x=1附近的函数行为,我不确定还有什么建议。如果你绝对确定x=1处存在奇点,那么对x,y*x-1进行线性或二次插值/近似,以得到px/x-1的分子。@LutzL这当然是假设奇点是一阶极点。它可能是一个高阶极点或一种不同类型的奇点。