Python插值法(3)————hermite插值多项式(拉格朗日型)
程序员文章站
2022-07-05 18:05:18
...
只讨论含一阶导数的情况.
代码
import numpy as np
from sympy import *
from matplotlib import pyplot as plt
def hermite(x, y, dy):
p, la = symbols('p la')
f = 0
n = len(x)
for i in range(n):
la = 1
lp = 0
for j in range(n):
if j != i:
la = la*(p - x[j])/(x[i] - x[j])
lp = lp + 1/(x[i] - x[j])
temp1 = 1 - 2 * (p - x[i])*lp
temp2 = y[i] * temp1 * la * la
temp3 = dy[i] * (p - x[i]) * la * la
f = f + temp2 + temp3
f = simplify(f)
return f
if __name__ == "__main__":
x = [-1, 1, 2, 5, 10]
y = [1, 1, 4, 25, 100]
dy = [-2, 2, 4, 10, 20]
p, la = symbols('p la')
s = hermite(x, y, dy)
x1 = np.linspace(-1, 10, 50)
x1 = list(x1)
y1 = []
for i in x1:
y1.append(s.subs(p, i))
plt.figure(figsize=(15, 8), dpi=80)
plt.plot(x, y, 'r1', markersize=40, label='original')
plt.plot(x1, y1, 'kD:', markersize=8, label='newton')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.savefig('hermite.jpg')
plt.show()
结果如下图所示
下一篇: Python中如何利用经纬度进行距离计算