【发布时间】:2017-06-10 08:31:49
【问题描述】:
以下代码采用单个值 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)
例如:
x, X = 3, [[0,0],[1,1],[2,0.5]]
给出 -1.5 的值。
如何修改此代码以通过点列表确定多项式的方程?即如果我将x = 'x' 作为输入,我希望它返回-0.75x**2 + 1.75x [对于给定的示例]
【问题讨论】:
-
也许这是一个开始的地方:sympy.org
标签: python interpolation