計算機数学演習 A 2014.6.6. 多項式のユークリッドの互除法 この講義の資料は, http://www.sm.u-tokai.ac.jp/~nakayama/ より入手することができる. 多項式に対するユークリッドの互除法 1 1 変数の多項式についても, 整数と同様に割り算を行うことができた. 約元や公約元や最大公約元なども, 整数と同様 に定義することができる. 例 1. 多項式 f = x3 + x2 + x + 2 を多項式 g = x + 1 で割り算した時, 商は x2 + 1, 余りは 1 である. 割られる元と割 る元の関係式は, f = (x2 + 1)g + 1 となる. 例 2. 多項式 f = (x + 1)2 (x + 2) と g = (x + 1)(x + 2) について, h = (x + 1)(x + 2) は f, g を割り切るので, f と g の 公約元である. さらに, h は f と g の公約元の中で次数が最大のものなので, f と g の最大公約元 GCD(f, g) である. 問題 3. 多項式 f = x4 + x3 + x2 + x + 1 を g = x2 + 2 で割った商と余りを計算せよ. Asir において, 多項式の割り算の商と余りを求める関数として, sdiv と srem がある. Asir における多項式の割り算 [2010] F=x^4+x^3+x^2+x+1; x^4+x^3+x^2+x+1 [2011] G=x^2+2; x^2+2 [2012] sdiv(F, G); F を G で割った商 x^2+x-1 [2013] srem(F, G); F を G で割った余り -x+3 定理 4 (ユークリッドの互除法の原理 (多項式)). 多項式 f, g について, f を g で割った商を q とし, 余りを r とする. (すなわち, f = qg + r (deg r ≤ deg g) が成り立つ.)この時, GCD(f, g) = GCD(g, r) が成り立つ. 例 5. GCD(x3 + 9x2 + 26x + 24, x3 + 7x2 + 14x + 8) を計算する. x3 + 9x2 + 26x + 24 =1 · (x3 + 7x2 + 14x + 8) + (2x2 + 12x + 16) ) ( 1 1 x+ · (2x2 + 12x + 16) + 0 x3 + 7x2 + 14x + 8 = 2 2 だから, GCD(x3 + 9x2 + 26x + 24, x3 + 7x2 + 14x + 8) = GCD(x3 + 7x2 + 14x + 8, 2x2 + 12x + 16) = 2x2 + 12x + 16 問題 6. GCD(x6 − 1, x4 − 1) を手で計算してみよ. アルゴリズム 7 (ユークリッドの互除法 (多項式)). 入力 : 多項式 f, g, 出力 : GCD(f, g) 1. g ̸= 0 である限り, 2, 3, 4 を続ける. 2. r ← (f を g で割った余り) 3. f ← g, 4. 1 へ. g←r 5. f を出力. 1 プログラム 8 (ユークリッドの互除法 (多項式) のプログラム). Asir で上のアルゴリズムを実装すると次のようになる. p gcd.rr def p_gcd(F, G) { while (G != R = F = G = } return F; } end$ 0) { srem(F, G); G; R; 問題 9. 上のプログラムを使って, GCD(x6 − 14x4 + 49x2 − 36, x6 − 6x5 + 11x4 − 5x3 − 6x2 + 11x − 6) を計算せよ. 多項式の最大公約元の応用として, 次のような問題を考える. 例 10. 2 つの多項式 f = x3 − 10x2 + 29x − 20 と g = x4 − 11x3 + 39x2 − 49x + 29 が与えられているとする. 方程 式 f = 0 と g = 0 について, どちらの方程式の解 (共通解) にもなっているものを求めたい. 多項式 f, g の最大公約元 GCD(f, g) = x − 1 となる. 実は x − 1 = 0 の解 x = 1 がその共通解になる. 問題 11. 方程式 6x3 − 5x2 + x = 0 と 60x3 − 71x2 + 26x − 3 = 0 の共通解を求めよ. 問題 12. 方程式 x3 − 6x2 + 11x − 6 = 0 と 24x3 − 26x2 + 9x − 1 = 0 の共通解を求めよ. 上のようにそれぞれの方程式の解はわからなくても, 最大公約元が計算できれば, 共通解は計算することができる. 例 13. 多項式 f = (x−1)(x−2)2 (x−3)3 を考える. 方程式 f = 0 の解は 1, 2, 3 であるが, 2, 3 は重複解である. 多項式 f を x で微分したもの f ′ = (x−2)(x−3)2 (6x2 −22x+11) を考える. 多項式 f, f ′ の最大公約元 GCD(f, f ′ ) = (x−2)(x−3)2 であり, (x − 2)(x − 3)2 = 0 の解と方程式 f = 0 の重複解と対応する. 問題 14. 多項式 f = x5 − 10x4 + 38x3 − 68x2 + 57x − 18 とする. 方程式 f = 0 の重複解を求めよ. (Asir において, x に ついての微分を計算するには, コマンド diff を用いる. 例えば, (x3 + x2 + 1)′ を計算したい場合, diff(x^3+x^2+1, x); と打ち込めばよい.) 問題 15. 多項式 f = (x − 1)3 (x − 2)4 (x − 3)5 とする. f = (x − 1)(x − 2)(x − 3) GCD(f, f ′ ) になることを確かめよ. (多項式の無平方分解)(Asir において, 有理関数は自動的には約分されない. 有理関数を約分 するには, コマンド red を用いる. 例えば, 有理関数 x2 x3 を約分したい場合, red(x^2/x^3); と打ち込めばよい.) 2
© Copyright 2024 ExpyDoc