应用Python求解上篇函数在一系列离散点处的近似值。
1 # -*- coding: utf-8 -*- 2 3 import numpy as np 4 import random as r 5 import matplotlib.pyplot as plt 6 import math 7 8 p0=2 9 lam=5 10 #dp/dt=lam*p,p(0)=p0,求p(t) 11 x=[] 12 y=[] 13 for i in np.arange(0, 1.5, 0.001): 14 x.append(i) 15 y.append(p0*math.exp(lam*i)) 16 17 plt.plot(x,y,linewidth=5) 18 19 20 #欧拉求解,向前分成300点分 21 xx=[0] 22 yy=[p0] 23 ds=1*1.0/100 24 for i in np.arange(0+ds, 1.5, ds): 25 xx.append(i) 26 yy.append(yy[-1]+lam*yy[-1]*ds) 27 28 plt.plot(xx,yy,'b',marker='+') 29 30 31 #欧拉求解,向后分成300点分 32 xx2=[0] 33 yy2=[p0] 34 ds=1*1.0/100 35 for i in np.arange(0+ds, 1.5, ds): 36 xx2.append(i) 37 yy2.append(yy2[-1]*1.0/(1-lam*ds)) 38 39 plt.plot(xx2,yy2,'r',marker='*') 40 41 #欧拉求解,修正分成300点分 42 xx3=[0] 43 yy3=[p0] 44 ds=1*1.0/100 45 for i in np.arange(0+ds, 1.5, ds): 46 xx3.append(i) 47 yy3.append((yy3[-1]+ds/2*lam*yy3[-1])/(1-ds/2*lam)) 48 49 plt.plot(xx3,yy3,'--','r',linewidth=2) 50 51 plt.show()
运行结果: