微分方程

可以使用 Wolfram 语言的函数 DSolve 求常微分方程的符号解.

求解微分方程实际上是求未知函数的形式. 在 Wolfram 语言中,未知函数用诸如 y[x] 等表达式来表示,其导数用 y'[x]y''[x] 等表示.

Wolfram 语言函数 DSolve 返回的结果是一个函数规则列表. 问题是这些函数如何被表示. 如果令 DSolve 关于 y[x] 求解,那么 DSolve 将返回 y[x] 的规则. 某些情况下,这个规则正是所需要的. 但这个规则本身并不给出y'[x]y[0] 的值. 因此,多数情况下,最好让 DSolve 关于 y 本身,而不是关于 y[x] 求解. 这种情况下,DSolve 返回作为纯函数的 y 的规则,如 "纯函数"一节所讨论的那样.

若让 DSolve 关于 y[x] 求解,它将给出关于 y[x] 的规则.
In[1]:=
Click for copyable input
Out[1]=
该规则仅适用于 y[x] 自身,而不适用于 y[0]y'[x] 等.
In[2]:=
Click for copyable input
Out[2]=
若让 DSolve 关于 y 求解,它将给出关于纯函数 y 的规则.
In[3]:=
Click for copyable input
Out[3]=
现在规则适用于所有的 y.
In[4]:=
Click for copyable input
Out[4]=
将解代入原方程得到 True.
In[5]:=
Click for copyable input
Out[5]=
DSolve[eqn,y[x],x]关于 y[x] 解微分方程
DSolve[eqn,y,x]关于 y 解微分方程

以不同形式得到微分方程的解.

在标准数学表示法中,通常通过明确引入哑变量表示函数的自变量的方法来表示微分方程的解. 如果用户正需要符号形式的解,那么引入哑变量可能是方便的. 但是,如果打算将解用于其它运算中,那么最好是得到不带哑变量的纯函数形式的解. 注意这个形式,在 Wolfram 语言中容易表示,但在标准数学表示法中没有相应的形式.

DSolve[{eqn1,eqn2,},{y1,y2,},x]
求解微分方程组

求解联立微分方程组.

这里求解两个联立微分.
In[6]:=
Click for copyable input
Out[6]=
Wolfram 语言在这种情况下返回 y 的两个不同的解.
In[7]:=
Click for copyable input
Out[7]=

通过给出附加方程如 y[0]==0,可以给微分方程添加约束和边界条件.

这里要求解满足条件 y[0]==1.
In[8]:=
Click for copyable input
Out[8]=

如果令 Wolfram 语言求解微分方程组,而不给出约束和边界条件,那么 Wolfram 语言将尽量求出通解. 这个通解将包含待定常数. 方程中的每一阶导数将引入一个常数.

缺省时这些常数命名为 C[n],其中 n1 开始,随着调用 DSolve 的次数而递增. 通过设置选项 GeneratedParameters 可以覆盖这个选择. 所给的任何函数适用于其后的每一个 n 值从而得到每次调用 DSolve 所用的常数.

此四阶方程的通解包含四个待定常数.
In[9]:=
Click for copyable input
Out[9]=
所给的每一个独立初始或边界条件确定一个待定常数.
In[10]:=
Click for copyable input
Out[10]=

应该认识到,求微分方程的解的精确公式是困难的. 事实上只有少数方程能求出这样的公式解.

研究最多的是线性微分方程,即方程中的函数及其导数是线性的.

这是一个齐次、一阶线性微分方程,其解很简单.
In[11]:=
Click for copyable input
Out[11]=
求解非齐次方程得到一个明显复杂的解.
In[12]:=
Click for copyable input
Out[12]=

对单个微分方程,并且只包含一阶导数,那么通过积分总能求出方程的解.

但对于方程组或包含高阶导数,就不一定能求出解. 然而某些简单的二阶线性方程,通过使用 "特殊函数" 一节的各种特殊函数,仍然能求解. 事实上,在历史上许多特殊函数就是为了表示这种方程的解而引入的.

