情報地球科学 (2024年前学期) 第10回

今回から後半戦の「数値計算」シリーズに入りたい。

この講義の後半戦では、ある与えられた方程式を、コンピュータに解かせるための方法 (のうち、ごく基本的なもの) として、

  1. 非線形方程式を解く (テキスト第8章)
  2. 定積分を計算する (テキスト第9章)
  3. 常微分方程式を解く (テキスト第10章)
という3つの問題を取り上げて紹介する。 この授業では (あまり) 深く紹介できないが、実際の物理現象の数値シミュレーションの中でも、これらの方法それ自体、あるいはそのさらなる発展形が、頻繁に用いられている。

今回はテキスト第8章に沿って、非線形方程式を数値的に解く方法について、代表的なものを紹介する。

非線形方程式の数値解法

非線形方程式とは、「線形でない」方程式のこと。

世の中には非線形な方程式がたくさんある。 多くの場合、非線形な方程式を手で解くのは困難なので、コンピュータを使って「近似的な」解を探すことになる。

以下、非線形方程式 \(f(x)=0\) の解 (\(f(x)=0\) を「近似的に」満たす \(x\) の値) を求める方法を2つ紹介する。 いずれも「一発で」解を求めるものではなく、目星をうまくつけながら「逐次的に」(だんだんと) 求める解に近づいていくための方法である。

二分法

非線形方程式 \(f(x)=0\) の解が \({a_0}<{x}<{b_0}\) の範囲に1つだけあると「あらかじめ」分かっているとする。 具体例でいうと、 \begin{equation} \begin{split} \text{$f(x)$ が ${a_0}\le{x}\le{b_0}$ で単調 (単調増加あるいは単調減少) で、}\\ \text{かつ $f(x=a_0)$ と $f(x=b_0)$ が異符号}\\ \end{split} \tag{8.1} \end{equation} である場合を考える。 なおこの条件は決して厳しいものではないことを注意しておく。 なぜなら、\(y=f(x)\) のグラフをあらかじめ描いておくなどの手段によって、「解の1つはこの範囲にありそうだ」という予想をたてることは十分可能であるから。

二分法の手順

  1. \(i\) 回目のくり返し計算において、\({a_i}<{x}<{b_i}\) の範囲で関数 \(f(x)\) が単調であり、かつ \(f(x=a_i)\) と \(f(x=b_i)\) の符号が異なるような2つの数 \(a_i\) と \(b_i\) を用意する。
  2. \(x_i=\dfrac{a_i+b_i}{2}\) に対して \(f(x_i)\) を計算する。
  3. \(f(x=x_i)\) の符号によって条件分岐。 (図8.1参照)
    • \(f(x=x_i)\) と \(f(x=a_i)\) の符号が同じならば、\({a_i}<{x}\le{x_i}\) の範囲に解はない。
      次は \({x_i}<{x}\le{b_i}\) の範囲を探せばよいから、 \begin{equation} a_{i+1}\Leftarrow{x_i} ,\quad b_{i+1}\Leftarrow{b_i} \tag{8.2} \end{equation} としてやる。
    • \(f(x=x_i)\) と \(f(x=b_i)\) の符号が同じならば、\({x_i}<{x}\le{b_i}\) の範囲に解はない。
      次は \({a_i}<{x}\le{x_i}\) の範囲を探せばよいから、 \begin{equation} a_{i+1}\Leftarrow{a_i} ,\quad b_{i+1}\Leftarrow{x_i} \tag{8.3} \end{equation} としてやる。
    どちらの場合であっても \begin{equation} b_{i+1}-a_{i+1} = \frac{b_i-a_i}{2} \tag{8.4} \end{equation} という関係が成り立っている。 すなわち、この手順により 解が存在しうる区間の幅を半分に狭める ことができた。
  4. 十分正確な解が求まったらOK、求まっていなければもう一度くり返す。

二分法の性質

式(8.1)の2つの条件を満たしてさえいれば、\(f(x)=0\) を解くのに二分法が使える。 しかも、最初に与える範囲 \(b_0-a_0\) がどれだけ広かったとしても、(計算の手間を十分にかけさえすれば) 求めたい解が必ず得られる。 この意味で、二分法は安全確実な方法だが、正解へたどり着く (収束する) 速さは一般に遅い。

ニュートン法

関数 \(f(x)\) の表式が分かっていて、しかも \(f(x)\) の微分が簡単に計算できる ならば、ニュートン法 (Newton-Raphson 法とも) を使うのがよい。

ニュートン法の手順

ある値 \(x_0\) からくり返し計算を開始するとする。

  1. \(i\) 回目のくり返し計算において、「近似的な」解 \(x_i\) をとる。
  2. 次の式により、\(i+1\) 回目の「近似的な」解 \(x_{i+1}\) を計算する。 \begin{equation} x_{i+1}=x_{i}-\dfrac{f(x_{i})}{f'(x_{i})} \tag{8.5} \end{equation}
  3. 十分正確な解が求まったらOK、求まっていなければもう一度くり返す。

ニュートン法の意味

右図 (図8.3も参照) をもとに、ニュートン法の手順に含まれる式(8.5)の意味を考えてみる。 \(y=f(x)\) のグラフにおいて、曲線上のある点 \((x_i,f(x=x_i))\) を通る接線の方程式は \begin{equation} y=f'(x=x_i)\times(x-x_i)+f(x=x_i) \tag{8.6} \end{equation} これに \(x=x_{i+1}=x_{i}-\dfrac{f(x_{i})}{f'(x_{i})}\) を代入すると、 \begin{equation} y=f'(x=x_i)\times\left[-\dfrac{f(x_{i})}{f'(x_{i})}\right]+f(x=x_i)=0 \tag{8.7} \end{equation} 即ち \(x_{i+1}\) は、曲線 \(y=f(x)\) 上の点 \((x_i,f(x_i))\) における 接線が \(x\)-軸と交わる点の位置 である。

ニュートン法の背景にある考え方とは

この考え方をさらに一般化すれば、
非線形の世界でも、ごく小さな領域だけをみれば、ほぼ線形の世界である
ということができる。 このような考え方は、数値計算の世界で非常によく用いられるものである。

ニュートン法の性質

どの解法を使うべきか? (についての亀山の私見)

以下、代表的な「二分法」と「ニュートン法」で比べてみると、

簡単ながらも安全確実な二分法をまず試してみるべし
というのが現在の亀山の私見。 なおその昔 (亀山が学生だった頃) は
一般的には収束の速いニュートン法を使うべき。ただし、ニュートン法が使えない (\(f'(x)\) が分からないなど) 場合には、二分法でもOK
と教えられてきた。 だが計算機の性能が格段に向上した最近では、ニュートン法の優位性も低下してきたような気が (亀山には) している由。

とはいえ、どの方法を使うにせよ、解きたい \(f(x)\) の性質をあらかじめ知っておくことが 大事。

そのためにも、あらかじめ \(y=f(x)\) のグラフをイメージしておくのがよい。