根据大佬的matlab程序改写
算例函数是f(x)=exp(x)
import numpy as np
import time
import matplotlib.pyplot as plt
def f(x):#函数表达式,一阶导数
return np.exp(x)
def H3(x,x0,x1,f0,f1,df0,df1):#定义两点三次 Hermite 插值函数
return (f0*(1+2*(x-x0)/(x1-x0))+df0*(x-x0))*((x-x1)/(x0-x1))**2 +(f1*(1+2*(x-x1)/(x0-x1))+df1*(x-x1))*((x-x0)/(x1-x0))**2
#插值区间
a=-5.0
b=5.0
N=[1,2,4,8,10,12]
for n in N:
h=(b-a)/n#步长
xi=np.linspace(a,b,n+1)#插值节点
fi=f(xi)#插值节点上的函数值
dfi=f(xi)#一阶导数值
x=np.linspace(a,b,101)#需要插值的点, 绘图用
L=len(x)
y = np.zeros((L,1))
for j in range(0,L):
for k in range(0,n+1):
if xi[k]>=x[j]:#寻找 x(j) 所在的小区间 [xk, xk+1]
break
if k>0:
k=k-1
y[j] = H3(x[j], xi[k], xi[k + 1], fi[k], fi[k + 1], dfi[k], dfi[k + 1])
plt.plot(x,f(x))
plt.plot(x,y)
plt.title('n=%d' % n)
plt.legend(['f(x)', 'H3(x)'])
plt.xlabel('x label')
plt.ylabel('y label')
plt.show()
time.sleep(3)



