分母の有理化

 投稿者:山中和義  投稿日:2013年 7月15日(月)07時15分53秒
  分母の有理化には、恒等式 a^2-b^2=(a+b)(a-b) を使う。
3項以内なら、何回か適用すれば求まるが、計算の手間も左右される。

簡略化されるパターン

a-b=kなら、1/(√a±√b)=(√a干√b)/k  例 1/(√2+√3)
(考察)
1/(√a±√b)
=(√a干√b)/{(√a±√b)(√a干√b)}
=(√a干√b)/(a-b)
=(√a干√b)/k
(終り)

参考
a^2+b^2=kなら、1/(a±bi)=(a干bi)/k
(考察)
1/(a±bi)
=(a干bi)/{(a±bi)(a干bi)}
=(a干bi)/(a^2+b^2)
=(a干bi)/k
(終り)


√a+√b+√(a+b)の型  例 1/(√2+√3+√5)
(考察)
{(√a+√b)+√(a+b)}{(√a+√b)-√(a+b)}
=(√a+√b)^2-{√(a+b)}^2
=2√(ab)
より、
1/{√a+√b+√(a+b)}=√(ab){√a+√b-√(a+b)}/(2ab)=(b√a+a√b-√{ab(a+b)})/(2ab)
(終り)


√a+√b+√c+√d、ab=cdの型  例 1/(1+√6+√2+√3)
(考察)
{(√a+√b)+(√c+√d)}{(√a+√b)-(√c+√d)}
=(√a+√b)^2-(√c+√d)^2
=a+b+2√(ab)-{c+d+2√(cd)}
=a+b-c-d
より、
1/(√a+√b+√c+√d)=(√a+√b-√c-√d)/(a+b-c-d)
(終り)


√a+√b+√c+√d、a+b=c+dの型  例 1/(√2+√5+2+√3)
(考察)
{(√a+√b)+(√c+√d)}{(√a+√b)-(√c+√d)}
=(√a+√b)^2-(√c+√d)^2
=a+b+2√(ab)-{c+d+2√(cd)}
=2{√(ab)-√(cd)}
より、
1/(√a+√b+√c+√d)
={√(ab)+√(cd)}(√a+√b-√c-√d)/{2(ab-cd)}
={a√b+b√a-√(abc)-√(abd) +√(acd)+√(bcd)-c√d-c√d}/{2(ab-cd)}
(終り)


一般的に、

1/(√5+√3)=(√5-√3)/{(√5+√3)(√5-√3)}=(√5-√3)/2
答え
(√3+√5)(A+B√3+C√5+D√15)=k(0以外の整数)と表されるなら、
1/(√3+√5)=(A+B√3+C√5+D√15)/kとなる。
(√3+√5)(A+B√3+C√5+D√15)
=(A√3+3B+C√15+3D√5) + (A√5+B√15+5C+5D√3)
=(3B+5C)+(A+5D)√3+(A+3D)√5+(B+C)√15
なので、連立方程式 3B+5C=k、A+5D=0、A+3D=0、B+C=0 を解く。
(終り)


OPTION ARITHMETIC RATIONAL !有理数モード

!LET N=2
!DATA 3,5 !√3+√5
!DATA 1,1 !係数部分

!LET N=3
!DATA 1,2,3 !1+√2+√3
!DATA 1,1,1 !係数部分

!LET N=3
!DATA 2,3,5 !-√2+√3+√5
!DATA -1,1,1 !係数部分

LET N=3
DATA 1,3,5 !2+√3+√5=2√1+√3+√5
DATA 2,1,1 !係数部分

!LET N=3
!DATA 9,5,7 !3-√5-√7
!DATA 1,-1,-1 !係数部分

!LET N=4
!DATA 1,6,2,3 !1+√6+√2+√3
!DATA 1,1,1,1 !係数部分

!LET N=4
!DATA 5,4,3,2 !√5+2+√3+√2=√5+√4+√3+√2
!DATA 1,1,1,1 !係数部分


DIM R(N),C(N) !√a、√b、√c、… のn個
MAT READ R
MAT READ C

DIM RR(2^N) !√a、√b、√c、√ab、√bc、√ca、√abc、…
MAT RR=ZER
LET S=0
FOR i=0 TO 2^N-1 !組合せ ※2進法N桁
   LET t=i

   LET w=1
   FOR J=1 TO N
      IF MOD(t,2)=1 THEN LET w=w*R(J)
      LET t=INT(t/2)
   NEXT J
   CALL SqNormalize(w, p,q) !√wをp√qと変形する

   FOR J=1 TO S !新しい値なら
      IF q=RR(J) THEN EXIT FOR
   NEXT J
   IF J>S THEN !登録する
      LET S=S+1
      LET RR(S)=q
   END IF

