■因数分解の算法(その13)

 本シリーズでは多項式の因数分解を取り上げてきたが,計算機代数の話題はまだ数多くあり,今回取り上げるテーマは「連立代数方程式を解く」ことである.

 連立1次方程式を解くことの幾何学的な意味は,超平面の交わりを求めることである.それに対して連立代数方程式

  f1(x1,x2,・・・,xn)=0

  f2(x1,x2,・・・,xn)=0

  ・・・・・・・・・・・・・・・・

  fm(x1,x2,・・・,xn)=0

の解を求めることは超曲面(多様体)の共通零点を求めることにほかならない.超平面は平行でない限り必ず交わるが,超曲面は交わるとは限らない.そのため,連立代数方程式の解は存在するとは限らないし,逆に無限個存在することもある.

 多変数多項式に関する連立代数方程式を解く場合,原理的には変数を順次消去することによって計算できるはずだが,それを馬鹿正直に実行するとたちまち大きな係数をもつ高次方程式が現れて手に負えなくなることが知られている.連立1次方程式の場合と比較して,飛躍的に計算が複雑になるからである.

===================================

【1】解ける連立代数方程式

 まず,連立代数方程式が解ける場合についてみてみよう.

  f1=x+y^2+3z^2−4=0

  f2=4y^2−5=0

  f3=y^4−5z−10=0

この例では1つの変数のみの関数f2=0を解いてyを求め,それからf3=0によってz,f1=0によってxというようにして芋づる式に連立代数方程式を解くことができる.

  (x,y,z)=(125/16,±√5/2,−27/16)

この手順は連立1次方程式を解くガウスの消去法の後退代入計算と類似している.

 一般の連立代数方程式を解くためにはガウスの消去法が使える形(三角化)に直すかあるいは1変数のみの関数に直すことがカギになる.そのための有効な手段として注目されているのが「グレブナー基底」を構成するブーフバーガーのアルゴリズムである.

 グレブナー基底はよい基底であり,対称式については基本対称式がグレブナー基底に相当するものであるから,グレブナー基底は基本対称式の概念の一般化と考えることもできるであろう.

===================================

【2】辞書式順序

 多項式は単項式の1次結合であるが,グレブナー基底を構成する際,単項式に順序を入れる必要がある.便宜上,変数にa>b>c(>1)と順序をつけ,単項式a^pb^qc^rについては指数の列(p,q,r)に辞書式順序をつける(単純辞書式順序).さらに,全次数(p+q+r)が大きいほうから順序をつけるが,全次数が同一の項どうしは辞書式順序をつける(全次数辞書式順序).

 たとえば,3変数の場合の単純辞書式順序では

  a^2>ab>ac>a>b^2>bc>b>c^2>c

となる.一方,全次数辞書式順序は

  a^2>ab>ac>b^2>bc>c^2>a>b>c

になるのである.

 この順序は消去すべき優先順位を表す順序となるものであるから,全次数辞書式順序は次数の高いものから順に消去され,単純辞書式順序ではまずaが消去され,ついでbという具合になっている.変数の優先順位をb>a>cの順に変更するなど,変数の優先順位の適否によって計算所要時間が何千倍,何万倍も違うことがあるという実際的な課題はあるものの,実用上は全次数辞書式順序を使うのが標準的である.

 なお,すべての指数が1か0であるものが基本対称式である.3変数の基本対称式を

  ab+bc+ca

といった順に整理する習慣があるが,いずれの辞書式順序でも

  ab+ac+bc

に整理される.

===================================

【3】ブーフバーガーのアルゴリズム

 よい基底の具体的な構成算法を示したのはブーフバーガーであり,彼は恩師の名をとってそれをグレブナー基底と命名した.グレブナー基底はある順序に従って項を消去してゆく演算で作られるのだが,その際,先頭にくる項を主項とよぶ.

(1)基底(f1,f2,・・・,fm)の要素対fi,fjに対して最も高い次数の主項si,sjを合わせて消去する.

