拉格朗日插值Python代码-确定多项式方程

拉格朗日插值Python代码-确定多项式方程,python,interpolation,Python,Interpolation,以下代码接受单个值x和点列表x,并通过给定x值处的点列表确定拉格朗日多项式的值 def chunkIt(seq, num): avg = len(seq) / float(num) out = [] last = 0.0 while last < len(seq): out.append(seq[int(last):int(last + avg)]) last += avg return out def produc

以下代码接受单个值x和点列表x,并通过给定x值处的点列表确定拉格朗日多项式的值

def chunkIt(seq, num):
    avg = len(seq) / float(num)
    out = []
    last = 0.0
    while last < len(seq):
        out.append(seq[int(last):int(last + avg)])
        last += avg
    return out

def product(list):
    p = 1
    for i in list:
        p *= i
    return p

def Lagrange(x,X):
    T = np.zeros((2,len(X)))
    list = []
    for i in range(len(X)):
        for j in range(len(X)):
            if i != j:
                list.append((x-X[j][0])/(X[i][0]-X[j][0]))
    p = []
    for i in chunkIt(list,len(X)):
        p.append(product(i))
    for i in range(len(X)):
        T[0][i] = p[i]
        T[1][i] = X[i][1]

    list2 = []
    for i in range(len(X)):
        list2.append(T[0][i]*T[1][i])
    return sum(list2)
给出的值为-1.5

如何修改此代码以通过点列表确定多项式方程?i、 e.如果我把
x='x'
作为输入,我希望它返回
-0.75x**2+1.75x
[对于给定的示例]

import numpy as np
from pypoly import Polynomial

x, X = 3, [[0, 0], [1, 1], [2, 0.5]]

order = len(X)
这是得到的拉格朗日多项式的阶数。例如,顺序是3

equations = np.array([[point[0] ** i for i in range(order)] for point in X])
values = np.array([point[1] for point in X])
coefficients = np.linalg.solve(equations, values)
通过将点代入一般多项式,建立联立方程。对于3阶,一般多项式为:

a*x**2+b*x**1+c*x**0=y

它通过求解联立方程组来求系数。对于3阶,我们得到a,b,c的值

print 'coefficients', list(coefficients)
系数[0.0,1.75,-0.75]

这里,*运算符将数组的元素like拆分为单独的值,作为参数传递给多项式()

1.75*X-0.75*X**2

-1.5

要使用pip安装,请使用:

对于Python 2:

pip install PyPolynomial
对于Python 3:

pip3 install PyPolynomial

也许这是一个开始:
print p
print p(x)
pip install PyPolynomial
pip3 install PyPolynomial