NEXT i
PRINT S !debug
MAT PRINT RR; !debug


!連立方程式Ax=bを立てる
! (√a+√b+√c)(A√1+B√a+C√b+D√c+E√ab+F√bc+G√ca+H√abc)
!=( A~Hの線形結合 )√1+( … )√a+( … )√b+( … )√c+( … )√ab+( … )√bc+( … )√ca+( … )√abc
!=k(整数)
!とする恒等式から、係数A~Hを求める。
DIM A(S,S),x(S),b(S)

MAT A=ZER
FOR i=1 TO N !左側の括弧
   FOR J=1 TO S !右側の括弧
      LET w=R(i)*RR(J) !展開する
      CALL SqNormalize(w, p,q) !√wをp√qと変形する

      FOR K=1 TO S !√qの位置を探す
         IF q=RR(K) THEN EXIT FOR
      NEXT K
      IF K>S THEN
         PRINT "論理エラー"; i;J; w; p;q
         STOP
      ELSE !見つかったなら
         LET A(K,J)=A(K,J)+C(i)*p
      END IF
   NEXT J
NEXT i
MAT PRINT A; !debug

MAT b=ZER
LET b(1)=1 !( … )√1の係数を1と仮定する

DIM iA(S,S) !連立方程式を解く
MAT iA=INV(A)
MAT x=iA*b
MAT PRINT x; !debug


!結果を表示する
LET G=1
FOR i=1 TO S
   IF x(i)<>0 THEN LET G=GCD(G,x(i))
NEXT i
PRINT G !分母

FOR i=1 TO S !√の項
   IF x(i)<>0 THEN PRINT x(i)/G; "√";STR$(RR(i))
NEXT i

END


EXTERNAL SUB SqNormalize(n, p,q) !平方根の中をできるだけ小さな正の整数に直す
!※n=p^2*q、n,p,q≧0とすると、√n=p*√qと変形できる。
OPTION ARITHMETIC RATIONAL !有理数モード
LET q=1 !※√0=0*√1とする ※n=0なら、1行下のFOR文でp=0は設定される
FOR p=INTSQR(n) TO 1 STEP -1 !約数p^2の候補を大きい方から
   LET q=n/p^2
   IF q=INT(q) THEN EXIT FOR !qは自然数より
NEXT p
END SUB


 

Re: 分母の有理化

 投稿者:山中和義  投稿日:2013年 7月16日(火)11時42分38秒
  > 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


 

Re: 分母の有理化

 投稿者:山中和義  投稿日:2013年 7月17日(水)11時12分36秒
  > No.3097[元記事へ]

・√2の共役は、-√2
・x=3^(1/3)の共役は、x*(-1±√(-3))/2、すなわち、ωx,ω^2x
・√2+√3の共役は、√2-√3, -√2+√3, -√2-√3
・共役たちの和や積といった対称式は有理数である。

分母の有理化は共役たちを分母分子に掛ける方法がある。

●平方根の場合
1項のとき
x*(-x)=-x^2より、1/x=(-x)/(-x^2)


2項のとき
(x+y)(x-y)(-x+y)(-x-y)
=(x+y)(x-y)(-(x-y))(-(x+y))
=(x^2-y^2)^2
より、1/(x+y)=(x-y)(-x+y)(-x-y)/(x^2-y^2)^2

符号の決め方は2^2=4通りだが、重複を除けば、
(x+y)(x-y)
=(x+y)(x-y)
=(x^2-y^2)
より、1/(x+y)=(x-y)/(x^2-y^2)


3項のとき
符号の決め方は、
 (x+y+z)(x+y-z)(x-y+z)(x-y-z)(-x+y+z)(-x+y-z)(-x-y+z)(-x-y-z)
の2^3=8通りだが、重複を除けば、4通り


!分母の有理化 - 共役たちを分母分子に掛ける方法
!例 1/(√2+√3+√5)

OPTION ARITHMETIC RATIONAL !有理数モード

!LET N=2 !項数
!DATA 3,5 !√3-√5
!DATA 1,-1 !係数部分

!LET N=3 !項数
!DATA 7,5,3 !√7+√5+√3
!DATA 1,1,1 !係数部分

!LET N=3 !項数
!DATA 3,2, 1 !√3+√2-1
!DATA 1,1,-1 !係数部分

LET N=3 !項数
DATA 2,3,5 !√2+√3+√5
DATA 1,1,1 !係数部分

!LET N=4 !項数
!DATA 5, 1,3,2 !√5-2+√3+√2
!DATA 1,-2,1,1 !係数部分


