How to| 求解偏微分方程
Wolfram 语言的微分方程求解函数可以用于许多不同种类的微分方程,自动选择合适的算法,而无须用户进行预处理. 其中一种类型是偏微分方程(PDE).
使用 D 来求导,以下建立
输运方程,
,并把它存储为 pde:
pde = D[y[x, t], t] + 2D[y[x, t], x] == 0使用 DSolve 来求解方程,并且把解存储为 soln. DSolve 的第一个变量是一个方程,第二个变量是要求解的函数,而第三个变量是自变量组成的列表:
soln = DSolve[pde, y[x, t], {x, t}]答案作为一个规则给出,并且 C[1] 是一个任意函数.
若要把解作为一个函数来使用,比方说 f[x,t],则使用 /. (ReplaceAll 的简写形式)和 [[...]] (Part 的简写形式):
f[x_, t_] = y[x, t] /. soln[[1]]接着,您可以计算 f[x,t] 正如您即时任何其它函数一样:
f[x, 0]您也可以通过使得 DSolve 的第一个变量为一个列表来增加一个初始条件,比如
. 该解被存储为 sol:
sol = DSolve[{pde, y[0, t] == Sin[t]}, y[x, t], {x, t}]使用 Plot3D 来绘制解:
Plot3D[y[x, t] /. sol, {x, -4, 4}, {t, -4, 4}]对非齐次偏微分放出
使用 DSolve,并且具有初始条件
:
sol1 = DSolve[{D[y[x, t], t] + 2D[y[x, t], x] == Sin[x], y[0, t] == Cos[t]}, y[x, t], {x, t}]sol2 = sol1[[1, 1, 2]]sol2 /. {t -> 1, x -> 2}现在,使用 Plot3D 来绘制解:
Plot3D[sol2, {x, -10, 10}, {t, -5, 5}]使用 DSolve 来求解非齐次偏微分方程,例如,
,其中初始条件为
. 其解被存储为 pdesol:
pdesol = DSolve[{b D[y[x, t], t] + a D[y[x, t], x] == c Sin[x], y[0, t] == a Cos[t]}, y[x, t], {x, t}]Fsol[x_, t_] = (y[x, t] /. pdesol)[[1]]Fsol[2, 1]Fsol[2, 1] /. {a -> 2, b -> 5, c -> 10}Plot3D[Fsol[x, t] /. {a -> 2, b -> 5, c -> 10}, {x, -10, 10}, {t, -5, 5}]使用 Manipulate 来显示解 Fsol 如何随着参数 a、b 和 c 而改变:
Manipulate[Plot3D[Fsol[x, t] /. {a -> aa, b -> bb, c -> cc}, {x, -4, 4}, {t, -2, 2}], {aa, -2, 2}, {bb, -2, 2}, {cc, -2, 2}, SaveDefinitions -> True]到目前为止的例子中都使用 DSolve 来获取偏微分方程的符号解. 当一个给定的偏微分方程不包含参数时,NDSolve 可以被用来获取数值解. NDSolve 的结果作为 InterpolatingFunction 对象给出.
以下,由 NDSolve 产生的解被存储为 nsol1:
nsol1 = NDSolve[{D[y[x, t], t] + 2D[y[x, t], x] == 3 , y[x, 0] == x + 3 , y[5, t] == t + 8}, y[x, t], {x, 0, 5}, {t, 0, 4}]使用 Plot3D 绘制解:
Plot3D[nsol1[[1, 1, 2]], {x, 0, 5}, {t, 0, 4}]InterpolatingFunction 对象可以被计算、绘图以及使用在其它操作中.
从 nsol1 即可获得解 InterpolatingFunction 并且把它赋给新符号 nsol2:
nsol2 = nsol1[[1, 1, 2]]nsol2 /. {x -> 1 / 2, t -> 1}使用 Plot3D 绘制解 nsol2:
Plot3D[nsol2, {x, 0, 5}, {t, 0, 4}]当偏微分方程包含参数,NDSolve 可以用于每个特定的参数值. 另外,用户可以建立一个使用 NDSolve 的函数,并且采用参数值.
使用 ?NumericQ 防止函数 fsol 对非数值参数值进行计算:
fsol[k_ ? NumericQ] := NDSolve[{Derivative[2, 0][u][x, t] x ^ 4 == x ^ 3 t Cos[x Sin[t]] / (1 / 10 + Sin[t]) + k Derivative[0, 1][u][x, t], u[0, t] == 0, u[1, t] == 0, u[x, 0] == x(1 - x)}, u[x, t], {x, 0, 1}, {t, 0, 1}]fsol[5]使用 Plot3D 绘制解. Evaluate 是必须的,以使得计算以正确的顺序出现:
Plot3D[Evaluate[u[x, t] /. fsol[5][[1]]], {t, 0, 1}, {x, 0, 1}, PlotRange -> All]NDSolve 也可以与其他 Mathematica 函数一起使用, 比如 Manipulate.
求解对应于参数 k 的某个特定值的偏微分方程,然后绘制所得的解:
Manipulate[Plot3D[Evaluate[u[x, t] /. fsol[k][[1]]], {t, 0, 1}, {x, 0, 1}, PlotRange -> All], {k, 1 / 100, 5}, SaveDefinitions -> True]