How to| 验证 DSolve 的结果

尽管 DSolve 通常能够对所给的微分方程返回正确的解,它的常见用法是验证任意微分方程求解程序返回的解. 由 DSolve 给出的解可以通过多种方法验证. 最简单的方法是将解代入原方程. 如果结果为 True,则该解是正确的.

在这个例子中,解通过代入法验证.

为了以后方便,将 DSolve 的第一个参数的值赋为

In[13]:=
Click for copyable input

当指定 DSolve 的第二个参数为 而不是 时,解以纯函数的形式返回. 该形式既有利于解的验证,也为在后继工作中使用提供了方便:

In[14]:=
Click for copyable input
Out[14]=

使用 ReplaceAll 的缩略形式)将解代回原方程:

In[15]:=
Click for copyable input
Out[15]=

这里,使用同样的方法对解是否满足方程及初始条件进行验证:

In[16]:=
Click for copyable input
In[17]:=
Click for copyable input
Out[17]=
In[18]:=
Click for copyable input
Out[18]=
    

有时代入的结果会过于复杂,而不能立即给出 TrueFalse 的结果. 这时可通过 Simplify 将代入结果化简来进行验证. 如果化简后的结果为 True,则解是正确的.

得到一个二阶非齐次方程的解:

In[19]:=
Click for copyable input
In[20]:=
Click for copyable input
Out[20]=

将解代回原方程:

In[21]:=
Click for copyable input
Out[21]=

使用 Simplify 来验证解:

In[22]:=
Click for copyable input
Out[22]=

这里,用同样的方法来验证线性偏微分方程的解:

In[23]:=
Click for copyable input
In[24]:=
Click for copyable input
Out[24]=
In[25]:=
Click for copyable input
Out[25]=

如果方程涉及特殊函数,可能有必要使用 FullSimplify 来验证解.

例如,这个解含有 Bessel 函数:

In[1]:=
Click for copyable input
In[2]:=
Click for copyable input
Out[2]=

使用 Simplify 不能使解得到验证:

In[3]:=
Click for copyable input
Out[3]=

可以使用 FullSimplify

In[4]:=
Click for copyable input
Out[4]=
    

另一个重要的验证方法是对问题中的所有变量和参数进行数值检查. 在这种情况下,最好是对多个随机值的集合重复检查.

在这个例子中,数值验证是有效的:

In[1]:=
Click for copyable input
In[2]:=
Click for copyable input
Out[2]=
In[3]:=
Click for copyable input
Out[3]=

尽管数值检查无法使解得到充分验证,通过使用更高的精度,或允许变量采取复值进行更严格的检查是可以的.

这里用更高的精度对前面的解进行验证:

In[33]:=
Click for copyable input
Out[33]=

这里使用复数随机值验证前面的解:

In[34]:=
Click for copyable input
In[35]:=
Click for copyable input
Out[35]=