DIM R(N),C(N) !√a、√b、√c、… のn個
MAT READ R
MAT READ C


!分子の計算

DIM R1(2^N),C1(2^N) !√a、√b、√c、√ab、√bc、√ca、√abc、… の高々2^n個
LET R1(1)=1 !定数1
LET C1(1)=1
LET S1=1 !個数

LET F=0 !元の分母の符号パターン
FOR i=1 TO N
   LET F=F*2+(SGN(C(i))+1)/2
NEXT i
PRINT F !debug

DIM P(N)
FOR i=0 TO 2^N-1 !符号パターン(共役な数)を発生させる
   IF i=F THEN !同じならスキップする
   ELSE
      LET t=i
      FOR J=N TO 1 STEP -1 !2進法n桁
         LET P(J)=MOD(t,2)*2-1
         LET t=INT(t/2)
      NEXT J
      !!!MAT PRINT P; !debug

      DIM WW(2^N),W(2^N) !積 (+√a+√b+√c)(+√a+√b-√c)(+√a-√b+√c) …
      DIM WC(N) !共役な数の係数
      FOR J=1 TO N
         LET WC(J)=ABS(C(J))*P(J)
      NEXT J
      CALL SqMultiply(S1,R1,C1,N,R,WC, M,WW,W) !乗算
      MAT R1=WW !次へ
      MAT C1=W
      LET S1=M

   END IF
NEXT i
PRINT S1 !debug
MAT PRINT R1; !debug
MAT PRINT C1; !debug


!分母の計算

DIM R2(2^N),C2(2^N) !√a、√b、√c、√ab、√bc、√ca、√abc、… の高々2^n個
MAT R2=R1 !分子の値
MAT C2=C1
LET S2=S1

CALL SqMultiply(S2,R2,C2,N,R,C, M,WW,W) !乗算
MAT R2=WW
MAT C2=W
LET S2=M

PRINT S2 !debug
MAT PRINT R2; !debug
MAT PRINT C2; !debug


!結果を表示する

LET G=C1(1) !分母
FOR i=2 TO S1
   IF C1(i)<>0 THEN LET G=GCD(G,C1(i))
NEXT i
FOR i=1 TO N !√1の位置を探す
   IF R2(i)=1 THEN EXIT FOR
NEXT i
LET G=GCD(G,C2(i))*SGN(C2(i)) !既約分数
PRINT C2(i)/G

FOR i=1 TO S1 !分子
   IF C1(i)<>0 THEN PRINT C1(i)/G; "√";STR$(R1(i)) !√の項
NEXT i

END


!補助ルーチン

!演算関連

!積 (p√a+q√b+ … +r√c)(s√x+t√y+ … +u√z) を求める
! aa個の平方根、ar[]=a,b,…c、a[]=p,q,…r
! bb個の平方根、br[]=x,y,…z、b[]=s,t,…u
EXTERNAL SUB SqMultiply(aa,AR(),A(),bb,BR(),B(), cc,CR(),C()) !乗算 C=A*B ※A≠C、B≠C
OPTION ARITHMETIC RATIONAL !有理数モード
LET cc=0 !個数
FOR x=1 TO aa
   FOR y=1 TO bb
      LET K=A(x)*B(y) !係数の部分
      CALL SqNormalize(AR(x)*BR(y), P,Q) !平方根の中の部分

      FOR J=1 TO cc !新しい値なら
         IF Q=CR(J) THEN EXIT FOR
      NEXT J
      IF J>cc THEN !リストに登録する
         LET cc=cc+1
         LET CR(cc)=Q !√q
         LET C(cc)=P*K
      ELSE !既出なら、和を求める(同類項をまとめる)
         LET C(J)=C(J)+P*K
      END IF
   NEXT y
NEXT x
END SUB

EXTERNAL SUB SqNormalize(n, p,q) !平方根の中をできるだけ小さな正の整数に直す
!※n=p^2*q、n,p,q≧0とすると、√n=p*√qと変形できる。
OPTION ARITHMETIC RATIONAL !有理数モード
LET q=1 !※√0=0*√1とする ※n=0なら、1行下のFOR文でp=0は設定される
FOR p=INTSQR(n) TO 1 STEP -1 !約数p^2の候補を大きい方から
   LET q=n/p^2
   IF q=INT(q) THEN EXIT FOR !qは自然数より
NEXT p
END SUB


実行結果
7
4
2  3  5  30  0  0  0  0

144  96  0 -48  0  0  0  0

4
1  6  10  15  0  0  0  0

576  0  0  0  0  0  0  0

12
3 √2
2 √3
-1 √30



●立方根の場合

> 1/(4^(1/3)+2^(1/3)-1) の分母を有理化して下さい。

