ユークリッドの互除法の安定化について

ユークリッドの互除法の
安定化について
白柳研究室
5508015
上原 花帆
研究の背景
• 一般に数式処理のアルゴリズムでは、整数
や分数をそのまま使用して計算すると係数膨
張が起こり、計算が出来なくなることがある。
• そこで浮動小数点を用いて表現をすることに
なるが、これは真の値の近似にすぎないので
誤差がつきまとう。
• そこで数値数式融合計算方式の一つである
「安定化手法」に着目。
安定/不安定なアルゴリズムとは
(3𝑥 − 1) ÷
1
𝑥-
3
商:3
余:0
3𝑥 − 1
÷ 𝑥 − 0.333
商:3
余:-0.001
YES
研究の目的
• アルゴリズムによっては、真の値を浮動小数
点で近似したがゆえに、プログラムの出力が
大きく違ってしまう“不安定なアルゴリズム”が
存在する。
• それを“区間”と“ゼロ書き換え”を駆使した安
定化手法を用いて不安定なアルゴリズムを安
定なアルゴリズムに変換することを目的とす
る。
安定化手法
• まず入力の多項式の係数をすべて精度桁n
の区間係数に変換。
例)1/3=0.3333…
[0.332,0.334](精度桁3)
• アルゴリズムの命令に従い、区間演算を行い
ながら進行。
• YESかNOかの判定のときは、その直前に各区
間に対してゼロ書き換えを適用。
• 区間演算
[A,B],[C,D]をそれぞれ区間とする。
・[A,B]+[C,D]=[A+C,B+D]
・[A,B]-[C,D]=[A-C,B-D]
・[A,B]×[C,D]
=[min(A× C, A × D, B × C, B × D),
max(A× C, A × D, B × C, B × D)]
・[A,B]÷[C,D]
=[min(A ÷ C, A ÷ D, B ÷ C, B ÷ D),
max(A ÷ C, A ÷ D, B ÷ C, B ÷ D)]
• ゼロ書き換え
区間がゼロを含めば、その区間をゼロに書き
換えるルール。
例)[-1,1]
[0,5]
[5,10]
0
0
[5,10](変化なし)
・すなわち安定化手法とは、ゼロ書き換えを取
り入れた区間法を指す。
ユークリッドの互除法
入力:(f,g)
a:=f
b:=g
とせよ。
1、bが0ならばaを返せ。
そうでなければ、
2、r:=「aをbで割った余り」
a:=b
b:=r
として1に戻れ。
入力;(F,G) (F,Gは区間係数多
項式)
A:=F
B:=G
とせよ。
1、Bの各区間係数にゼロ書き
換えを行い、もし全部がゼロ
になれば、Aを返せ。
そうでなければ、
2、R:=「AをBで割った余り」
A:=B
B:=R
として、1に戻れ。
実験結果
> euclid1(9x-1, x-0.111);
-0.000999999999
> euclid(kukan1(9x-1, 3), kukan1(x1/9, 3), 3);
[1., 1.] x + [-0.112, -0.110]
m := (9x-1)(2x+3); n := x-1/9
> euclid1(evalf(m, 3), evalf(expand(n),
3));
-0.003222000000
m := (9x-1)(2x+3); n := x-1/9
> euclid(kukan1(m, 3), kukan1(n, 3),
3);
[1, 1] x + [-0.112, -0.110]
実験結果を通して得られたもの
• 安定化していないユークリッドの互除法に近
似値を入力すると全く見当違いな出力となっ
たが、安定化をしたユークリッドの互除法に
区間係数多項式を入力すると真の値に近い
値を出力させることに成功。
1
など)に区間を用いる場合
9
• シンプルな分数(
は精度桁が高くなくても正しい出力を返す。
まとめ
• 安定化手法を適用することで、近似も危険な
ものでなく、上手く取り入れられることがわ
かった。
• 安定化手法はある精度桁から安定すると言
われている。今後の課題として、ユークリッド
の互除法で複雑な区間係数多項式同士を計
算し、どの精度桁から安定化するのかを調べ
る。
• 安定化手法をユークリッドの互除法以外のア
ルゴリズムにも応用していく。