求解微分方程组
使用 dsolve 函数(可以指定初始条件,也可以不指定初始条件)求解包含多个变量的由多个常微分方程组成的方程组。要求解单个微分方程,请参阅求解微分方程。
求解微分方程组
求解以下一阶线性微分方程组。
首先,通过使用 syms 创建符号函数 u(t) 和 v(t),来表示 和 。
syms u(t) v(t)
使用 == 定义方程,并使用 diff 函数表示微分。
ode1 = diff(u) == 3*u + 4*v; ode2 = diff(v) == -4*u + 3*v; odes = [ode1; ode2]
odes(t) =
使用 dsolve 函数求解该方程组,它会以结构体的元素形式返回解。
S = dsolve(odes)
S = struct with fields:
v: C1*cos(4*t)*exp(3*t) - C2*sin(4*t)*exp(3*t)
u: C2*cos(4*t)*exp(3*t) + C1*sin(4*t)*exp(3*t)
如果 dsolve 无法求解方程,则尝试以数值方式求解方程。请参阅Solve a Second-Order Differential Equation Numerically。
要获得 u(t) 和 v(t),请对结构体 S 进行索引。
uSol(t) = S.u
uSol(t) =
vSol(t) = S.v
vSol(t) =
或者,通过提供多个输出参量直接存储 u(t) 和 v(t)。
[uSol(t),vSol(t)] = dsolve(odes)
uSol(t) =
vSol(t) =
由于未指定条件,因此解中出现了常数 C1 和 C2。在指定初始条件 u(0) == 0 和 v(0) == 0 的情况下求解该方程组。dsolve 函数会求出满足这些条件的常数的值。
cond1 = u(0) == 0; cond2 = v(0) == 1; conds = [cond1; cond2]; [uSol(t),vSol(t)] = dsolve(odes,conds)
uSol(t) =
vSol(t) =
使用 fplot 绘制解的图。
fplot(uSol) hold on fplot(vSol) grid on legend("uSol","vSol",Location="best")

求解矩阵形式的微分方程
使用 dsolve 求解矩阵形式的微分方程。
以下面这个微分方程组为例。
该方程组的矩阵形式为
设
此时方程组变为 。
定义这些矩阵和矩阵方程。
syms x(t) y(t) A = [1 2; -1 1]; B = [1; t]; Y = [x; y]; odes = diff(Y) == A*Y + B
odes(t) =
使用 dsolve 求解矩阵方程。使用 simplify 函数简化解。
[xSol(t),ySol(t)] = dsolve(odes); xSol(t) = simplify(xSol(t))
xSol(t) =
ySol(t) = simplify(ySol(t))
ySol(t) =
由于未指定条件,因此解中出现了常数 C1 和 C2。
在指定初始条件 和 的情况下求解该方程组。当以矩阵形式指定方程时,也必须以矩阵形式指定初始条件。dsolve 函数会求出满足这些条件的常数的值。
C = Y(0) == [2;-1]; [xSol(t),ySol(t)] = dsolve(odes,C)
xSol(t) =
ySol(t) =
使用 fplot 绘制解的图。
figure fplot(ySol) hold on fplot(xSol) grid on legend("ySol","xSol",Location="best")