x=2^(1/3)とおくと、x^3=2
4^(1/3)+2^(1/3)-1=x^2+x-1(=f(x)とおく)
また、与式=1/f(x)=f(y)f(z)/(f(x)f(y)f(z))と変形できる。

対称式 f(x)f(y)f(z)=(x^2+x-1)(y^2+y-1)(z^2+z-1) は、
x,y,zの基本対称式 x+y+z,xy+yz+zx,xyz の多項式で表わせる。
今、y=ωx,z=ω^2xとすると、x,y,zはx^3-2=0の解だから、x+y+z=0,xy+yz+zx=0,xyz=2

これより、分母=f(x)f(y)f(z)=f(x)f(ωx)f(ω^2x)=定数

実際に計算すると、
f(ωx)f(ω^2x)=2x^2+3x-1
f(x)f(ωx)f(ω^2x)=11

∴1/f(x)=(2x^2+3x-1)/11

 

Re: 分母の有理化

 投稿者:山中和義  投稿日:2013年 7月18日(木)20時47分57秒
  > No.3098[元記事へ]

Q上の最小多項式から求める方法

1/(√3+√5)
答え
x=√3+√5とおくと、x^4-16x^2+4=0 ∴最小多項式f(x)=x^4-16x^2+4

f(x)=xQ(x)+Rより、f(x)=0なので、1/x=-Q(x)/R
具体的に、R=4、Q(x)=x^3-16xとなる。

よって、与式=-Q(√3+√5)/R=-(2√3-2√5)/4=(-√3+√5)/2
(終り)

考察
n次式f(x)=(x-α[1])(x-α[2])(x-α[3])…(x-α[n])=xQ(x)+R=0として、
「共役たちを分母分子に掛ける方法」を考える。
x=0を代入 または 解と係数の関係 より、R=f(0)=α[1]α[2]α[3]…α[n]
これは分母に相当する。
xQ(x)+R=0より、R/x=-Q(x) ∴α[1]α[2]α[3]…α[n]/α[1]=α[2]α[3]…α[n]
これは分子に相当する。
(終り)


!分母の有理化 - Q上の最小多項式

OPTION ARITHMETIC RATIONAL !有理数モード

!LET N=2 !x=√3+√5
!DATA 3,5
!DATA 1,1
!DATA 4 !f(x)=4-16x^2+x^4
!DATA 4,0,-16,0,1

!LET N=2 !x=3+√2
!DATA 1,2
!DATA 3,1
!DATA 2 !f(x)=7-6x+x^2
!DATA 7,-6,1

!LET N=3 !x=√2+√3+√5
!DATA 2,3,5
!DATA 1,1,1
!DATA 8 !f(x)=576-960x^2+352x^4-40x^6+x^8
!DATA 576,0,-960,0,352,0,-40,0,1

LET N=4
DATA 2,3,5,6 !x=√2+√3+√5+√6
DATA 1,1,1,1
DATA 8 !f(x)=x^8-64x^6-96x^5+808x^4+1152x^3-2304x^2-1152x+144
DATA 144,-1152,-2304,1152,808,-96,-64,0,1


DIM R(N),C(N) !xを読み込む
MAT READ R
MAT READ C

READ M !f(x)の次数
READ B !分子Rを読み込む
DIM A(0 TO M-1) !分母Q(x)を読み込む
MAT READ A

DIM RR(2^N),CC(2^N) !高々2^n個
CALL SqValueOfFunction(N,R,C, M-1,A, S,RR,CC) !関数Q(x)の値

!結果を表示する
FOR i=1 TO S !√の項
   IF CC(i)<>0 THEN PRINT -CC(i)/B; "√";STR$(RR(i)) !-Q(x)/R
NEXT i

END


!補助ルーチン

!演算関連

!x=αのとき、f(α)の値を求める
! x=p√a+q√b+ … +r√c ※n個の平方根、r[]=a,b,…c、c[]=p,q,…r
! f(x)=A[m]x^m+A[m-1]x^(m-1)+ … +A[2]x^2+A[1]x+A[0]
EXTERNAL SUB SqValueOfFunction(N,R(),C(), M,A(), S,RR(),CC())
OPTION ARITHMETIC RATIONAL !有理数モード
LET RR(1)=1 !f=a[m]
LET CC(1)=A(M)
LET S=1
DIM WW(2^N),W(2^N)
FOR i=M-1 TO 0 STEP -1 !ホーナー法
   CALL SqMultiply(S,RR,CC,N,R,C, T,WW,W) !f=f*x+a[i]
   FOR J=1 TO T !√1を探す
      IF WW(J)=1 THEN EXIT FOR
   NEXT J
   IF J>T THEN LET T=T+1
   LET W(J)=W(J)+A(i)

   MAT RR=WW !次へ
   MAT CC=W
   LET S=T