这是 Airy 方程,根据 Airy 函数得到解.
In[13]:=
Click for copyable input
Out[13]=
这个方程的解用贝塞尔方程表示.
In[14]:=
Click for copyable input
Out[14]=
这里用到 Mathieu 方程.
In[15]:=
Click for copyable input
Out[15]=
这里用到 Legendre 方程.
In[16]:=
Click for copyable input
Out[16]=
有时二阶线性方程仅用基本函数就能表示解.
In[17]:=
Click for copyable input
Out[17]=

二阶以上的方程,甚至相当简单的线性微分方程,求解是需要极端复杂的函数类型. 对三阶方程,广义 Meijer G 函数有时被使用 MeijerG 但对四阶或更高阶的方程,绝对没有适当的数学函数,除非很简单的情形.

这是一个三阶线性微分方程,它能用广义超几何函数给出解.
In[18]:=
Click for copyable input
Out[18]=
这里需要更一般的 Meijer G 函数.
In[19]:=
Click for copyable input
Out[19]=

对于非线性微分方程,仅有一些特殊情形能用标准数学函数求解. 尽管如此,DSolve 包含相当通用的程序,能够处理几乎所有的其解在标准参考书中能找到的非线性微分方程.

不显含 的一阶非线性微分方程很容易求解.
In[20]:=
Click for copyable input
Out[20]=
黎卡提方程的解就复杂得多了.
In[21]:=
Click for copyable input
Out[21]=
而贝努力方程的解相当简单.
In[22]:=
Click for copyable input
Out[22]=
阶贝努力方程通常有 个不同的解.
In[23]:=
Click for copyable input
Out[23]=
阿贝尔方程能被求解但仅给出隐式解.
In[24]:=
Click for copyable input
Out[24]=

在实际应用中, 用分段函数来设置微分方程通常会带来方便. 可以使用 DSolve 来得到这种方程的符号解.

这里牵涉到一个分段强制函数.
In[25]:=
Click for copyable input
Out[25]=
这里方程的解被分成了三种情况.
In[26]:=
Click for copyable input
Out[26]=

除了常微分方程, 还需考虑到微分代数方程, 这种方程是微分方程和代数方程的的组合.

这里对微分代数方程求解.
In[27]:=
Click for copyable input
Out[27]=
DSolve[eqn,y[x1,x2,],{x1,x2,}]
关于 y[x1,x2,] 求解偏微分方程
DSolve[eqn,y,{x1,x2,}]关于 y 求解偏微分方程

求解偏微分方程,

DSolve 不仅能求解仅有一个独立变量的常微分方程,也能求解有二个以上独立变量的偏微分方程.

这里求一个简单二元偏微分方程的通解.
In[28]:=
Click for copyable input
Out[28]=
这里是纯函数形式的解.
In[29]:=
Click for copyable input
Out[29]=

在基础数学中,偏微分方程比常微分方程复杂得多. 一个特征是:常微分方程的通解仅包含任意常数,而偏微分方程的解必须包含任意函数. 实际上 元偏微分方程的解,必定包含 元的任意函数. DSolve 缺省时将这些函数命名为 C[n].

这是一个简单的三元偏微分方程.
In[30]:=
Click for copyable input
Out[30]=
方程的解包含一个任意二元方程.
In[31]:=
Click for copyable input
Out[31]=
这是一位波动方程.
In[32]:=
Click for copyable input
Out[32]=
该二阶方程的解包含两个任意函数.
In[33]:=
Click for copyable input
Out[33]=

对于常微分方程,一般情况下通解都存在,通过简单地添加初始或边界条件,就能确定解中的任意常数. 当对于偏微分方程就不行了,因为只有线性的或很少一些特殊类型的偏微分方程存在通解.

其它的偏微分方程只有当特定的初始或边界条件给定才能求解,并且大多数情形不能求出用标准数学函数表示的公式解.

由于 y 及其导数都是线性的,其通解存在.
In[34]:=
Click for copyable input
Out[34]=
这个弱非线性PDE存在通解.
In[35]:=
Click for copyable input
Out[35]=
这个非线性 PDE 没有通解.
In[36]:=
Click for copyable input
Out[36]=
Translate this page: