2018年4月5日木曜日

二分法

二分法


代数方程式
は、nが5次以上の場合、解の公式が存在しない。そのため、何らかの方法で近似的に解を求めざるを得ない。このとき、よく用いられるものが、これから述べる二分法であり、ニュートン法である。

中間値の定理
関数f(x)が閉区間[a,b]において連続で、f(a)f(b)が異符号であるとき、
となるxabの間に存在する。

中間値の定理によると、f(x)[a,b]において連続であるとき、
となるξが少なくとも一つ存在する。

そこで、f(a)f(b)<0[a,b]f(α)=0となるαがただ1つ存在するとする。
わかりやすくするために、aa₁bとする。
aと点bの中点
とする。
ならば、c=0が求める解である。
f(c₁)=0でない場合、α[a₁,c₁][c₁,b₁]のいずれかに存在する。
α[a₁,c₁]に存在するとすると、
[c,b]に存在する、つまり、[a₁,c₁]に存在しないときには、
となる。
(2)の場合はa₂=a₁b₂=c₁
(3)の場合はa₂=c₁b₂=b₁
として、[a₂,b₂]で同じ作業を繰り返す。
この作業を一回するたびに、区間の長さは1/2になるので、
である。
このとき、
かつ、
だから、
となる(区間縮小法の原理)。

定理 (区間縮小法の原理)
とする。
ならば、数列はともに収束数列であって、
したがって、この作業を繰り返せば繰り返すほどαに近づき、その極限値が求める方程式f(x)=0の解αである。
しかし、この作業を無限に繰り返すことはできないので、有限回で打ち切らないとならない。
n回、この操作を行ったとき、区間の長さは
したがって、10回行えば、もとの長さの1000分の1に、20回行えば100万分の1になる。
そして、n回で打ち切ったときの誤差は
程度ということになる。

収束の速度は次に述べるニュートン法よりも遅いけれど、ニュートン法はときに計算が収束せず無限ループに陥ることがあるのに対し、2分法は解があれば必ず見つけてくれる極めて安全で確実な方法である。

アルゴリズムらしきものを書くと、次のようになる。

ステップ1 
ステップ2 f(c)=0ならば、cが方程式の解、計算終了
ステップ3 f(a)f(c)<0ならばcbにし、そうでなければ、caにする
ステップ4 「打ち切り条件」を満たしていなければ、ステップ1に戻る

計算の打ち切り条件には、「b−aがある値、たとえば、100万分の1より小さい」などが使われる。

2分法の計算手順は、実際に、手計算でやるとよくわかる。
たとえば、
f(1)=−2<0f(2)=1>0だから、[1,2]に上の方程式の解がある。
だから、a=1b=2とおき、中点cの値を求める。
f(a)=f(1)=−2f(c)=f(1.5)=−0.75だから、f(a)f(c)>0となり、[1,1.5]に解はない。
よって、c=1.5aにセットし直す。つまり、a=1.5b=2
[1.5,2]の中点を計算すると
f(a)=f(1.5)=−0.75f(c)=f(1.75)=3.0625だから、f(a)f(c)<0となり、解は[1.5,1.75]にある。
よって、b=1.75にする。このとき、a=1.5b=1.75
・・・・

表計算ソフトで使って計算した結果を示す。






abがどのように変わってゆくのか、手計算同様に理解できるのではないか。
なお、誤差は
として計算している。

プログラムは、以下の通り。


0 件のコメント:

コメントを投稿