NEXT i
END SUB


!積 (p√a+q√b+ … +r√c)(s√x+t√y+ … +u√z) を求める
! aa個の平方根、ar[]=a,b,…c、a[]=p,q,…r
! bb個の平方根、br[]=x,y,…z、b[]=s,t,…u
EXTERNAL SUB SqMultiply(aa,AR(),A(),bb,BR(),B(), cc,CR(),C()) !乗算 C=A*B ※A≠C、B≠C
OPTION ARITHMETIC RATIONAL !有理数モード
LET cc=0 !個数
FOR x=1 TO aa
   IF A(x)=0 THEN !係数が0以外なら
   ELSE
      FOR y=1 TO bb
         LET K=A(x)*B(y) !係数
         CALL SqNormalize(AR(x)*BR(y), P,Q) !√wをp√qと変形する

         FOR J=1 TO cc !新しい値なら
            IF Q=CR(J) THEN EXIT FOR
         NEXT J
         IF J>cc THEN !リストに登録する
            LET cc=cc+1
            LET CR(cc)=Q !√q
            LET C(cc)=P*K
         ELSE !既出なら、和を求める(同類項をまとめる)
            LET C(J)=C(J)+P*K
         END IF
      NEXT y
   END IF
NEXT x
END SUB

EXTERNAL SUB SqNormalize(n, p,q) !平方根の中をできるだけ小さな正の整数に直す
!※n=p^2*q、n,p,q≧0とすると、√n=p*√qと変形できる。
OPTION ARITHMETIC RATIONAL !有理数モード
LET q=1 !※√0=0*√1とする ※n=0なら、1行下のFOR文でp=0は設定される
FOR p=INTSQR(n) TO 1 STEP -1 !約数p^2の候補を大きい方から
   LET q=n/p^2
   IF q=INT(q) THEN EXIT FOR !qは自然数より
NEXT p
END SUB


 

Re: 分母の有理化

 投稿者:山中和義  投稿日:2013年 7月21日(日)11時26分35秒
  > No.3099[元記事へ]

最小多項式を求める方法

最小多項式 f(x)=(x-α[1])(x-α[2])(x-α[3])…(x-α[n]) なので、解と係数の関係より、

個数が少ない場合は、

  LET a= SQR(3)+SQR(5)
  LET b= SQR(3)-SQR(5)
  LET c=-SQR(3)+SQR(5)
  LET d=-SQR(3)-SQR(5)
  PRINT 1 !x^4
  PRINT -(a+b+c+d) !x^3
  PRINT a*b+a*c+a*d +b*c+b*d +c*d !x^2
  PRINT -(a*b*c+a*b*d+a*c*d +b*c*d) !x^1
  PRINT a*b*c*d !x^0
  END

とすればよいでしょう。

多い場合は、「解の積」を機械的に生成するように改良します。

!Q上の最小多項式を求める

!最小多項式 f(x)=(x-α[1])(x-α[2])(x-α[3])…(x-α[n]) なので、
!解と係数の関係より、展開式 f(x)=c[n]x^n+c[n-1]x^(n-1)+ … +c[1]x+c[0] を計算する。

!x=√2+√3+√5+√6の場合、f(x)=x^8-64x^6-96x^5+808x^4+1152x^3-2304x^2-1152x+144

LET M=3 !線形独立な平方根の個数 ∵√6=√2√3より、√6は除く

LET N=2^M !共役の個数
DIM A(N)
LET A(1)= SQR(2)+SQR(3)+SQR(5) +SQR(6) !√6の符号 ∵√6=√2√3より
LET A(2)= SQR(2)+SQR(3)-SQR(5) +SQR(6)
LET A(3)= SQR(2)-SQR(3)+SQR(5) -SQR(6)
LET A(4)= SQR(2)-SQR(3)-SQR(5) -SQR(6)
LET A(5)=-SQR(2)+SQR(3)+SQR(5) -SQR(6)
LET A(6)=-SQR(2)+SQR(3)-SQR(5) -SQR(6)
LET A(7)=-SQR(2)-SQR(3)+SQR(5) +SQR(6)
LET A(8)=-SQR(2)-SQR(3)-SQR(5) +SQR(6)

DIM c(0 TO N) !係数 ※基本対称式
MAT c=ZER
FOR p=0 TO 2^N-1 !組み合わせで「解の積」を機械的に生成する
   LET t=p
   LET r=0 !ビット列の1の個数
   LET W=1 !r個の積、C(n,r)通り
   LET K=1
   DO WHILE t>0
      IF MOD(t,2)=1 THEN
         LET r=r+1
         LET W=W*(-A(K))
      END IF
      LET t=INT(t/2)
      LET K=K+1
   LOOP

   LET c(N-r)=c(N-r)+W !x^(N-r)の係数
NEXT p
MAT PRINT c; !1,x,…,x^(n-1),x^nの係数

END


実行結果
144 -1152 -2304.00000000003  1152  808.000000000003 -95.9999999999994 -64  .00000000000003  1

 

Re: 分母の有理化

 投稿者:山中和義  投稿日:2013年 7月26日(金)18時47分57秒
  > No.3104[元記事へ]

最小多項式を求める方法のつづき

> 1/(4^(1/3)+2^(1/3)-1) の分母を有理化して下さい。

Q上の最小多項式から求める方法

x=4^(1/3)+2^(1/3)-1のとき、Q上の最小多項式を求めると、f(x)=x^3+3x^2-3x-11
よって、1/x=-(x^2+3x-3)/(-11)=(x^2+3x-3)/11
xを代入して、
分子
={4^(1/3)+2^(1/3)-1}^2 +3{4^(1/3)+2^(1/3)-1} -3
=2*2^(1/3)+4^(1/3)+1 +2*2-2*2^(1/3)-2*4^(1/3)  +3*4^(1/3)+3*2^(1/3)-3  -3
=2*4^(1/3)+3*2^(1/3)-1
(終り)


!x=4^(1/3)+2^(1/3)-1の場合、f(x)=x^3+3x^2-3x-11

OPTION ARITHMETIC COMPLEX !複素数モード
LET i=COMPLEX(0,1) !虚数単位


DEF G(y)=y^2+y-1
LET y=2^(1/3)
LET w=EXP(2*PI*i/3) !y^3-1=0(y≠1)の解のひとつ

LET N=3 !共役の個数
DIM A(N)
LET A(1)=G(y)
LET A(2)=G(w*y)
LET A(3)=G(w^2*y)


DIM c(0 TO N) !係数 ※基本対称式
MAT c=ZER
FOR p=0 TO 2^N-1 !組み合わせで「解の積」を機械的に生成する
   LET R=0 !ビット列の1の個数
   LET S=1 !r個の積、C(n,r)通り
   LET t=p !ビットパターン ※2進法n桁
   LET K=1
   DO WHILE t>0
      IF MOD(t,2)=1 THEN !ビットが1なら
         LET R=R+1
         LET S=S*(-A(K))
      END IF
      LET t=INT(t/2) !次へ
      LET K=K+1
   LOOP

   LET c(N-R)=c(N-R)+S !x^(n-r)の係数
NEXT p
MAT PRINT c; !1,x,…,x^(n-1),x^nの係数

END


実行結果
(-11  7.86122469204065E-15) (-3 -1.2583792514953E-15) ( 3 -1.55431223447522E-15)  1


> x=√2+√3+√5+√6の場合、f(x)=x^8-64x^6-96x^5+808x^4+1152x^3-2304x^2-1152x+144

前出の最小多項式を求める方法のプログラムは、上記のように記述すると、


!x=√2+√3+√5+√6の場合、f(x)=x^8-64x^6-96x^5+808x^4+1152x^3-2304x^2-1152x+144

OPTION ARITHMETIC COMPLEX !複素数モード
LET i=COMPLEX(0,1) !虚数単位

DEF G(x1,x2,x3)=x1+x2+x3+x1*x2 !∵√6=√2√3より、√6は除く
LET x1=SQR(2)
LET x2=SQR(3)
LET x3=SQR(5)
LET w=EXP(2*PI*i/2) !x^2-1=0(x≠1)の解のひとつ、すなわちω=-1

LET N=2^3 !共役の個数
DIM A(N)
LET A(1)=G(  x1,   x2,   x3)
LET A(2)=G(  x1,   x2, w*x3)
LET A(3)=G(  x1, w*x2,   x3)
LET A(4)=G(  x1, w*x2, w*x3)
LET A(5)=G(w*x1,   x2,   x3)
LET A(6)=G(w*x1,   x2, w*x3)
LET A(7)=G(w*x1, w*x2,   x3)
LET A(8)=G(w*x1, w*x2, w*x3)


DIM c(0 TO N) !係数 ※基本対称式
MAT c=ZER
FOR p=0 TO 2^N-1 !組み合わせで「解の積」を機械的に生成する
   LET R=0 !ビット列の1の個数
   LET S=1 !r個の積、C(n,r)通り
   LET t=p !ビットパターン ※2進法n桁
   LET K=1
   DO WHILE t>0
      IF MOD(t,2)=1 THEN !ビットが1なら
         LET R=R+1
         LET S=S*(-A(K))
      END IF
      LET t=INT(t/2) !次へ
      LET K=K+1
   LOOP

   LET c(N-R)=c(N-R)+S !x^(n-r)の係数
