符号参数和不精确数量

在实际应用中出现的微分方程具有两种类型.

  • 方程中仅有的变量是应变量和自变量. 因此,在 DSolve 的第一个变量中出现的所有变量也在第二个或者第三个变量中.
    • 方程中有其他符号量,如质量常数或者弹簧常数. 在这种情况下,解取决于自变量、应变量和其它的符号参数.
    下面是第一种类型的一个例子.
    In[1]:=
    Click for copyable input
    Out[1]=
    下面是第二种类型的一个例子. 该方程具有符号参数 .
    In[2]:=
    Click for copyable input
    Out[2]=

    DSolve 有能力处理这两种类型的方程. 对在第二种类型的方程中的参数的所有可能值具有解是非常有用的.

    下面是对于参数 的不同值绘制的前面的解的图形.
    In[3]:=
    Click for copyable input
    Out[3]=

    应该注意的是,符号参数的出现可以导致相当复杂的输出.

    这从下面的例子中可以看出(方程 2.14,[K59]的第401页).
    In[4]:=
    Click for copyable input
    In[5]:=
    Click for copyable input
    Out[5]=

    然而,对于参数的一些特定值,解可能简单得多.

    对于 的这些值,解简单得多.
    In[6]:=
    Click for copyable input
    Out[6]=

    有时候,一个解对于大部分而不是全部参数值都是有效的.

    由于这个例子中的输入在 不是有效的,该解具有相同的限制.
    In[7]:=
    Click for copyable input
    Out[7]=
    当然,在这种情况下,有一个简单的补救措施:设置 .
    In[8]:=
    Click for copyable input
    Out[8]=

    总之,求解具有符号参数的微分方程的能力是任何符号求解如 DSolve 的强大和重要的特征. 但是,有以下几点值得关注.

  • 解可能是复杂的,并且这样的计算通常需要显著的时间和内存.
  • 答案对于某些特别的参数值可能不是有效的.
    • 解对于参数的某些特定值可能是容易进行符号验证的,但是在通常情况下,我们更倾向于使用一个数值验证.

    Wolfram 语言中的数值量可以是三种类型:无限精度、机器精度或者任意精度. 数字的第一种类型被称为精确,而其余两种类型代表不完整的信息,因此称为不精确.

    下面的简单例子显示了所有这三种类型的数字.
    In[9]:=
    Click for copyable input
    In[10]:=
    Click for copyable input
    Out[10]=
    In[12]:=
    Click for copyable input
    Out[12]=
    In[13]:=
    Click for copyable input
    Out[13]=
    In[14]:=
    Click for copyable input
    Out[14]=

    由于 DSolve 是一个符号求解器,它所使用的算法主要基于精确输入的假设. 然而,包含不精确量的方程以通常方式被DSolve 处理.

    这些方程分别包含不精确数字 3. 和 3.`40.
    In[15]:=
    Click for copyable input
    Out[15]=
    In[16]:=
    Click for copyable input
    Out[16]=

    不精确输入可能出现,例如,当方程中的系数从前面的计算中导出并且只知道近似值时出现. 在这种情况下,把方程转换为精确形式可能不切合实际,因为这会显著降低计算速度.

    下面是具有精确系数的线性常微分方程组. 请注意,即使有相当小的 值,计算仍然需要较长的时间来完成.
    In[17]:=
    Click for copyable input
    Out[17]=
    In[18]:=
    Click for copyable input
    Out[18]=
    这里对解进行验证. 由于解是复杂的,我们使用一个数值验证方法.
    In[19]:=
    Click for copyable input
    Out[19]=
    如果引入了单个不精确数量(在函数 中),则迅速返回解.
    In[20]:=
    Click for copyable input
    Out[20]=
    In[21]:=
    Click for copyable input
    Out[21]=
    In[22]:=
    Click for copyable input
    Out[22]=

    因此,使用不精确数量工作,甚至在一个符号函数如 DSolve 中使用它,往往是可取的. 但是,应该指出的是,在这种情况下得到的解可能具有一定量的数值错误并且应该被仔细检查. 因此建议如果问题规模不大(例如,如果有少于五个方程的情况),输入应该使用 Rationalize 函数转换为精确形式.

    该方程包含不精确量.
    In[23]:=
    Click for copyable input
    Out[23]=
    这里在求解方程之前,把该方程转化为精确形式.
    In[24]:=
    Click for copyable input
    Out[24]=