欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python插值法(1)————拉格朗日插值多项式

程序员文章站 2022-07-05 17:19:14
...

代码

from sympy import *
import math
from matplotlib import pyplot as plt


def lagrange(x, y):
    p, la = symbols('p  la')
    n = len(x)
    s = 0
    for k in range(n):
        la = y[k]
        for j in range(k):
            la = la * (p - x[j]) / (x[k] - x[j])
        for j in range(k+1, n):
            la = la * (p - x[j]) / (x[k] - x[j])
        s = s + la
    print(expand(simplify(s)))
    return s


p = symbols('p')
x = [i*math.pi/6 for i in range(6)]
print(x)
y = [math.cos(i) for i in x]
t = lagrange(x, y)
chazhi = [i*math.pi/18 for i in range(18)]
chazhiy = []
for i in chazhi:
    chazhiy.append(t.subs(p, i))
plt.figure(figsize=(15, 8), dpi=80)
plt.plot(x, y, 'r1', markersize=25, label='original')
plt.plot(chazhi, chazhiy, 'kD:', markersize=8, label='lagrange')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.savefig('lagrange.jpg')
plt.show()

计算结果如下图所示

Python插值法(1)————拉格朗日插值多项式

相关标签: 计算方法 python