拉格朗日插值Python代码-确定多项式方程
以下代码接受单个值x和点列表x,并通过给定x值处的点列表确定拉格朗日多项式的值拉格朗日插值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
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