Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica > 数学和算法 > 方程求解 > NDSolve >

NDSolve

NDSolve
求解函数 y 的常微分方程 eqns 的数值解,自变量 x 的范围为 .
NDSolve
用来求解偏微分方程 eqns 的数值解.
NDSolve
用来求解函数  的数值解.
  • NDSolve 给出 的解而不是函数 y 自身.
  • 微分方程必须用由 D 求得的导数如 的来表示,而不是用 Dt 求得的全导数.
  • NDSolve 可以求解广泛的常微分方程,以及许多偏微分方程.
  • NDSolve 还可以用来求解延迟微分方程.
  • 在常微分方程中函数 只能依赖与单个变量 x. 在偏微分方程中它们可以依赖于多个变量.
  • 微分方程必须包括足够的初始条件或边界条件来完全确定 的解.
  • 初始条件和边界条件通常以 等形式给出,但也可能由更多复杂的方程构成.
  • 等可以是一个列表,它指定 是有向量或普通列表值的函数.
  • 周期边界条件可以用 指定.
  • 出现在初始条件或边界条件中的点 不必位于求解的范围 xmin 内.
  • 在延迟微分方程中, 初始历史函数以 的形式给出, 一般是 x 的函数.
  • NDSolve 中的微分方程可以包含复数.
  • NDSolve 可以求解许多微分代数方程,即某些 eqns 是纯代数的,或某些变量可以是隐式代数的.
  • 可以使有应变量的函数,不需要包含所有这样的变量.
  • 可以给出以下选项:
AccuracyGoalAutomatic所寻求的绝对精度的位数
DependentVariablesAutomatic所有应变量的列表
EvaluationMonitorNone每当计算函数时需要计算的表达式
InterpolationOrderAutomatic最终输出的连续性度数
MaxStepFraction1/10每个步骤所覆盖求解范围的最大比例
MaxSteps10000采用步骤的最大数目
MaxStepSizeAutomatic每个步骤的最大步长
MethodAutomatic使用的方法
NormFunctionAutomatic误差估计使用的范数
PrecisionGoalAutomatic所寻求的精度的位数
StartingStepSizeAutomatic初始步长
StepMonitorNone每进行一个步骤时,要计算的表达式
WorkingPrecisionMachinePrecision内部计算使用的精度
  • 选项 NormFunction->f 指定每个 的估计误差需要用 进行组合.
  • AccuracyGoal 实际上指定了求解时每一步所允许的绝对局部误差,而 PrecisionGoal 指定相对局部误差.
  • 如果解的值接近 0,而且要准确地逼近该解, 则 AccuracyGoal 的设置应该较大,或是 Infinity.
  • MaxStepFraction 的设置指定 NDSolve 采用的最大步长应该是每个独立变量值范围的几分之几.
  • Method 选项的可能设置包括:
"Adams"阶数从 1 到 12 的预估-校正 Adams 方法
"BDF"阶数从 1 到 5 的隐式向后微分公式
"ExplicitRungeKutta"从 2(1) 到 9(8) 的 Runge-Kutta 方法的自适应嵌入对
"ImplicitRungeKutta"任意次数的隐式 Runge-Kutta 方法系列
"SymplecticPartitionedRungeKutta"
对可分 Hamiltonian 系统交叉存取的 Runge-Kutta 方法
"MethodOfLines"求解偏微分方程的直线法
  • 在设置 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"对局部精确符号解的数值近似
