Hermite
目录
Hermite插值法
公式
代码
import matplotlib.pyplot as plt
import numpy as np
#计算基函数的导数值
def dl(i, xi):
= 0.0
result for j in range(0,len(xi)):
if j!=i:
+= 1/(xi[i]-xi[j])
result *= 2
result return result
#计算基函数值
def l(i, xi, x):
= 1.0
deno = 1.0
nu
for j in range(0, len(xi)):
if j!= i:
*= (xi[i]-xi[j])
deno *= (x-xi[j])
nu
return nu/deno
#Hermite插值函数
def get_Hermite(xi, yi, dyi):
def he(x):
= 0.0
result for i in range(0, len(xi)):
+= (yi[i]+(x-xi[i])*(dyi[i]-2*yi[i]*dl(i, xi))) * ((l(i,xi,x))**2)
result return result
return he
import math
= [(i * math.pi) + (math.pi / 2) for i in range(-3, 3)]
sr_x = [math.sin(i) for i in sr_x]
sr_fx = [0 for i in sr_x] # 导数都为 0
deriv = get_Hermite(sr_x, sr_fx, deriv) # 获得插值函数
Hx = [i * 0.1 * math.pi for i in range(-20, 20)] # 测试用例
tmp_x = [Hx(i) for i in tmp_x] # 根据插值函数获得测试用例的纵坐标
tmp_y
#画图
'ro')
plt.plot(sr_x, sr_fx, 'b-')
plt.plot(tmp_x, tmp_y, 'Hermite Interpolation')
plt.title( plt.show()