|
SOLUTIONS
|
MATHEMATICA 内置符号
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}]
用来求解函数
的数值解.
更多信息更多信息
- NDSolve 以 InterpolatingFunction 对象的形式给出结果.
- NDSolve[eqns, u[t], {t, tmin, tmax}] 给出
的解而不是函数 u 自身. - 微分方程必须用由 D 求得的导数如
的来表示,而不是用 Dt 求得的全导数. - NDSolve 可以求解广泛的常微分方程,以及许多偏微分方程.
- NDSolve 还可以用来求解延迟微分方程.
- 在常微分方程中函数
只能依赖与单个变量 t. 在偏微分方程中它们可以依赖于多个变量. - WhenEvent[event, action] 可能包含在方程 eqns 中,以指定当 event 变成 True 时,出现的 action.
- 微分方程必须包括足够的初始条件或边界条件来完全确定
的解. - 初始条件和边界条件通常以
,
等形式给出,但也可能由更多复杂的方程构成.
,
等可以是一个列表,它指定
是有向量或普通列表值的函数.- 周期边界条件可以用
指定. - 出现在初始条件或边界条件中的点
不必位于求解的范围
到
内. - 在延迟微分方程中, 初始历史函数以
的形式给出,
一般是 t 的函数. - NDSolve 中的微分方程可以包含复数.
可以使有应变量的函数,不需要包含所有这样的变量.- 可以给出以下选项:
-
AccuracyGoal Automatic 所寻求的绝对精度的位数 DependentVariables Automatic 所有应变量的列表 EvaluationMonitor None 每当计算函数时需要计算的表达式 InterpolationOrder Automatic 最终输出的连续性度数 MaxStepFraction 1/10 每个步骤所覆盖求解范围的最大比例 MaxSteps 10000 采用步骤的最大数目 MaxStepSize Automatic 每个步骤的最大步长 Method Automatic 使用的方法 NormFunction Automatic 误差估计使用的范数 PrecisionGoal Automatic 所寻求的精度的位数 StartingStepSize Automatic 初始步长 StepMonitor None 每进行一个步骤时,要计算的表达式 WorkingPrecision MachinePrecision 内部计算使用的精度 - NDSolve 会调整步长,使解中的估计误差在 PrecisionGoal 和 AccuracyGoal 指定的容差内.
- 选项 NormFunction->f 指定每个
的估计误差需要用
进行组合. - AccuracyGoal 实际上指定了求解时每一步所允许的绝对局部误差,而 PrecisionGoal 指定相对局部误差.
- 如果解的值接近 0,而且要准确地逼近该解, 则 AccuracyGoal 的设置应该较大,或是 Infinity.
- AccuracyGoal 和 PrecisionGoal 的缺省设置 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 所产生解的插值阶数要与所用方法的阶数相同. »
版本 2 的新功能 | 版本 9 修改功能
Mathematica 9 is now available!
New to Mathematica?
Find your learning path »
Have a question?
Ask support »





