How to| 验证 DSolve 的结果
尽管 DSolve 通常能够对所给的微分方程返回正确的解,它的常见用法是验证任意微分方程求解程序返回的解. 由 DSolve 给出的解可以通过多种方法验证. 最简单的方法是将解代入原方程. 如果结果为 True,则该解是正确的.
为了以后方便,将 DSolve 的第一个参数的值赋为 eqn:
eqn = y'[x] == x;当指定 DSolve 的第二个参数为
而不是
时,解以纯函数的形式返回. 该形式既有利于解的验证,也为在后继工作中使用提供了方便:
sol = DSolve[eqn, y, x]使用 /. (ReplaceAll 的缩略形式)将解代回原方程:
eqn /. soleqn = {y'[x] == x, y[0] == 1};sol = DSolve[eqn, y, x]eqn /. sol有时代入的结果会过于复杂,而不能立即给出 True 或 False 的结果. 这时可通过 Simplify 将代入结果化简来进行验证. 如果化简后的结果为 True,则解是正确的.
eqn = y''[x] + 5 * y'[x] + 6y[x] == 1;sol = DSolve[eqn, y, x]eqn /. sol使用 Simplify 来验证解:
Simplify[eqn /. sol]PDE = D[u[x, y], x] + Sin[x] * D[u[x, y], y] == x ^ 2;sol = DSolve[PDE, u, {x, y}]Simplify[PDE /. sol]如果方程涉及特殊函数,可能有必要使用 FullSimplify 来验证解.
eqn = x * y''[x] + y'[x] - y[x] == 1;sol = DSolve[eqn, y, x]使用 Simplify 不能使解得到验证:
Simplify[eqn /. sol]可以使用 FullSimplify:
FullSimplify[eqn /. sol]另一个重要的验证方法是对问题中的所有变量和参数进行数值检查. 在这种情况下,最好是对多个随机值的集合重复检查.
eqn = y''[x] - (a * x ^ 6 + x ^ 2) * y[x];sol = DSolve[eqn == 0, y, x]Table[Chop[eqn /. sol /. {x -> RandomReal[], a -> RandomReal[], C[1] -> RandomReal[], C[2] -> RandomReal[]}], {i, 1, 10}]尽管数值检查无法使解得到充分验证,通过使用更高的精度,或允许变量采取复值进行更严格的检查是可以的.
Chop[eqn /. sol /. {x -> RandomReal[ {1, 2}, WorkingPrecision -> 20], a -> RandomReal[ {1, 2}, WorkingPrecision -> 20], C[1] -> RandomReal[ {1, 2}, WorkingPrecision -> 20], C[2] -> RandomReal[ {1, 2}, WorkingPrecision -> 20]}]r := RandomComplex[]Chop[N[eqn /. sol /. {x -> r, a -> r, C[1] -> r, C[2] -> r}]]