そのためには主項の最小公倍多項式をLCM(si,sj)として

  S(fi,fj)=LCM(si,sj)(fi/si−fj/sj)

とすればよい.

(2)f0=S(fi,fj)の主項s0が(f1,f2,・・・,fm)の主項(s1,s2,・・・,sm)の倍式であるとき,fkに適当な単項式を乗じてf0から引くことによりその項を消去する.この操作を簡約という.

  λ=s0/sk

  f0~=f0−λfk

  f0←f0~

(3)f0が0に簡約できないとき(イデアルの基底が不足していると考えて)新しい基底として追加補充する.

  fm+1←f0,m←m+1

 この一連の操作は有限回で完了し,最後にグレブナー基底(f1,f2,・・・,fm)を得ることができる.ただし,構成する順序(式の組合せ)によって最終的に得られるグレブナー基底は1通りとは限らない.f0をどのfkによって簡約するかによってその結果は変わるが,どのように簡約しても最終結果が1通りに定まるのがグレブナー基底である.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 ブーフバーガーのアルゴリズムをコンピュータにインプリメントするには,計算のスピードも重視しなければならない.コンピュータ向きの効率化には本来個々のアルゴリズムの特性によって決められるべきであるが,反復計算をどこで打ち切るか(停止則)はプログラムを設計するうえで重要な問題である.

 その際,各要素対fi,fjに対し

(a)S(fi,fj)がすべて0に簡約される

(b)fi,fjと異なるfkがあり,主項skがsi,sjの最小公倍式の因子であって,S(fi,fk),S(fj,fk)がともに0に簡約される

のいずれかの条件が成立するとき,反復計算を打ち切ることにする(停止則).

 このようにすれば(a)のようにm(m−1)/2個の組合せすべてを調べなくとも,特定のfkに対して(b)の条件を調べれば済むことが多く,検証すべき場合をを大幅に減らすことができるというわけである.

===================================

【4】連立代数方程式を解く

 多くの場合,グレブナー基底には変数の一部を含まない多項式が現れる.そして,簡約グレブナー基底が得られればガウスの消去法のように芋づる式に解を求めることができるから計算が簡易化されることになる.

 よい基底を計算する算法がブーフバーガーのアルゴリズムであるが,本質的にガウスの消去法の変法である.グレブナー基底を構成する簡単な演習問題を掲げよう.

[1]

  f1=x+y^2+3z^2−4=0

  f2=4y^2−5=0

  f3=y^4−5z−10=0

 まず,変数の優先順位をx>y>zとして,全次数辞書式順序をいれる.

  f1=y^2+3z^2+x−4=0   (主項:y^2)

  f2=4y^2−5=0        (主項:4y^2)

  f3=y^4−5z−10=0     (主項:y^4)

  f0=S(f1,f2)=4f1−f2=12z^2+4x−11

  f4=12z^2+4x−11   (主項:12z^2)

  f0=S(f2,f3)=y^2f2−4f3=−5y^2+20z+40

  f0=y^2−4z−8   (主項:y^2)

  4f0−f2=−16z−27   (f2で簡約)

  f5=16z+27   (主項:16z)

  S(f4,f5)=4f2−3zf5=16x−125

  f6=16x−125   (主項:16x)

  f2=4y^2−5=0

  f5=16z+27=0

  f6=16x−125=0

  f1=f2=f3=0

の解は同じ解

  (x,y,z)=(125/16,±√5/2,−27/16)

をもつことは明らかである.

  f2=f5=f6=0

のほうが方程式の形が簡単になってグレブナー基底は連立代数方程式の解を求めるのに有効であることがおわかり頂けるであろう.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

