本章主要展示第二章一阶微分方程的初等解法中的各个示例
2.1 变量分离方程与变量变换
例1
d y d t = − x y \frac{dy}{dt}=-\frac{x}{y} dtdy=−yx
f11(u,p,t)=-t./u #运用点语法
u0=0.01
tspan=(-2.0,2.0)
prob1 = ODEProblem(f11,u0,tspan)
sol1 = solve(prob1,saveat=0.01)#,EM(),dt=dt)
plot(sol1)
f12(u,p,t)=-t/u #没有运用点语法
u0=0.01
tspan=(-2.0,2.0)
prob2 = ODEProblem(f12,u0,tspan)
sol2 = solve(prob2,saveat=0.01)#,EM(),dt=dt)
plot(sol2)
两个程序的结果一致。需注意程序中的p,这个即使用不着,也需要加上。若u0不接近0,结果将不一样,假设u0=1/2,结果则为椭圆,即:
例2
d y d t = − y ( − c + d x ) x ( a − b y ) \frac{dy}{dt}=-\frac{y(-c+dx)}{x(a-by)} dtdy=−x(a−by)y(−c+dx)
a、b、c、d为常数,a、b、c、d选取不同将导致最后结果不一致,结果的差别是很大的,本章假设两种情况:一是:c=-10,d=-3,,a=3,b=10,二是:c=10,d=3,,a=3,b=10,两者只差一个负号。
f2(u,p,t)= u*(10-3*t)/(t*(3-10*u))
u0 = 1
tspan = (0.01,10.0)
prob2 = ODEProblem(f2,u0,tspan)
sol2 = solve(prob2,saveat=0.1)
plot(sol2)
f3(u,p,t)= u*(-10+3*t)/(t*(3-10*u))
u0 = 1
tspan = (0.01,10.0)
prob3 = ODEProblem(f3,u0,tspan)
sol3 = solve(prob3,saveat=0.1)
plot(sol3)
注:在编写代码时,需注意自变量的取值范围tspan ,尤其是否能取得0。
例3例4略
例3为人口模型,可参考前一章,例4中的p(x)不做假设,故本章略。
例5
d y d t = x y + t a n x y \frac{dy}{dt}=\frac{x}{y}+tan\frac{x}{y} dtdy=yx<