ニュートン法

非線形方程式のためのニュートン法は線形近似に基づいている.

このため,ニュートン法のステップは単に と設定することで求めることができる.

ニュートン法は,最小化のための「ニュートン」法と同様に,方程式の根付近で二次収束する.ニュートン法はFindRootのデフォルトのメソッドとして使われている.

ニュートン法は「直線探索法」「信頼領域法」の刻み幅制御に用いることができる.うまくいくと,通常直線探索制御の方が速いが,信頼領域法によるアプローチの方が強力である.

いくつかのユーティリティ関数を含むパッケージをロードする.
In[1]:=
Click for copyable input
次はFindRoot問題としてのローゼンブロック(Rosenbrock)関数である.
In[2]:=
Click for copyable input
Out[2]=
これはデフォルトの直線探索アプローチで非線形系の解を求める.ニュートン法はFindRootのデフォルトのメソッドである.
In[3]:=
Click for copyable input
Out[3]=

それぞれの直線探索が直線 に沿って始まっている点に注意のこと.これはこの問題に特有の,ニュートンステップ独特の特性である.

次で,ローゼンブロック関数のヤコビ行列とニュートンステップを記号的に計算する.
In[4]:=
Click for copyable input
Out[4]=

このステップが点に追加されると,ステップが直線 に動く理由が簡単に分かる.これはこの問題独特の特徴で,ほとんどの関数では見られないことである.「信頼領域法」はニュートンステップが区間の境界線より内側にないとこの方法を試さないので,信頼領域法による刻み幅制御が使われたときは,このような特徴はあまりはっきりとは現れない.

次は,信頼領域法アプローチを使って非線形系の解を求める.この探索はFindMinimumにおけるローゼンブロック目的関数で「ガウス・ニュートン」法を使った探索とほとんど同一である.
In[5]:=
Click for copyable input
Out[5]=

ヤコビ行列の構造が疎である場合,Mathematica はヤコビ行列の計算にも,必要な数値線形代数の扱いにもSparseArrayオブジェクトを使う.

非線形方程式を解くことが,陰的メソッドで微分方程式を解くというような,より一般的な数値解法の一部になっているときは,初期値が極めてよいことが多く,完全収束が絶対に必要なわけではないことがある.ニュートンステップの計算で最も高く付く部分は,ヤコビ行列を求めて行列を因数分解する部分であることが多い.しかし,根に十分近ければ,確実に収束率に影響するが,ヤコビ行列を何ステップ分か凍結しておくことも可能である.Mathematica でこれを行うのには,ヤコビ行列を更新するまでに何ステップ必要かを指定するメソッドオプションのを使う.デフォルトはで,この場合,ヤコビ行列は1ステップごとに更新される.

次は,ヤコビ行列が3ステップごとにしか更新されないときに,単純な二乗根を求めるのに必要なステップ数,関数の評価回数,およびヤコビ行列の評価回数を示したものである.
In[6]:=
Click for copyable input
Out[6]=
次は,ヤコビ行列が各ステップごとに更新されるときに,単純な二乗根を求めるのに必要なステップ数,関数の評価回数,およびヤコビ行列の評価回数を示したものである.
In[7]:=
Click for copyable input
Out[7]=

もちろん,簡単な一次元の根を求めるためにヤコビ行列を更新する場合のコストはそれほど高くない.ここで更新が保存してあるのは例示の目的によるものである.

オプション名
デフォルト値
"UpdateJacobian"1ヤコビ行列を更新するまでに必要なステップ数
"StepControl""LineSearch"刻み幅制御のためのメソッド.None(これは推奨しない)のいずれか

FindRootにおけるMethod->"Newton"のメソッドオプション

New to Mathematica? Find your learning path »
Have a question? Ask support »