簡體   English   中英

Python中的拉格朗日插值:作為結果的馬特公式

[英]Lagrange interpolation in Python: as a result matematical formula

我試圖使用拉格朗日插值幾點。 因此,我需要一些配方,例如:

Lx=[1,2,3],
Ly=[1,4,9],
result = x^2 

而不是這個我得到"-4.0*X*(-0.5*X - 1.0)*(-0.2*X + 0.2)*(-0.142857142857143*X +..."

當我用例如5代替X(第12行)時,我得到“25”,正確答案。 有誰能夠幫我?

import sympy 
def Lagrange (Lx, Ly):
    X=sympy.symbols('X')
    if  len(Lx)!= len(Ly):
        print "ERROR"
        return 1
    y=float(0.0)
    for k in range ( len(Lx) ):
        t=float(1.0)
        for j in range ( len(Lx) ):
            if j != k:
                t=t* ( (X-Lx[j]) / float(Lx[k]-Lx[j]) ) # when I put number, OK
        y+= t*Ly[k]
    return y

Lx=[-4,-2,0,1,3]
Ly=[16,4,0,1,9]
print Lagrange(Lx,Ly)

這可能是由於浮點數的四舍五入。 簡化給出:

In [10]: sympy.simplify(Lagrange(Lx,Ly))
Out[10]: X*(1.85037170770859e-17*X**2 + 1.0*X - 1.11022302462516e-16)

這基本上是X**2 嘗試擺脫那些float演員:

def Lagrange (Lx, Ly):
    X=sympy.symbols('X')
    if  len(Lx)!= len(Ly):
        print "ERROR"
        return 1
    y=0
    for k in range ( len(Lx) ):
        t=1
        for j in range ( len(Lx) ):
            if j != k:
                t=t* ( (X-Lx[j]) /(Lx[k]-Lx[j]) )
        y+= t*Ly[k]
    return y

給我:

In [30]: Lx=[-4,-2,0,1,3]
In [31]: Ly=[16,4,0,1,9.]
In [32]: print Lagrange(Lx,Ly)
Out[32]: 1.0*X**2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM