NumericalCalculus`
NumericalCalculus`

ND

ND[expr,x,x0]

x0における x についての expr の導関数の数値近似を与える.

ND[expr,{x,n},x0]

expr の第 n 導関数の数値近似を与える.

詳細とオプション

  • NDを使うためには,まず数値計算パッケージをロードしなくてはならない.それにはNeeds["NumericalCalculus`"]を実行する必要がある.
  • expr は,その引数 x が数値である場合は,数値でなければならない.
  • ND[expr,x,x0]ND[expr,{x,1},x0]と等価である.
  • NDは実際にはゼロとなるような小さい数を識別することができない.このような誤りの残余を排除するためにChopを使う必要があることがある.
  • 次のオプションを与えることができる:
  • MethodEulerSum使用するメソッド
    Scale1変動が想定される大きさ
    Terms7使用される項の数
    WorkingPrecisionMachinePrecision内部計算で使用する精度
  • Methodに可能な設定は以下の通りである:
  • EulerSum極限にリチャードソン(Richardson)補外を使う
    NIntegrateコーシー(Cauchy)の積分公式を使う
  • Method->EulerSumでは,NDx0expr を評価する必要がある.
  • exprx0 の近傍で解析的でないなら,デフォルトメソッドのEulerSumを使わなければならない.
  • Method->EulerSumを使う場合,変動の尺度を得るためにオプションScale->s が使われる.
  • 導関数の値が方向に依存する場合,デフォルトは右方向である.他の方向はオプションScale->s(方向が s)で選ぶことができる.
  • オプションTerms->n は,Method->EulerSumを使う場合に外挿に使用する項の数を与える.
  • Method->NIntegrateでは,式 expr は点 x0の近傍で解析的でなければならない.
  • オプションScale->rMethod->NIntegrateで使用する積分曲線の半径を指定する.

例題

すべて開くすべて閉じる

  (1)

スコープ  (1)

式と評価点は複素数でもよい:

一般化と拡張  (1)

NDは要素単位で縫い込まれる:

オプション  (7)

Method  (2)

exprx0の近傍で解析的でない場合,デフォルトのMethod->EulerSumが使われる:

検証する:

Method->NIntegrateでは誤った解が得られる:

デフォルトメソッドではうまくいかない導関数である:

正しい解:

この場合,式は解析的なので,Method->NIntegrateはうまく動作する:

Scale  (3)

変動の領域を得るためにはScale->s を使う:

変動のスケールは.01付近である:

大きすぎるScale->s の値は,項の数を増やすことで補正される:

有向導関数の指定にはScaleを使う.非解析的関数の左および右の導関数:

検証する:

複素方向も指定できる:

検証:

オプションScaleを使うと,使用されるメソッドがNIntegrateの場合に,非解析性のある領域を避けることができる:

半径を小さくして x1における真性特異点を回避する:

検証する:

Terms  (1)

項の数を増やすと,確度が向上することがある.次はいく分不正確な近似である:

検証する:

項の数を増やすと,より正確な解が得られる:

さらに項の数を増やすと,数値的不安定性により無意味な結果となることがある:

項の数を増やすとともに作業精度を上げると,誤差が減少することが多い:

WorkingPrecision  (1)

Method->EulerSumの高次の導関数では,明らかな減法約分が起る:

作業精度を上げ,項を増やすと正確な解が求められる:

次の問題では,Method->NIntegrateをデフォルトオプションで使うと正確な解が求められる:

高次の導関数では再び数値的不安定になる:

WorkingPrecisionを増やすと,確度が向上する:

あるいは,積分曲線の半径を大きくしてもよい:

アプリケーション  (1)

NDは数値的にのみ定義される関数を微分するときに便利である.次はそのような関数である:

下は{a,b,t}={1,2,1}で評価された b についての f[a,b][t]の導関数である:

NDは導関数を見付けるためのよりロバストな関数を開発およびテストするためのツールとして使うことができる:

検証する:

特性と関係  (3)

オプションMethod->NIntegrateでは導関数の計算にコーシーの積分公式が使われる:

NResidueを使っても同様の計算が実行できる:

Wolfram言語には数値関数の導関数を計算するためのコードが組み込まれている:

組込みの数値導関数コードを使うことができる.しかし,高速の振動を得ることはできない:

正しい解:

適切なオプションでNDを使うと,正確な導関数が計算できる:

Method->EulerSumでは,NDは点 x0において expr が評価できなければならない:

f に別の定義を加えることにより,NDは導関数が計算できるようになる:

検証する:

この場合,Method->NIntegrateでより正確な解が得られる:

おもしろい例題  (1)

分数あるいは複素数の導関数も計算できることがある: