高次方程式の数値解法と代数解法
以下のような高次方程式をニュートン法,2分法および代数解法により解きます.
f(x)=anxn+an-1xn-1+ ... + a1x+a0=0
OK を押すと4次以下は代数解法,5次以上はニュートン法が自動的に選択されます.
その他のボタンを押すと,対応する解法が選択されます.
ニュートン法
すべての実数解を求めるために,ニュートン法で見つけた解を用いて多項式の次数を下げ,
ニュートン法を繰り返し適用しています.
- 初期点 x0,解精度,最大反復回数,関数値精度を指定します.
- f(x)=0 の実数解を一つ求めるために,ニュートン法を用います.
- 以下の更新式に基づき,|xi+1-xi| が解精度以下になるか,
更新回数が最大反復回数を超えるまで xi を更新します.
xi+1 = xi - f(xi)/f'(xi), i=0,1,2,...
- 最終のxiの値,そのときの yi=f(xi) の値,反復回数 i を表示します.
- |yi| が関数値精度を越えていれば,処理を終了します.
この場合,x を Complex と表示し,y に f(x) を表示します.
- f(x)=(x-xi)P(x)+C を満足する多項式 P(x) を求めます.
C(=yi) は微小値となりますので,無視します.
- P(x) を新たな f(x) として,II へ戻ります.
制限事項
- 探索の途中で,f'(x) が 0 になった場合には探索を継続できません.
初期値を変えて再度探索を行ってみてください.
2分法
- 探索範囲 [xa, xb],範囲分割数 n 個,解精度を指定します.
- 各範囲の大きさを w=(xb-xa)/n とします.
- 各範囲[xi,xi+1], xi=xa+w*i, i=0,1,2,...,n-1 において,以下の処理を行います.
- xp=xi, xq=xi+1 とします.
- f(xp)*f(xq)>0 ならば,区間 [xp,xq] には解は存在しないと判断し,処理を終了します.
そうでなければ,区間内に解が存在しますので,次に進みます.
- 中点 x=(xp+xq)/2 における関数値を y=f(x) とします.
- f(xp)*y<=0 ならば,xq=x,そうでなければ y*f(xq)<=0 ですので,xp=x とします.
- (xq-xp) が解精度以下になれば解 x と関数値 y を表示して処理を終了します.
そうでなければ,c.へ戻ります
制限事項
- 分割した範囲[xi,xi+1]内に解が複数個存在する場合,一つしか解が見つかりません.
探索範囲を小さくするか,範囲分割数を大きくしてみてください.
- 関数が x軸を横切らない場合,例えば (x+1)^2=0 のような場合には,解が見つからないことがあります.
ニュートン法あるいは代数解法を併用してください.
代数解法
- 1次方程式 a x + b = 0 (a≠0)
x = -b/a
ただし,a=0, b=0 ならば任意,a=0, b≠0 ならば不能.
- 2次方程式 a x2+ b x + c = 0 (a≠0)
x = 1/2(-b±(b2-4ac)1/2)
- 3次方程式 a x3+ b x2 + c x + d = 0 (a≠0)
- 係数を a で割り,x3+ b x2 + c x + d = 0 に変形する.
- x = y - b/3 により,y3+p y+q=0 に変形する.
ただし,p=c-b2/3, q=d-bc/3+2b3/27 とする.
- t2+qt-p3/27=0 の解を t1, t2 とする.
- u=t11/3, v=t21/3 とする.
- x1=u + v - b/3
x2=u w + v w2- b/3
x3=u w2+ v w - b/3
ただし,w=e2πi/3 である.
- 4次方程式 a x4+ b x3 + c x2 + d x + e = 0 (a≠0)
- 係数を a で割り,x4+ b x3 + c x2 + d x + e = 0 に変形する.
- x = y - b/4 により,y4+p y2+ q x + r =0 に変形する.
ただし,p=c-3b2/8, q=d-bc/2+b3/8, r=e-bd/4+b2c/16-3b4/256 である.
- t3+p/2 t2+(p2/16-r/4)t-q2/64=0 の解を t1, t2, t3 とする.
- u=t11/2, v=t21/2, w=t31/2 とする.
ただし,u v w=-q/8 となるように,w の符号を調整する.
- x1= u + v + w - b/4
x2= u - v - w - b/4
x3=-u + v - w - b/4
x4=-u - v + w - b/4
制限事項
- 計算誤差のために,本来0となるべき微少な実数部や虚数部が出現することがあります.
現在のところ対処法はありません.