求解一阶常微分方程:
画出解的图形:
画出函数和它的导数的图形:
求出特定值:
二阶非线性常微分方程:
绘制函数和它的前两阶导数:
常微分方程组:
这里是求解一维热方程:
方程的另一种形式:
求解一阶常微分方程:
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]=
指定任意阶的方程. 自动约化成正规形式:
直接对解微分,来制作一个相图:
直接指定一个方程组:
求解向量值函数:
绘制解的 4 个分量:
用不同而等价的方法将一个谐振子描述为一个二阶方程:
或描述为一个一阶方程组:
用从初值条件推导出维度的向量变量:
用矩阵值变量计算基本矩阵解:
与具体解的比较:
定义一个范德波尔方程:
默认求解器自动处理的解的"刚性"行为:
其它方法可能不能求解:
方程可能有多个不同的解:
是连续的,因为它对分段函数积分一次:
是可微的,而 仅仅是连续的:
一个非线性中点边界值问题:
解一个有两个常数延迟和初始历史函数为 的延迟微分方程:
不连续性从 以与延迟相等的间隔传播:
考查一个线性延迟微分方程的稳定性:
有代数约束的一个微分方程:
非线性一维对流扩散方程:
定义一个抛物-双曲混合型的偏微分方程组:
有周期边界条件的,两个空间维度的非线性 Sine - Gordon 方程:
绘制最后时间的解:
绘制解的径向截面的时间演化:
函数的名称不一定是符号:
默认情况下求解天体力学方程,它对初始条件很敏感:
较高的准确度和精度目标给出不同的结果:
增加目标值使正确的解进一步扩展:
建立一个较大的方程组:
求解所有应变量,但仅保存 的解:
计算的全部数量:
相邻运算间的距离; 负距离表示一个被拒绝的步骤:
InterpolationOrder->All 获得与方法阶数相同的插值:
这比使用默认的插值阶数,耗费更多的时间:
但它在步骤之间表现更好:
相对小的积分间隔上的特征可能会丢失:
MaxStepFraction 确保这些特征不会丢失,使其不依赖于积分区间的大小:
积分在未达到所需要的积分区间时停止:
需要用更多步骤来使解更精确:
在相平面上绘制解:
默认的步长控制可能会导致一个突变性特征的遗失:
一个较小的 MaxStepSize 设置确保 NDSolve 捕捉到这个特征:
尝试计算小于 的正整数的数目时遗漏了一些事件:
设置足够小的 MaxStepSize 来确保没有事件遗漏:
在缺省的求解方法下,相邻步骤间 x 值的差别:
用一个显式 Runge-Kutta 方法,步长改变更加频繁:
8 阶差分:
用 3 阶差分,步长小多了:
插补法倾向采用很大的步长:
使用不同误差估计范数,绘制确切的解的误差:
最佳解的图形:
因为平方根函数不够平滑,求解不能完成:
当求解延迟过程被时,方程被视为一个微分代数方程(DAE):
对于较大的间隔,起点附近的短期特征可能会遗漏:
在起始时设置足够小的步长,这样确保输入不会丢失:
绘制求解过程中的每个步骤对应的点处的解:
求解步骤的全部数目:
相邻步骤间 x 值的差别:
在 100 个周期上谐振子的解的误差:
当工作精度增加时,局部容差也相应增加:
在较大的工作精度下,某些时候 方法十分有效:
解强烈依赖于初值条件:
Lotka-Volterra 捕食-食饵方程 []:
相平面图形:
Lorenz 方程 []:
观看蓝天灾难轨道的外观:
表面周期性加热时,土壤在深度 x 处的温度的简单模型:
周期边界条件下简单波的演化:
绘制解:
Wolfram 非线性波动方程 []:
这里求解该方程的一个 维形式:
约化的 3 体问题 :
适合于数种不同初值条件的表达形式:
受周期势摄动的一个孤子轮廓:
观察 Mackey-Glass 延迟微分方程的解:
微分方程的符号求解与数值求解:
JacobiSN 的定义方程:
数值计算在一个区间内不同点的积分值:
对于自变量的函数,NDSolve 实际上给出不定积分:
找出一个事件与找出解函数的一个根相关:
事件定位(Event location) 可准确而有效地找到根:
这使得 作为一个微分方程的 的函数:
的一个根:
求解等价的边界值问题:
误差随着远离初始条件而趋于增加:
求数值解和精确解之间的差:
一个非线性方程的误差:
对高阶方法,默认的插值在步骤间可能有较大误差:
阶数与方法相应的插值会减少步骤间的误差:
这是一个微分代数方程组:
下求解:
NDSolve 不能在 下求解,因为解不存在:
NDSolve 限制在指标 1,但满足 的解有指标 2:
定义一个非线性的偏微分方程:
空间离散化的基础是初始值,其变化小于终了值:
通过增加空间网格点的最小数量,您可以准确地计算出终了值:
以下图形显示了空间上更为复杂解的初始情形:
定义一个热方程,其初值是一个阶梯函数:
初值的不连续性可能导致过多的空间网格点:
设置较小的空间网格点数目导致一个基本上同样好的解:
定义一个有初值的拉普拉斯(Laplace)方程:
求解器仅对作为初始值 (柯西) 问题适定的方程可行:
不适定性表现为数值解的不稳定性:
这里求出边界值问题的一个平庸解:
您可以通过提供搜索解的初始条件来获得其它解:
版本 2 的新功能 | 版本 7 修改功能
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team
格式:   HTML  |  CDF