How to| 用导数建立微分方程

Mathematica 中求解微分方程的函数可用于求解多种类别的微分方程,包括常微分方程(ODE)、偏微分方程(PDE)、微分代数方程(DAE)以及边界值问题(BVP)等. 利用导数建立这些方程以在 Mathematica 中求解是非常重要的.

对于常微分方程,有多种方式可以表示以 为自变量的函数 的导数.

最普通的方法是使用 D

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

可以指定微分次序,这里为1:

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

使用 也可以得到导数

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

符号 Derivative 的简写符号:

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

FullForm 表明 Derivative 等价:

In[2]:=
Click for copyable input
Out[2]//FullForm=
    

D 建立常微分方程 以求解,并将该方程存为

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

使用 TraditionalForm 将常微分方程以数学教科书或期刊中的形式显示:

In[7]:=
Click for copyable input
Out[7]//TraditionalForm=

常微分方程建立好后,可以使用 DSolve 对其进行符号式求解:

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

用一个嵌套列表中的规则表示. 关于如何将此解从列表中提出并使用的信息,请参见 How to: 使用规则形式的解.

大多数时候,常微分方程伴随着边界及初始条件. 因此,计算函数在给定变量值时的导数将频繁用到. 这可以用多种方式完成. 此处,使用 作为一个范例.

使用 ReplaceAll 的简写符号)将 代入 . Mathematica 首先计算 D,然后执行替换:

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

或者,使用 直接地仅计算

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

这也等价于 Derivative

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

再举一个例子,建立常微分方程 , , 用于求解:

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

使用 DSolve 获得符号解:

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

当然,您也可以不建立微分方程,直接求解:

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

另外,您可以将常微分方程用偏微分方程表示,并求解 而不是

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

这里建立了常微分方程

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

使用 DSolve 获得符号解:

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

除了使用 DSolve,您可以使用 NDSolve 得到一个数值解,对应于该常微分方程的一个系数相关的 的特定值.

下面的范例给出 时的解. NDSolve 给出的结果是 InterpolatingFunction 对象的形式:

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

下面的函数 给出相应于 各个值的数值解:

In[32]:=
Click for copyable input

绘制 处的图形. 使用 Evaluate 以确保 Plot 中的正确计算:

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

更多信息请参见 How to: 绘制 NDSolve 的结果.

    

Mathematica 也可以建立并求解偏微分方程.

此处使用 来说明 Mathematica 中偏导数的各种不同表示方式.

得到偏导数最常见的方法是使用 D

In[6]:=
Click for copyable input
Out[6]=
In[7]:=
Click for copyable input
Out[7]=
In[8]:=
Click for copyable input
Out[8]=

使用 D 略有不同的语法可以完成同一任务:

In[11]:=
Click for copyable input
Out[11]=
In[12]:=
Click for copyable input
Out[12]=
In[13]:=
Click for copyable input
Out[13]=

另一种方法是使用 Derivative

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

FullForm 表明这些方法是等价的:

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

下面,考虑一个偏微分方程的多种变形.

建立偏微分方程 用于求解:

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

使用 DSolve 求该偏微分方程的符号解. 结果以任意函数 C[1] 的形式给出:

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

该解也可以纯函数的形式得到. Function 代表 Mathematica 中的一个纯函数:

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

使用 DSolve 获得该偏微分方程的符号解 ,

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

使用 NDSolve 获得该偏微分方程的数值解 , , . 解存为 ,以便日后使用:

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

使用 Plot3D 实现 NDSolve 结果的可视化:

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

在以上的情形中,导数与偏导数以变量的形式给出. 这里,对它们进行数值计算.

下面的两种方式都可用于表示偏导数值,如

In[29]:=
Click for copyable input
Out[29]=
In[28]:=
Click for copyable input
Out[28]=
    

除了常微分方程与偏微分方程外,Mathematica 还可以求解微分代数方程.

作为一个范例,请考虑该微分代数方程 , 满足

In[31]:=
Click for copyable input

使用 DSolve 获得该微分代数方程的符号解:

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

要查看在 时的解,使用 将这些值代入解中:

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

现在绘制解的图形:

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

同一图形也可以通过先将 代入 ,然后使用 NDSolve 得到:

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

如前所述,解的可视化通过 Plot 实现:

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