微分方程的解
解析解
需要用到的函数:
diff(f,x,n) % 求f关于变量x的n阶导数,一元函数x可省略,一阶导数n可省略
dsolve(eqns, conds) % eqns是微分方程,conds是初值条件
% 司守奎例6.6
syms x(t) [3,1];
a = [3,-1,1;
2,0,-1;
1,-1,2];
[s1, s2, s3] = dsolve(diff(x,t) == a*x(t), x(0) == ones(3,1))
s 1 = 4 e 3 t 3 − e 2 t 2 + 1 6 s_1 = \frac{4\,{\mathrm{e}}^{3\,t} }{3}-\frac{{\mathrm{e}}^{2\,t} }{2}+\frac{1}{6} s1=34e3t−2e2t+61
s 2 = 2 e 3 t 3 − e 2 t 2 + 5 6 s_2 = \frac{2\,{\mathrm{e}}^{3\,t} }{3}-\frac{{\mathrm{e}}^{2\,t} }{2}+\frac{5}{6} s2=32e3t−2e2t+65
s 3 = 2 e 3 t 3 + 1 3 s_3 = \frac{2\,{\mathrm{e}}^{3\,t} }{3}+\frac{1}{3} s3=32e3t+31
数值解:ode45
一般情况,微分方程形式如下:
{
y
′
=
f
(
x
,
y
)
y
(
x
0
)
=
y
0
\begin{cases} y'=f(x,y)\\ y(x_0)=y_0 \end{cases}
{y′=f(x,y)y(x0)=y0
再套函数:
[x,y] = ode45(func, span, y0)
s = ode45(func, span, y0)
% [x,y]: 方程解曲线的横坐标和纵坐标
% s:与解相关的结构数组
% func:f(x,y),可以用m文件函数和匿名函数
% span:求解区间
% y0: 初值y0
y = deval(s,x) % y在x处的值
对于微分方程组,相关参数稍有变化,例如:
对于大于一阶的常微分方程,需要通过变量代换转变为微分方程组,这时候func参数也是以方程组的形式,例如:
莱斯利种群模型
% 司守奎例8.6
L = [0,4,3;
0.5,0,0;
0,0.25,0];
x0 = [500,1000,500]';
[V,D] = eig(L)
lambda = eig(L)
k = 100;
xk = V*D^k*inv(V)*x0
V = 3×3
0.9474 -0.9320 0.2259
0.3158 0.3560 -0.5914
0.0526 -0.0680 0.7741
D = 3×3
1.5000 0 0
0 -1.3090 0
0 0 -0.1910
lambda = 3×1
1.5000
-1.3090
-0.1910
xk = 3×1
1020 ×
8.6662
2.8887
0.4815