FunctionApproximations`
FunctionApproximations`

InterpolateRoot

InterpolateRoot[lhs==rhs,{x,x0,x1}]

x の最初の2つの値として x0x1を使い,方程式 lhs==rhs の数値解を求める.

詳細とオプション

  • InterpolateRootを使うためには,まず関数近似パッケージをロードしなくてはならない.それにはNeeds["FunctionApproximations`"]を実行する必要がある.
  • InterpolateRootは形式 x->sol の規則として解を与える.
  • InterpolateRoot[expr,{x,x0,x1}]は方程式 expr==0の根を探索する.
  • InterpolateRootは最後の4つのデータ点の逆3次補間を使い,解を探索する.これは導関数情報を使わない.
  • 解が重根のとき,InterpolateRootは非常に遅い.
  • InterpolateRootFindRootほどロバストではない.しかし,根の位置がおおよそ分かっており,関数の各評価が高価で,高精度が望まれる場合には便利である.
  • 方程式と初期値が実数ならば,InterpolateRootは実根のみを探す.そうでない場合は複素根を探す.
  • 次のオプションを与えることができる:
  • AccuracyGoalAutomatic目標確度
    MaxIterations15使用する反復の最大回数
    ShowProgressFalse進行状況を監視するかどうか
    WorkingPrecision40内部計算で使用する精度
  • AccuracyGoalの設定とは,根での残余の大きさではなく根の確度を言う.
  • 内部計算で使用される精度の範囲は通常,初めは機械精度より少し高めで,最後はWorkingPrecisionの設定となる.
  • WorkingPrecisionの設定は所望のAccuracyGoalに達するために超過してもよい.
  • InterpolateRootMaxIterationsステップ内に所望の確度での解を見付けられなかった場合,最後に見付かった近似を返す.
  • ShowProgress->Trueでは,InterpolateRoot{accuracy,x}に続き{precision,extraprecision,delta}を出力する.以下を参照:
  • accuracy現在の解の近似の推定確度
    x現在の解の近似
    precision現在の作業精度
    extraprecision使用されている精度の追加桁数
    delta次の反復での近似の予想される変更

例題

すべて開くすべて閉じる

  (1)

検証する:

スコープ  (2)

InterpolateRootは複素根を求めることができる:

検証する:

exprexpr==0と解釈される:

アプリケーション  (1)

リーマン(Riemann)予想によると,関数Zeta[z]の零点はすべて複素平面の線上にある.次は最初のいくつかの零点である.

Zeta関数を評価する関数を定義し,カウンタを増加させる:

付近の根の実部を400桁まで検証する:

必要な関数評価(とステップ)の数:

割線法でFindRootを使う:

ニュートン法でFindRootを使う:

考えられる問題  (1)

重根の収束は遅い: