NDSolve

NDSolve[eqns, u, {t, tmin, tmax}]
求解函数 u 的常微分方程 eqns 的数值解,自变量 t 的范围为 .

NDSolve[eqns, u, {t, tmin, tmax}, {x, xmin, xmax}]
用来求解偏微分方程 eqns 的数值解.

NDSolve[eqns, {u1, u2, ...}, {t, tmin, tmax}]
用来求解函数  的数值解.

更多信息更多信息

  • NDSolveInterpolatingFunction 对象的形式给出结果.
  • NDSolve[eqns, u[t], {t, tmin, tmax}] 给出 的解而不是函数 u 自身.
  • 微分方程必须用由 D 求得的导数如 的来表示,而不是用 Dt 求得的全导数.
  • NDSolve 可以求解广泛的常微分方程,以及许多偏微分方程.
  • NDSolve 还可以用来求解延迟微分方程.
  • 在常微分方程中函数 只能依赖与单个变量 t. 在偏微分方程中它们可以依赖于多个变量.
  • WhenEvent[event, action] 可能包含在方程 eqns 中,以指定当 event 变成 True 时,出现的 action.
  • 微分方程必须包括足够的初始条件或边界条件来完全确定 的解.
  • 初始条件和边界条件通常以 等形式给出,但也可能由更多复杂的方程构成.
  • 等可以是一个列表,它指定 是有向量或普通列表值的函数.
  • 周期边界条件可以用 指定.
  • 出现在初始条件或边界条件中的点 不必位于求解的范围 内.
  • 在延迟微分方程中, 初始历史函数以 的形式给出, 一般是 t 的函数.
  • NDSolve 中的微分方程可以包含复数.
  • 可以使有应变量的函数,不需要包含所有这样的变量.
  • 可以给出以下选项:
  • AccuracyGoalAutomatic所寻求的绝对精度的位数
    DependentVariablesAutomatic所有应变量的列表
    EvaluationMonitorNone每当计算函数时需要计算的表达式
    InterpolationOrderAutomatic最终输出的连续性度数
    MaxStepFraction1/10每个步骤所覆盖求解范围的最大比例
    MaxSteps10000采用步骤的最大数目
    MaxStepSizeAutomatic每个步骤的最大步长
    MethodAutomatic使用的方法
    NormFunctionAutomatic误差估计使用的范数
    PrecisionGoalAutomatic所寻求的精度的位数
    StartingStepSizeAutomatic初始步长
    StepMonitorNone每进行一个步骤时,要计算的表达式
    WorkingPrecisionMachinePrecision内部计算使用的精度
  • NDSolve 会调整步长,使解中的估计误差在 PrecisionGoalAccuracyGoal 指定的容差内.
  • 选项 NormFunction->f 指定每个 的估计误差需要用 进行组合.
  • AccuracyGoal 实际上指定了求解时每一步所允许的绝对局部误差,而 PrecisionGoal 指定相对局部误差.
  • 如果解的值接近 0,而且要准确地逼近该解, 则 AccuracyGoal 的设置应该较大,或是 Infinity.
  • AccuracyGoalPrecisionGoal 的缺省设置 Automatic 等于 WorkingPrecision/2.
  • MaxStepFraction 的设置指定 NDSolve 采用的最大步长应该是每个独立变量值范围的几分之几.
  • DependentVariables->Automatic 设置下,NDSolve 通过分析给定的方程尽可能的确定应变量.
  • 取决于方程的类型,NDSolve 通常通过几个不同的阶段求解微分方程. 设置 Method->{s1->m1, s2->m2, ...},阶段 由方法 处理. 使用的实际阶段和它们的阶数基于所要解决的问题,由 NDSolve 决定.
  • 可能的解阶段是:
  • "TimeIntegration"微分方程组的时间积分
    "BoundaryValues"常微分方程边界解
    "DiscontinuityProcessing"用于处理不连续微分方程的符号式处理
    "EquationSimplification"用于数值计算的方程的化简
    "IndexReduction"用于微分代数方程的符号式指标化简
    "DAEInitialization"用于微分代数方程的一致初始化
    "PDEDiscretization"用于偏微分方程离散化
  • 设置 Method->m1 或者 Method->{m1, s2->m2, ...},假定方法 用于时间积分,因此 Method->m1 等价于 Method->{"TimeIntegration"->m1}.
  • Method 选项的可能显式时间积分设置包括:
  • "Adams"阶数从 1 到 12 的预估-校正 Adams 方法
    "BDF"阶数从 1 到 5 的隐式向后微分公式
    "ExplicitRungeKutta"从 2(1) 到 9(8) 的 Runge-Kutta 方法的自适应嵌入对
    "ImplicitRungeKutta"任意次数的隐式 Runge-Kutta 方法系列
    "SymplecticPartitionedRungeKutta"
    对可分 Hamiltonian 系统交叉存取的 Runge-Kutta 方法
  • 在设置 Method->{"controller", Method->"submethod"}Method->{"controller", Method->{m1, m2, ...}} 下,可能的控制方法包括:
  • "Composition"组建一个子方法列表
    "DoubleStep"用双倍步长方法来自适应步长
    "EventLocator"对指定事件的响应
    "Extrapolation"用多项式插值方法来自适应阶数与步长
    "FixedStep"用一个固定的步长
    "OrthogonalProjection"投影解来满足正交约束条件
    "Projection"投影解来满足普通约束条件
    "Splitting"分割方程并用不同的子方法
    "StiffnessSwitching"检测到刚性时,从显式到隐式的切换
  • 主要用作子方法的方法包括:
  • "ExplicitEuler"向前欧拉方法
    "ExplicitMidpoint"中点法则
    "ExplicitModifiedMidpoint"有 Gragg 平滑化的中点法则
    "LinearlyImplicitEuler"线性隐式 Euler 方法
    "LinearlyImplicitMidpoint"线性隐式中点法则
    "LinearlyImplicitModifiedMidpoint"
    线性隐式 Bader-平滑化的中点法则
    "LocallyExact"对局部精确符号解的数值近似
  • 设置 InterpolationOrder->All 指定 NDSolve 所产生解的插值阶数要与所用方法的阶数相同.  »

范例范例打开所有单元关闭所有单元

基本范例 (4)基本范例 (4)

求解一阶常微分方程:

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

画出解的图形:

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

画出函数和它的导数的图形:

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

求出特定值:

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

二阶非线性常微分方程:

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

绘制函数和它的前两阶导数:

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

常微分方程组:

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

这里是求解一维热方程:

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

方程的另一种形式:

In[3]:=
Click for copyable input
Out[3]=
版本 2 的新功能 | 版本 9 修改功能
New to Mathematica? Find your learning path »
Have a question? Ask support »