[2]

  f1=a+b+c−3=0

  f2=a^2+b^2+c^2−5=0

  f3=a^3+b^3+c^3−7=0

 いくつかの変数からなるいくつかの多項式の共通零点のつくる集合を代数多様体というが,平面f1=0と楕円面f2=0の共通零点である楕円と非コンパクトな3次曲面f3=0との共通零点を求める問題である.この場合には変数に対称性という特殊性があるので,与えられた方程式を組み合わせて基本対称式に直せば手計算でもうまく進めることができる.

  a^2+b^2+c^2=(a+b+c)^2−2(ab+bc+ca)=5 → ab+bc+ca=2

  a^3+b^3+c^3=(a+b+c)(a^2+b^2+c^2−ab−bc−ca)+3abc=7 → abc=−2/3

このことから,a,b,cは3次方程式:

  x^3−3x^2+2x+2/3=0

の3根であり,(a,b,c)はそれを巡回置換したものになるから,総計6組の解が出る.

 しかし,コンピュータはこのような計算ができるほど融通はきかないので,ブーフバーガーの消去法アルゴリズムを適用してみることにする.ここでは単純辞書式順序に関して計算する.

  f1=a+b+c−3      (主項:a)

  f2=a^2+b^2+c^2−5   (主項:a^2)

  f3=a^3+b^3+c^3−7   (主項:a^3)

  f0=S(f1,f2)=af1−f2=ab+ac−3a−b^2−c^2+5   (主項:ab)

  f0−bf1−cf1+3f1=−2b^2−2bc+6b−2c^2+6c−4   (f1で簡約)

  f4=−2b^2−2bc+6b−2c^2+6c−4   (主項:−2b^2)

  f0=S(f1,f3)=a^2f1−f3=a^2b+a^2c−3a^2−b^3−c^3+7   (主項:a^2b)

  f0−bf2−cf2+3f2=−2b^3−b^2c+3b^2−bc^2+5b−2c^3+3c^2+5c−8   (f2で簡約)

  f0=−2b^3−b^2c+3b^2−bc^2+5b−2c^3+3c^2+5c−8   (主項:b^3)

  f0−bf4+c/2f4−3/2f4=−3c^3+9c^2/6c−2   (f4で簡約)

  f5=−3c^3+9c^2/6c−2   (主項:−3c^3)

 こうしてf5=0では変数a,bを含まず変数cのみの3次関数が現れた.f5=0を解くと,cは1つの実数解と1組の共約な虚数解をもつことがわかった.その各々からf4=0でbを求めると平方根の符号を変えた2組の解が出る.最後にf1=0からaを求めるとaは一意に決まるから,解は総計6組になる.このようにして連立代数方程式f1=f2=f3=0を解くことができる.

===================================

【5】ロボティクス(ロボット工学)への応用

 少し計算が必要であるが,連立代数方程式f1=f2=・・・=fm=0を解くにはイデアルの任意の基底の共通零点を求めればよいことがおわかり頂けたかと思う.グレブナー基底の応用として,ロボットアームのような機械リンク装置がとりうる配置のなす空間を記述できることを述べておきたい.

 小生は以前このHPにおいて佐々木誠先生(現・佐賀大学)と,複数の関節をもつロボットアームの配位空間の話を展開したことがある.3次元空間の運動は並進運動と回転運動を考えると少なくとも6次元での解析が必要になるが,さらに複数の関節をもつことによる冗長性が加わって,配位空間は一般にn(≧6)次元の多面体になる.

 この多面体はロボットアームが物理的に到達可能な配位を表すものと考えることができるのだが,逆問題を解こうとすると冗長性のために到達できない場所に対応することが起こりうる.

 n次元多面体はn次元楕円である程度近似することはできるのだが,配意空間すべてを表しているわけではないのでどうしても楕円では代替することができないのである.

 佐々木誠先生に教えてもらったことだが,岐阜大学の川崎晴久先生が

  川崎晴久「ロボット数式処理」,昭晃堂

の中でグレブナー基底とブーフバーガー・アルゴリズムを用いて運動方程式の解を導出されておられるそうだ.私はまだ読んだことはないが,興味のある方のために著書を紹介しておく.

===================================