NEXT p
MAT PRINT c; !1,x,…,x^(n-1),x^nの係数

END


実行結果

( 143.999999999999  4.55231300086593E-13) (-1152  2.87033774599169E-12) (-2304 -3.24149828525186E-14) ( 1152 -1.22630932501458E-12) ( 808 -4.23419558502279E-14) (-96  1.31570129478226E-13) (-64  7.00144567739066E-15) (-2.66453525910038E-15 -2.63649535642436E-15)  1


 

Re: 分母の有理化

 投稿者:山中和義  投稿日:2013年 7月27日(土)20時12分49秒
  > No.3098[元記事へ]

> 分母の有理化は共役たちを分母分子に掛ける方法がある。

> ●立方根の場合
> > 1/(4^(1/3)+2^(1/3)-1) の分母を有理化して下さい。
>
> x=2^(1/3)とおくと、x^3=2
> 4^(1/3)+2^(1/3)-1=x^2+x-1(=f(x)とおく)
> また、与式=1/f(x)=f(y)f(z)/(f(x)f(y)f(z))と変形できる。
>
> 対称式 f(x)f(y)f(z)=(x^2+x-1)(y^2+y-1)(z^2+z-1) は、
> x,y,zの基本対称式 x+y+z,xy+yz+zx,xyz の多項式で表わせる。
> 今、y=ωx,z=ω^2xとすると、x,y,zはx^3-2=0の解だから、x+y+z=0,xy+yz+zx=0,xyz=2
>
> これより、分母=f(x)f(y)f(z)=f(x)f(ωx)f(ω^2x)=定数
>
> 実際に計算すると、
> f(ωx)f(ω^2x)=2x^2+3x-1
> f(x)f(ωx)f(ω^2x)=11
>
> ∴1/f(x)=(2x^2+3x-1)/11

考察
1/f(x)=(f(ωx)f(ω^2x))/(f(x)f(ωx)f(ω^2x)) と変形すると、分母が有理化される。
(終り)


OPTION ARITHMETIC COMPLEX !複素数モード
LET i=COMPLEX(0,1) !虚数単位

LET w=EXP(2*PI*i/3) !y^3-1=0(y≠1)の解のひとつ、すなわちω=(-1+(√3)i)/2

DATA 2 !f(x)=x^2+x-1
DATA -1,1,1

DATA 3 !g(x)=x^3-2
DATA -2,0,0,1


READ ff !f(x)を読み込む
DIM F(0 TO ff)
MAT READ F

READ gg !g(x)を読み込む
DIM G(0 TO gg)
MAT READ G


!分子 f(ωx)f(ω^2x) の計算

DIM A(0 TO ff),B(0 TO ff) !f(ωx)、f(ω^2x)
FOR k=0 TO ff
   LET A(k)=F(k)*w^k
   LET B(k)=F(k)*(w^2)^k
NEXT k
LET aa=ff
LET bb=ff

DIM S(0 TO 2*ff)
CALL PolynomialMultiply(aa,A,bb,B, ss,S)
PRINT ss
MAT PRINT S;

DIM Q(0 TO 2*ff),R(0 TO 2*ff)
CALL PolynomialQuotientRemainder(ss,S,gg,G, qq,Q,rr,R) !x=2^(1/3)を考慮する

PRINT rr !結果を表示する
MAT PRINT R;


!分母 f(x)f(ωx)f(ω^2x) の計算

CALL PolynomialMultiply(ff,F,rr,R, ss,S) !f(x)×分子
PRINT ss
MAT PRINT S;

CALL PolynomialQuotientRemainder(ss,S,gg,G, qq,Q,rr,R)

PRINT rr !結果を表示する
MAT PRINT R;


END


!補助ルーチン

!f(x)=A[aa]x^aa+ … +A[1]x+A[0]、g(x)=B[bb]x^bb+ … +B[1]x+B[0]

!演算関連

EXTERNAL SUB PolynomialMultiply(aa,A(),bb,B(), ss,S()) !乗算 S=A*B ※S≠A、S≠B
OPTION ARITHMETIC COMPLEX !複素数モード
MAT S=ZER
FOR i=aa TO 0 STEP -1
   LET k=A(i)
   FOR j=bb TO 0 STEP -1
      LET S(i+j)=S(i+j)+k*B(j) !すべての係数をかける
   NEXT j
NEXT i
LET ss=aa+bb!次数 ※その補正
END SUB


