代码语言:javascript复制
import numpy as np
import matplotlib.pyplot as plt
#用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
#定义函数
f=lambda x:2*x**3 2*x**2 32
#返回向前差商
def forward_diff(x,h):
plt.plot([x,x h],[f(x),f(x h)],'b-d',label='向前差商')
return (f(x h)-f(x))/h
#返回向后差商
def backward_diff(x,h):
plt.plot([x-h,x],[f(x-h),f(x)],'r*-',label='向后差商')
return (f(x)-f(x-h))/h
#返回中心差商
def central_diff(x,h):
a=(f(x-h) f(x h))/2
plt.plot([x-h,x h],[f(x-h) f(x)-a,f(x h) f(x)-a],'g--',label='中心差商')
return (f(x h)-f(x-h))/(2*h)
xx=np.linspace(-1.0,1.5,20)#产生等差数列作为坐标轴标记
yy=f(xx)
plt.plot(xx,yy,'k-',label='原函数')
print('向前差商',forward_diff(1,0.5))
print('向后差商',backward_diff(1,0.5))
print('中心差商',central_diff(1,0.5))
plt.legend()
plt.show()
向前差商 14.5 向后差商 6.5 中心差商 10.5
算法:差分法逼近微分是通过有限差分来近似表示导数(Derivative),从而寻求微分方程(Differential Equation)的近似解,包括向前差分、向后差分和中心差分的形式。