はじめに
プログラミング云々ばかり言っていても、それがどのように計算されているかを知らないと仕様が無い。ということで数値解析を学んでいく。
基本的には
を参照しつつ、他書で補足する。
前回の復習
- 反復法の基本的な構成手順を説明せよ。 適当な初期値x0から出発し、求めたい解αに収束するような数列{xν}を構成し、xνがαに充分近づいたら計算を打ち切ってその値を近似解とする。 方程式f(x)=0を変形してx=g(x)を得る。 次に求めたい解αを含むような適当な閉区間Iにおいてφ(x)≠0になるように選び、g(x)=x−φ(x)f(x)とおく。次にx0を適当に与えてxν+1=g(xν), ν=0,1,2,⋯とおく。φ(x)を適当に与えることで様々な反復法を得る。
- 関数f(x):I→R,I⊂Rが縮小写像であることの定義を述べよ。 関数f(x)が完備であるときに (1) x∈I⇒g(x)∈I (2) Lipschitz条件 x,x′∈I⇒∃λ∈[0,1) s.t. |g(x)−g(x′)|≤λ|x−x′|を満たす場合、f(x)は縮小写像であると呼ぶ。
2. 非線形方程式の解
2.2 具体的な反復法
2.2.1 2分法
反復法の一種ではあるがより簡単な方法である2分法をまずは扱う。
2分法は中間値の定理を数学的な基礎とする。すなわちfが[min{a,b},max{a,b}]で連続であるとして、もしf(a)<0,f(b)>0となるようなa,bが存在すれば、f(α)=0となるようなαがa,bの間に少なくとも1つ存在する。これを基に以下のようなアルゴリズムを基に近似解を求める。
- f(a)<0,f(b)>0を満たすようなとあるa,bをxの値として取る。また収束判定用にε>0を設定する。
- 新たにc=a+b2を定義する。
- もし|a−b|2<εならば5.に進む。そうでなければ4.に進む。
- もしf(c)>0ならばb=c,f(c)<0ならばa=cとして2.に進む。f(c)=0ならば5.に進む。
- α=cとする。
収束判定条件に着目すると、初めて収束判定条件を満たすような反復回数をnとおくと
が成り立つ。したがってn>log2(|a−b|ε)−1を満たすような最小のnがこのアルゴリズムの計算量である。
2.2.2 Newton法
二分法は安全確実ではあるものの計算に時間がかかる。より高速な方法がNewton法である。
微分可能な関数y=f(x)のグラフの解αの付近の領域を考える。xの適当な初期値x0を取る。次に点(x0,f(x0))におけるf(x)の接線を引き、この接線とx軸の交点をx1とおく。更に点(x1,f(x1))におけるf(x)の接線を引き、この接線とx軸の交点を同様にx2とおく。この操作をn回続けることで得た交点をxnとすれば、点(xn,f(xn))におけるf(x)の接線は
で与えられる。これとy=0との交点xn+1を求めれば、
が得られる。こうして定義できる数列{xn}を用いることで近似解を求めることができる。
いま求めたい方程式の解αを含む適当な区間˜Iにおいてf(x)はC2級かつf′(x)≠0とすれば、
を得る。したがってαを含む適当な区間I⊂˜Iを取れば、系2の仮定が満たされるから、Newton法はf(x)=0の解αに収束する。
Newton法では現在のxnの値が真の解に近づいているかを知る確実な方策が無い。そのため、ある正数ε>0を与え、
となった時点で計算を終了させ、α≈xn+1とする。
以上をまとめると、Newton法は以下のようなアルゴリズムで定義できる:
- 初期値xおよびε>0を設定する。
- xnew=x−f(x)f′(x)とおく。
- |xnew−x|<ε|xnew|ならば5.に移り、そうでなければ4.に移る。
- x=xnewとおき、2.に戻る。
- α=xnewとして計算を終了する。
Newton法の計算量は、2分法よりも少なく高速である。求めたい方程式の解をαとし、εn=xn−αとおく。このときεnとεn+1との関係を考えると、
である。xn=α+(xn−α)=α+εnと書き換えることができることから、Taylorの定理より
を満たすようなξ1,ξ2∈[xn,α]が存在する。これらを代入し、f(α)=0を考慮すれば、
を得る。これはNewton法が急速に誤差を収束させていることを意味する(またこれは反復列{xν}が2次収束することを意味する。)。
他方で2分法に比べ、Newton法は計算に失敗する確率が高い。これは与えられたf(x)と初期値x0に由来する。
前回示した反復法の収束条件を基にNewton法の収束性を示す。
定理2.6 Newton法の収束 区間I⊂Rで定義されたC2級関数f(x)を考える。区間I内に方程式f(x)=0には唯一の解α∈Iが存在し、f′(a)≠0が成り立つと仮定する。このときNewton法は初期値をaの近くから取る限り収束する。
が成り立つから、φ′(a)=0が成り立ち、特に|φ′(a)|<1 である。◼)
なおNewton法以外にも反復列を得る方法はいくつか存在する。
反復する度にfxkを計算するのが難しければ、簡易Newton法
を用いる方法がある。また微分値を求めること自体が難しい場合は、
に注意して、セカント法
が利用できる。1次収束も2次収束もしないものの、その中間くらいの収束性を示すことがある。ただしこの方法にはx0に加えx1も初期値として用いる必要がある。
今回の復習
- 2分法の基礎となる定理を述べよ。
- Newton法のアルゴリズムを説明せよ。
参考文献
- 伊理正夫・藤野和建(1985)「数値計算の常識」(共立出版)
- 菊地文雄・齊藤宣一(2016)「数値解析の原理 現象の解明をめざして」(岩波書店)
- 齊藤宣一(2012)「数値解析入門」(東京大学出版)
- 齊藤宣一(2017)「数値解析」(共立出版)
- 高橋大輔(1996)「理工系の基礎数学8 数値計算」(岩波書店)
- 山本哲朗(2003)「数値解析入門[増訂版]」(サイエンス社)
- 日本応用数理学会 監修・ 櫻井 鉄也 編・ 松尾 宇泰 編・ 片桐 孝洋 編(2018)「数値線形代数の数理とHPC」(共立出版)
- Ridgway Scott, Larkin (2011), "Numerical Analysis", (Princeton University Press)