NDSolve

NDSolve[eqns, u, {t, tmin, tmax}]
から の範囲における独立変数 t の関数 u について,常微分方程式 の数値解を求める.

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 自体の解を与える代りに の解を与える.
  • 微分方程式は,Dtで得られる全微分ではなく,Dで得られる のような導関数で記述しなければならない.
  • NDSolveは,多種の常微分方程式と多くの偏微分方程式を解くことができる.
  • NDSolveは,多くの遅延微分方程式も解くことができる.
  • 常微分方程式では,関数 は単一変数 t だけに依存するものとする.偏微分方程式では,複数の変数に依存してもよい.
  • WhenEvent[event, action]を方程式 eqns に入れて eventTrueになったときに実現する action を指定することができる.
  • の完全解を得るには,十分な初期条件または境界条件を微分方程式に与えておかなければならない.
  • 初期条件と境界条件は,通常 のように与える.実際に与える式はより複雑なものであっても構わない.
  • 等は,がベクトルあるいは一般的なリストの値を持つ関数であることを指定するリストでもよい.
  • 周期境界条件は を用いて指定することができる.
  • 初期条件や境界条件に指定する点 は,解を求める から の範囲に必ずしもなくてよい.
  • 遅延微分方程式では,最初の履歴関数が の形式で与えられる.ただし,は一般に t の関数である.
  • NDSolveの微分方程式には,複素数を使うことができる.
  • NDSolveは多くの微分代数方程式を解くことができる.この場合,eqns が純粋に代数的なこともあれば,変数のあるものが陰的に代数的なこともある.
  • は従属変数の関数であり得るが,そのような変数すべてを含んでいる必要はない.
  • 指定可能なオプション:
  • AccuracyGoalAutomatic目標とする絶対確度の桁数
    DependentVariablesAutomatic全従属変数のリスト
    EvaluationMonitorNone関数が評価されたときに常に評価される式
    InterpolationOrderAutomatic最終出力の連続性の程度
    MaxStepFraction1/10各ステップでカバーする領域の最大割合
    MaxSteps10000最大ステップ数
    MaxStepSizeAutomatic各ステップの最大刻み幅
    MethodAutomatic使用されるアルゴリズム
    NormFunctionAutomatic誤差推定に用いるノルム
    PrecisionGoalAutomatic目標とする精度の桁数
    StartingStepSizeAutomatic刻み幅の初期値
    StepMonitorNoneステップを取るたびに常に評価される式
    WorkingPrecisionMachinePrecision内部計算で使用する精度
  • NDSolveは解における推定誤差がPrecisionGoalAccuracyGoalで指定された許容率内に収まるような刻み幅を取る.
  • オプションNormFunction->f は各 の推定誤差を を用いて統合するように指定する.
  • AccuracyGoalは,実質的に解を求める各ステップで許される絶対的な局所誤差を指定し,PrecisionGoalは相対的な局所誤差を指定する.
  • 解がゼロ近傍にあるときに,解が正確に求められなければならない場合は,AccuracyGoalを大き目に設定するか,Infinityに設定するとよい.
  • AccuracyGoalPrecisionGoalのデフォルト値のAutomaticWorkingPrecision/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->m1Method->{"TimeIntegration"->m1}に等しい.
  • Methodオプションの可能な明示的時間積分設定:
  • "Adams"一階から12階の予測子・修正子Adams法
    "BDF"一階から五階の陰的後退微分法
    "ExplicitRungeKutta"二階あるいは一階から九階あるいは八階のルンゲ・クッタ法の適応的埋込み型ペア
    "ImplicitRungeKutta"任意階数の陰的ルンゲ・クッタ法の族
    "SymplecticPartitionedRungeKutta"
    分離可能なハミルトン系のためのインターリーブ・ルンゲ・クッタ法
  • Method->{"controller", Method->"submethod"}あるいはMethod->{"controller", Method->{m1, m2, ...}}のときの可能なコントローラ法:
  • "Composition"サブメソッドのリストを作成
    "DoubleStep"ダブルステップ法による刻み幅を適用
    "EventLocator"特殊事象に応答
    "Extrapolation"多項式補外を用いて階数と刻み幅を適用
    "FixedStep"固定刻み幅を使用
    "OrthogonalProjection"直交制約条件を満たす解を投影
    "Projection"一般的な制約条件を満足する解を投影
    "Splitting"式を分割し異なるサブメソッドを使用
    "StiffnessSwitching"硬さが検出されたら陽的メソッドから陰的メソッドに変更
  • 主にサブメソッドとして使われるメソッド:
  • "ExplicitEuler"前進オイラー法
    "ExplicitMidpoint"中点法則法
    "ExplicitModifiedMidpoint"Graggの補整を伴う中点法則法
    "LinearlyImplicitEuler"線形後退オイラー法
    "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]=

関数とその最初の2つの導関数をプロットする:

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 »