近接根の識別
さて,r, R を先の条件を満たすようにとるとして,そも,R をどのように定めるのか?という問題があります.
確かに,数値解の誤差 R の系において,互いの距離が 2*R 以下である数値解を全て集めれば,重根に対する数値解は必ずそれに属します.しかし,互いの距離が 4*R 以下である厳密相異根(近接根)が存在すると,それらに対する数値解もメンバーになるかも知れません.
ここでもし,系における厳密相異根間の距離の最小値(根差)sep の値が判るならば,sep > 4*R を満たすように R をとっておけば,相異根 r1, r2 に対する数値解 s1, s2 間の距離は
| s2 - s1 | = | (r2 - r1) - (s1 - r1) + (s2 - r2) | >= sep - R - R > 2*R
のように 2*R より大きくなるので,上記のように集めた数値解全体が,重根に対する数値解全体になります.
では如何にして sep の値を得るかですが,それには resultant を繰り返し用いて1変数化する方法があります.maxima では
(%i7) factor(eliminate([2*c+1,4096*c^3+27*b^4,8*a*c-9*b^2-2*a^3,x^4+a*x^2+b*x+c],[c,b,a])); Evaluation took 0.0300 seconds (0.0400 elapsed) using 2.309 MB. (%o7) [33554432*x^8*(2*x^4-27)*(6*x^4-1)^3 *(186624*x^32+2985984*x^28+40621824*x^24+12082176*x^20 +41597280*x^16+64694016*x^12+262151536*x^8 -644544*x^4+729)]
のように必要条件を定める多項式が得られ,この実根
-1.91683..., -0.63894..., 0, 0.63894..., 1.91683...
から,sep >= 0.63894...(実際には c は 0 でないので,1.91683...-0.63894...)と判るので,
R < 0.63894.../4 = 0.15973...
のようにとっておけば,上記の系の近接根に対する数値解間の距離はカウントされず,原理的には,これをすべての多項式の組合せに対して実行し,最小の sep に対して, R を定めればよいことになります.
...が,一般に,resultant の係数は爆発し,モニター画面が埋まります.