EXTERNAL SUB PolynomialQuotientRemainder(aa,A(),bb,B(), qq,Q(),rr,R()) !除算 ※被除数=商*除数+余り
OPTION ARITHMETIC COMPLEX !複素数モード
IF bb=0 AND ABS(B(0))<1E-12 THEN !除数が0なら ※※複素数による近似
   PRINT "0で割ることはできません。"
   STOP
ELSE
   MAT Q=ZER !商
   MAT R=A !余り
   FOR t=aa TO bb STEP -1 !被除数の次数が除数のより大きいなら
      IF ABS(R(t))<1E-12 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 t=MAX(bb-1,0) ELSE LET t=aa !次数
   FOR rr=t TO 1 STEP -1 !※その補正
      IF ABS(R(rr))>=1E-12 THEN EXIT FOR ! ※※複素数による近似
      LET R(rr)=0 ! ※※複素数による近似
   NEXT rr
END IF
END SUB


実行結果

4
1 ( 1 -3.33066907387547E-16) ( 2 -1.22124532708767E-15) (-1  9.99200722162641E-16) ( 1 -1.23905334777075E-15)

2
(-1  1.99840144432528E-15) ( 3 -2.81117360292904E-15) ( 2 -1.22124532708767E-15)  0  0

4
( 1 -1.99840144432528E-15) (-4  4.80957504725432E-15) ( 0  4.08473168483914E-16) ( 5 -4.03241893001671E-15) ( 2 -1.22124532708767E-15)

0
( 11 -1.00632393043587E-14)  0  0  0  0

 

Re: 分母の有理化

 投稿者:山中和義  投稿日:2013年10月21日(月)11時13分27秒
  > No.3106[元記事へ]

> 分母の有理化は共役たちを分母分子に掛ける方法がある。

実質は、(a+b)(a-b)=a^2-b^2なのですが、

ペル方程式 A^2-K^2B=m より、(A+K√B)(A-K√B)=m ∴(A-K√B)/m=1/(A+K√B)

●ペル方程式 A^2-K^2B=m の図形的解釈
A,K,Bは正の数とする。
△OABは、辺の長さを OA=√m, AB=K√B, OB=A すなわち m+K^2B=A^2 となる 直角三角形とする。
(または、OA=√m, AB=A, OB=K√B すなわち m+A^2=K^2B となる直角三角形とする。)
AB=BCとなるように、OB上に点Cをとる。
OBをB側に延長して、AB=BDとなるように、延長した線上に点Dをとる。
△OAC∽△ODAより、OC/OA=OA/OD
よって、(A-K√B)/(√m)=(√m)/(A+K√B) ∴(A-K√B)/m=1/(A+K√B)


OPTION ARITHMETIC COMPLEX !複素平面
SET WINDOW -2,5,-1,6 !表示範囲 ※
DRAW grid !座標を描く
LET i=COMPLEX(0,1) !虚数単位
LET Oo=COMPLEX(0,0) !原点

LET A=2 !2+√5
LET K=1
LET B=5

LET m=A^2-K^2*B
PRINT m
IF m>0 THEN
   LET OA=COMPLEX(SQR(m),0) !△OABは直角三角形
   LET OB=COMPLEX(SQR(m),K*SQR(B))
   LET OC=(A-K*SQR(B))*OB/ABS(OB) !AB=BC
   LET OD=(A+K*SQR(B))*OB/ABS(OB) !AB=BD
ELSEIF m<0 THEN
   LET OA=COMPLEX(SQR(-m),0) !△OABは直角三角形
   LET OB=COMPLEX(SQR(-m),A)
   LET OC=(-A+K*SQR(B))*OB/ABS(OB) !AB=BC
   LET OD=( A+K*SQR(B))*OB/ABS(OB) !AB=BD
ELSE
   PRINT "表示できません。"
   STOP
END IF
PRINT OA;OB;OC;OD !debug

CALL gcDRAWPOINT(Oo,"o") !点O
CALL gcDRAWPOINT(OA,"A") !点A
CALL gcDRAWPOINT(OB,"B") !点B
CALL gcDRAWPOINT(OC,"C") !点C
CALL gcDRAWPOINT(OD,"D") !点D

PLOT LINES: OB; OA; OD; Oo; OA; OC !各三角形を描く

DRAW circle WITH SCALE(ABS(OA-OB))*SHIFT(OB) !点A,D,Cは点Bを中心とする同一円上にある

END

EXTERNAL SUB gcDRAWPOINT(OP,S$) !点を描く
OPTION ARITHMETIC COMPLEX
DRAW disk WITH SCALE(0.08)*SHIFT(OP)
PLOT TEXT ,AT OP: S$
END SUB


 

戻る