Subsections
ある方程式の解を数値的に求めるにはどうすればよいのだろうか。例えば
|
(1.1) |
という
を解に持つ方程式を考える。ここでのグラフを描き、解の近くの点、例えばにおける接線を引いてみる(図1左)。
図 1:
Newton法の考え方(左)と、接線による 軸との交点の変化(右)。
|
の、点における接線は
であるから、軸との交点をとすれば
が成り立つので、について解くと
|
(1.2) |
となる。この式にを代入するとが得られ、まあまあに近い。ここで再びにおける接線を引き、を代入して軸との交点を求めると、今度は
となり、に近くなっている。もう一度繰り返せばさらにに近い
が求まる。この操作を繰り返せばの良い近似値を求めることができそうである。
これを一般的に表せば次のようになる。の解を求めたいとすると、まずグラフのにおける接線の式は
となる。この接線と軸との交点をとすれば
という方程式が成り立つので、は
|
(1.3) |
で与えられる。この漸化式を用いてを次々に計算すれば、の解が求まりそうである。この方法をNewton法(Newton's Method)という。また
|
(1.4) |
を用いて
という操作を繰り返す事になるので、このをの反復関数(iteration function)と呼ぶ。具体的にを代入すれば
が得られる。
求まりそうである、と言ったのは求まる事を証明していないからだが、実は十分に良い近似値から反復を繰り返すことで必ず解が求まることが知られている(次の章で証明する)。例えばのような実数解を持たない方程式でも、の付近から反復を始めるとちゃんとが求まる。しかしこの「十分に」というのが曖昧で、どの程度近ければよいのかはそれぞれのに依存する。
また初期値がどの解に近いかによって当然求まる解も違ってくる。先のだと、図1右から考えて、ならばに、ならばに収束するようである。だと、以降は常に無限大となるので、全く意味がない。
実際に数値計算を行う際には、どのくらい少ない回数の反復で必要な精度の近似値を求められるかが重要になってくる。これは近似値を真値との誤差で表すことで調べられる。
具体的に平方根を求める反復関数
の収束の様子を調べてみよう。を
|
(1.5) |
と表すとが誤差であり、は
|
(1.6) |
となるので、誤差はから
になる。図2右
図 2:
平方根を求める反復関数(左、)と、誤差の変化(右)。同じ
座標で見たとき、1回の反復によって実線の値が破線の値になる。
|
からも分かるように、が正ならば1回の反復で誤差は約半分になる。が に近い場合には誤差が大きくなってしまうが、次の反復からは半分程度に減っていくので収束はする。
ここで重要なのは、
の場合に
|
(1.7) |
という近似式が成り立ち、の次数が2であるから1回の反復で正しい桁数が約2倍になる事である。具体的に
とすれば、
となり、正しい桁数が2倍に増えている。このような収束を2次収束という。
一般に、に収束する数列において、ある定数よりも大きい全てのに対して
|
(1.8) |
となるような定数が存在するとき、この数列はに次収束すると言う。また誤差
を、の場合は
、それ以外の場合は
|
(1.9) |
と定義する1。このときならば、は誤差
を用いて
|
(1.10) |
の様に表される。を用いると、(1.8)は
|
(1.11) |
となる。また先の例からも分かるように、の正しい桁数は
の上位の桁を埋めるの数程度である。
加減乗算のみで逆数を求めるには、方程式
|
(1.12) |
の解をNewton法で求めるとよい。この場合反復関数は
|
(1.13) |
となる。誤差の評価をすれば
|
(1.14) |
となるので2次収束である。
一般に逆数を次収束で求める反復関数は、
を用いて
|
(1.15) |
となる。これは
を実際に代入すれば
|
(1.16) |
のように誤差の項が消えてしまう事からすぐに分かる。
逆数を求める場合には初期値に注意しなければならない。どんな場合でも誤差が乗になるため、図3
図 3:
逆数を求める反復関数(左、)と、誤差の変化(右)。2次収束から4次収束の場合を示した。
|
からも分かるように、
となるようにしなければならない。
何度か出てきたように、平方根は反復関数
を用いて2次収束で求めることができる。ここで方程式の解もであるから、
の反復関数を求めると
|
(1.17) |
となり、別の反復関数が得られる。この場合誤差は
となるから2次収束である。また
の反復関数は
|
(1.18) |
となり、さらに別の反復関数が得られる。誤差は
|
(1.19) |
となるから2次収束である。
これらの反復関数のうち、は役に立たない。何故ならの評価には乗算2回と除算1回が必要であるが、は乗算1回と除算1回で済むからである。の評価には乗算2回と除算1回が必要に見えるが、は定数であるから、除算は反復の最初に1回行うだけでよい。そうすれば後は乗算3回でを評価できる。とのどちらを使ったほうが速いかは環境に依存する。
多倍長演算を行う場合には、もしが1桁ならには多倍長の除算がなくなり、常により速く求まる。あるいはにおいてをで置き換えると、
|
(1.20) |
となって多倍長の除算がなくなる。この反復関数を使えばが得られるから、求まった解にを掛ければ全く除算を用いずにが得られる。さらに、最後の反復においてとおき、
|
(1.21) |
とすれば乗算の回数を減らすことができる。
Kenichi Kondo
平成16年3月18日