|
> No.3096[元記事へ]
問題
1/(4^(1/3)+2^(1/3)-1) の分母を有理化して下さい。
前回の手法で解いてみると、
答え
x=2^(1/3)とおくと、x^3=2
与式=1/(x^2+x-1)=ax^2+bx+c、a,b,c∈Qの形に書ける。
∴(x^2+x-1)(ax^2+bx+c)=1
そこで、x^3=2に注意して左辺を展開すると、(-a+b+c)x^2+(2a-b+c)x+(2a+2b-c)=1
このとき、1,x,x^2はQ上1次独立だから、
-a +b+c=0
2a -b+c=0
2a+2b-c=1
この連立方程式を解いて、(a,b,c)=(2/11,3/11,-1/11)
よって、1/(4^(1/3)+2^(1/3)-1)=(2*4^(1/3)+3*2^(1/3)-1)/11
(終り)
この解答でのポイントは、
(x^2+x-1)(ax^2+bx+c)=1 となる2次式 ax^2+bx+c を求める
ということである。
この2次式を、別の方法(ユークリッドの互除法)で求めてみる。
まず、簡単なもので考察してみる。
問題
1/√2 の分母を有理化して下さい。
答え
x=√2とおくと、x^2=2
これより、1/x=x/2
(終り)
問題
1/(√2+1) の分母を有理化して下さい。
答え
x=√2とおくと、x^2-2=0
また、x^2-2=(x-1)(x+1)-1
これより、0=(x-1)(x+1)-1 ∴1/(x+1)=x-1
(終り)
整式の変形のポイントは、
g=x^2-2、f=x+1(1番目の問題ではxである)と考えると、g=Qf+R
これより、g=0なので、1/f=-Q/R
(終り)
一般的に、
整式f,gが互いに素のとき、af+bg=(f,g)となる整式a,bが存在する。
これより、g=0なので、1/f=a/(f,g)
以上より、解答は、
答え
x=2^(1/3)とおくと、x^3-2=0
x^3-2=(x^2+x-1)(x-1)+2x-3 ← 式1
x^2+x-1=(2x-3)(x/2+5/4)+11/4 ∴4(x^2+x-1)=(2x-3)(2x+5)+11 ← 式2
式1、式2より、2x-3 を消去して、
11=(2x^2+3x-1)(x^2+x-1)-(2x+5)(x^3-2)
∴与式=(2x^2+3x-1)/11
(終り)
!多項式に対する拡張ユークリッド互除法
!多項式f(x)=A[m]x^m+ … +A[1]x+A[0]、g(x)=B[n]x^n+ … +B[1]x+B[0]、m≧nとして、
!f(x)S(x)+g(x)T(x)=gcd(f(x),g(x))=C(x)となるS(x),T(x),C(x)を求める。
OPTION ARITHMETIC RATIONAL !有理数モード
PUBLIC NUMERIC MAX_DEGREE !最高次数
LET MAX_DEGREE=20
!DATA 3 !次数
!DATA -15,11,-5,1 !-15+11x-5x^2+x^3
!DATA 3 !次数
!DATA 5,3,-1,1 !5+3x-x^2+x^3
!DATA 4 !次数
!DATA 0,0,-9,-15,6 !6x^4-15x^3-9x^2=3x^2(x-3)(2x+1)
!DATA 3 !次数
!DATA 0,3,-4,1 !x^3-4x^2+3x=x(x-1)(x-3)
DATA 2 !次数
DATA -1,1,1 !f(x)=-1+x+x^2
DATA 3 !次数
DATA -2,0,0,1 !g(x)=-2+x^3
!DATA 0,17, 0,29 !12*17+(-7)*29=1
!DATA 2 !次数 1/(7+5*2^(1/3)+3*4^(1/3)) x=2^(1/3)とすると、7+5x+3x^2
!DATA 7,5,3
!DATA 3 !次数
!DATA -2,0,0,1 !g(x)=-2+x^3
!DATA 2 !次数 1/(5*3^(2/3)+2*3^(1/3)+1) x=2^(1/3)とすると、1+2x+5x^2
!DATA 1,2,5
!DATA 3 !次数
!DATA -3,0,0,1 !g(x)=-3+x^3
!DATA 2 !次数 1/(1+64^(1/5)-4^(1/5)) x=2^(1/5)とすると、1+2x-x^2
!DATA 1,2,-1
!DATA 5 !次数
!DATA -2,0,0,0,0,1 !g(x)=-2+x^5
READ M !次数
DIM A(0 TO M) !係数
MAT READ A
READ N !次数
DIM B(0 TO N) !係数
MAT READ B
DIM S(0 TO MAX_DEGREE),T(0 TO MAX_DEGREE),C(0 TO MAX_DEGREE)
CALL PolynomialExtendedGCD(M,A,N,B, ss,S,tt,T,cc,C) !拡張ユークリッド互除法
LET G=C(0) !既約
FOR i=1 TO cc
LET G=GCD(G,C(i))
NEXT i
LET G=G*SGN(C(cc)) !C(x)の最高次数の係数は正
MAT S=(1/G)*S
MAT T=(1/G)*T
MAT C=(1/G)*C
CALL PolynomialDisplay(ss,S) !結果を表示する
PRINT
CALL PolynomialDisplay(tt,T)
PRINT
CALL PolynomialDisplay(cc,C)
PRINT
END
!拡張ユークリッド互除法
! f(x)=A[m]x^m+ … +A[1]x+A[0]、g(x)=B[n]x^n+ … +B[1]x+B[0]、m≧nとして、
! f(x)S(x)+g(x)T(x)=k*gcd(f(x),g(x))=C(x)となるS(x),T(x),C(x)を求める。
EXTERNAL SUB PolynomialExtendedGCD(aa,A(),bb,B(), ss,S(),tt,T(),cc,C()) !拡張ユークリッド互除法
OPTION ARITHMETIC RATIONAL !有理数モード
IF bb=0 AND B(0)=0 THEN !!--- IF b=0 THEN
!!--- s=1 ※f(x)*1+0*0=f(x)とする
LET S(0)=1
LET ss=0
!!--- t=0
LET T(0)=0
LET tt=0
!!--- c=a
MAT C=A
LET cc=aa
ELSE
!!--- q=INT(a/b), r=MOD(a,b)
DIM Q(0 TO MAX_DEGREE),R(0 TO MAX_DEGREE)
IF aa=0 AND bb=0 THEN !定数項のみ
LET Q(0)=INT(A(0)/B(0))
LET qq=0
LET R(0)=MOD(A(0),B(0))
LET rr=0
ELSE
CALL PolynomialQuotientRemainder(aa,A,bb,B, qq,Q,rr,R)
END IF
!!--- CALL ExGCD(b,r, u,v,c) !k=n-1,…,3,2 まで続ける
!!--- s=v
CALL PolynomialExtendedGCD(bb,B,rr,R, tt,T,ss,S,cc,C)
!!--- t=u-v*q
DIM W(0 TO MAX_DEGREE)
CALL PolynomialMultiply(ss,S,qq,Q, ww,W)
MAT T=T-W
LET tt=ww
END IF
END SUB
!補助ルーチン
!演算関連
EXTERNAL SUB PolynomialMultiply(aa,A(),bb,B(), ss,S()) !乗算 S=A*B ※S≠A、S≠B
OPTION ARITHMETIC RATIONAL !有理数モード
MAT S=ZER
FOR i=aa TO 0 STEP -1
LET k=A(i)
IF k=0 THEN !係数が0以外なら
ELSE
FOR j=bb TO 0 STEP -1
LET S(i+j)=S(i+j)+k*B(j) !すべての係数をかける
NEXT j
END IF
NEXT i
LET ss=aa+bb!次数 ※その補正
END SUB
EXTERNAL SUB PolynomialQuotientRemainder(aa,A(),bb,B(), qq,Q(),rr,R()) !除算 ※被除数=商*除数+余り
OPTION ARITHMETIC RATIONAL !有理数モード
IF bb=0 AND B(0)=0 THEN !除数が0なら
PRINT "0で割ることはできません。"
STOP
ELSE
MAT Q=ZER !商
MAT R=A !余り
FOR t=aa TO bb STEP -1 !被除数の次数が除数のより大きいなら
IF R(t)=0 THEN !係数が0以外なら
ELSE
LET k=R(t)/B(bb) !商の係数、その次数
LET w=t-bb
LET Q(w)=k !商
FOR i=bb TO 0 STEP -1 !余り ※R=A-k*B
LET R(w+i)=R(w+i)-k*B(i)
NEXT i
END IF
NEXT t
LET qq=MAX(aa-bb,0) !次数
IF aa>=bb THEN LET i=MAX(bb-1,0) ELSE LET i=aa !次数
FOR rr=i TO 1 STEP -1 !※その補正
IF R(rr)<>0 THEN EXIT FOR
NEXT rr
END IF
END SUB
!表示関連
EXTERNAL SUB PolynomialDisplay(aa,A()) !多項式を表示する a(X)=ΣAkX^k=AnX^n+An-1X^n-1+…+A1X+A0
OPTION ARITHMETIC RATIONAL !有理数モード
CALL mono_disp(A(aa),aa) !最初の項
FOR i=aa-1 TO 0 STEP -1 !次項
LET w=A(i)
IF w>0 THEN PRINT "+";
IF w<>0 OR aa=0 THEN CALL mono_disp(w,i)
NEXT i
END SUB
EXTERNAL SUB mono_disp(ak,k) !単項式を表示する Ak*X^k
OPTION ARITHMETIC RATIONAL !有理数モード
IF k<>0 THEN !x^nで
IF ak=0 OR ak=1 THEN !係数が0,1なら
ELSEIF ak=-1 THEN !係数が-1なら
PRINT "-"; !符号
ELSE
PRINT STR$(ak);"*";
END IF
END IF
IF k=0 THEN !次数が0なら
PRINT STR$(ak);
ELSE
IF ak<>0 THEN !係数が0以外なら
PRINT "X";
IF k<>1 THEN PRINT "^";STR$(k); !次数が1以外なら
END IF
END IF
END SUB
実行結果
+2/11*X^2+3/11*X-1/11
-2/11*X-5/11
1
数値計算による検算
PRINT 1/(4^(1/3)+2^(1/3)-1)
LET X=2^(1/3)
PRINT (2*X^2+3*X-1)/11
END
|
|