How to| 用导数建立微分方程
Wolfram 语言中求解微分方程的函数可用于求解多种类别的微分方程,包括常微分方程(ODE)、偏微分方程(PDE)、微分代数方程(DAE)以及边界值问题(BVP)等. 利用导数建立这些方程以在 Wolfram 语言中求解是非常重要的.
对于常微分方程,有多种方式可以表示以
为自变量的函数
对
的导数.
最普通的方法是使用 D:
D[f[t], t]D[f[t], {t, 1}]f'[t]符号 ' 是 Derivative 的简写符号:
Derivative[1][f][t]FullForm 表明 ' 与 Derivative 等价:
FullForm[f'[t]]用 D 建立常微分方程
以求解,并将该方程存为 ode:
ode = D[f[t], t] + f[t] == 1使用 TraditionalForm 将常微分方程以数学教科书或期刊中的形式显示:
ode//TraditionalForm常微分方程建立好后,可以使用 DSolve 对其进行符号式求解:
DSolve[ode, f[t], t]解 f[t] 用一个嵌套列表中的规则表示. 关于如何将此解从列表中提出并使用的信息,请参见 How to: 使用规则形式的解.
大多数时候,常微分方程伴随着边界及初始条件. 因此,计算函数在给定变量值时的导数将频繁用到. 这可以用多种方式完成. 此处,使用
作为一个范例.
使用 /.(ReplaceAll 的简写符号)将
代入
. Wolfram 语言首先计算 D,然后执行替换:
D[f[t], t] /. t -> 0f'[0]这也等价于 Derivative:
Derivative[1][f][0]eqns = {x ^ 2D[f[t], {t, 2}] + x f[t] == t, (D[f[t], t] /. t -> 0) == 0, f[0] == 0}使用 DSolve 获得符号解:
DSolve[eqns, f[t], t]DSolve[{x ^ 2D[f[t], {t, 2}] + x f[t] == t, (D[f[t], t] /. t -> 0) == 0, f[0] == 0}, f[t], t]另外,您可以将常微分方程用偏微分方程表示,并求解 f[x,t] 而不是 f[t]:
eqns2 = {x ^ 2D[f[x, t], {t, 2}] + x f[x, t] == t, (D[f[x, t], t] /. t -> 0) == 0, f[x, 0] == 0}DSolve[eqns2, f[x, t], t]ode2 = {(x ^ 3 - 2)D[f[t], t] + f[t] == t, f[1] == 2}使用 DSolve 获得符号解:
DSolve[ode2, f[t], t]除了使用 DSolve,您可以使用 NDSolve 得到一个数值解,对应于该常微分方程的一个系数相关的
的特定值.
下面的范例给出
时的解. NDSolve 给出的结果是 InterpolatingFunction 对象的形式:
NDSolve[ode2 /. x -> 4, f[t], {t, 0, 5}]F[x_ ? NumericQ] := NDSolve[{(x ^ 3 - 2)D[f[t], t] + f[t] == t, f[1] == 2}, f[t], {t, 0, 2}][[1, 1, 2]]绘制
及
处的图形. 使用 Evaluate 以确保 F 在 Plot 中的正确计算:
Plot[Evaluate[{F[2], F[4]}], {t, 0, 5}]更多信息请参见 How to: 绘制 NDSolve 的结果.
此处使用
来说明 Wolfram 语言中偏导数的各种不同表示方式.
得到偏导数最常见的方法是使用 D:
D[f[u, t], {t, 1}]D[f[u, t], {t, 2}]D[f[u, t], {t, 2}, {u, 1}]使用 D 略有不同的语法可以完成同一任务:
D[f[u, t], t]D[f[u, t], t, t]D[f[u, t], u, t, t]另一种方法是使用 Derivative:
Derivative[0, 1][f][u, t]Derivative[0, 2][f][u, t]Derivative[1, 2][f][u, t]FullForm 表明这些方法是等价的:
FullForm[D[f[u, t], {t, 2}, {u, 1}]]pde = D[f[u, t], u] + D[f[u, t], t] == 0使用 DSolve 求该偏微分方程的符号解. 结果以任意函数 C[1] 的形式给出:
DSolve[pde , f[u, t], {u, t}]该解也可以纯函数的形式得到. Function 代表 Wolfram 语言中的一个纯函数:
DSolve[pde , f, {u, t}]使用 DSolve 获得该偏微分方程的符号解
,
:
DSolve[{pde, f[u, 0] == u}, f, {u, t}]使用 NDSolve 获得该偏微分方程的数值解
,
,
. 解存为 sol,以便日后使用:
sol = NDSolve[{pde, f[u, 0] == u, f[1, t] == 1 - t}, f, {u, 0, 1}, {t, 0, 1}]Plot3D[f[u, t] /. sol[[1]], {u, 0, 1}, {t, 0, 1}]除了常微分方程与偏微分方程外,Wolfram 系统还可以求解微分代数方程.
eqns = {a x'[t] - y[t] == Cos[t], x[t] + b y[t] == 0};使用 DSolve 获得该微分代数方程的符号解:
sol = DSolve[{eqns, x[0] == 0}, {x[t], y[t]}, t]psol = sol /. {a -> 2, b -> 1}Plot[{x[t] /. psol, y[t] /. psol}, {t, 0, 20}]同一图形也可以通过先将
与
代入 eqns,然后使用 NDSolve 得到:
sol2 = NDSolve[{eqns /. {a -> 2, b -> 1}, x[0] == 0}, {x[t], y[t]}, {t, 0, 20}]如前所述,解的可视化通过 Plot 实现:
Plot[{x[t] /. sol2, y[t] /. sol2}, {t, 0, 20}]