@samuelstark
2016-03-25T05:49:25.000000Z
字数 1529
阅读 520
这个程序使用 Eular 方法解了两个耦合的线性常微分方程,需要用户输入 A,B 的处值 NA,NB, 和 A,B 的时间常数 tauA,tauB, 结束时间 t_end, 以及每次计算的时间间隔 dt。之后画出了 NA,NB 随 t 的数值计算出的变化曲线以及真实曲线。
目的是求解以下方程:
分别有初值,则方程的解析解为:
将在处泰勒展开:
这是完整代码
首先引用库:
import pylab as plbimport math
之后建立各个物理量的:
NA=[] #establish a list corresponding to NANB=[] #establish a list corresponding to NBTrue_NA=[] #establish a list corresponding to True NATrue_NB=[] #establish a list corresponding to True NBt=[] #establish a list corresponding to t
然后提示用户输入数据,之后计算每个时刻的数值计算出的,和真实的,并把他们添加到各自的中去:
for i in range(int(t_end/dt)):NA.append(NA[i]+(NB[i]/tauB-NA[i]/tauA)*dt)NB.append(NB[i]+(NA[i]/tauA-NB[i]/tauB)*dt)True_NA.append(C1*math.exp(-(i+1)*dt*(alpha+1)/tauB)+C2)True_NB.append(-C1*math.exp(-(i+1)*dt*(alpha+1)/tauB)+C2*alpha)t.append((i+1)*dt)
最后打印结果并画图。
用户输入的数据:

数值计算的结果:

其中,第一个 是 ,第二个 是 ,第三个 是 。
数值计算以及真实值曲线:

并且当 时,有 。
之前我的作业中并没有解析解的部分,但是在参考了2013301020145陈锋同学的作业后,我加上了这部分。