明 細 書
固有値分解装置、及び固有値分解方法
技術分野
[0001] 本発明は、固有値分解を行う固有値分解装置等に関する。
背景技術
[0002] 固有値分解は、例えば、分子軌道法による化学計算、統計計算、情報検索等の非 常に広い分野で利用されている。また、固有値分解の方法も知られている(例えば、 非特許文献 1参照)。
非特許文献 1: J. J. M. Cuppen, 「A divide and conquer method for the symmetric tridiagonal eigenproblemj、 Numerische Mathematik, Vol. 3 6、 p. 177—195、 1981年
発明の開示
発明が解決しょうとする課題
[0003] 近年、これらの応用分野におけるデータ量の増大などに伴って、高速'高精度な固 有値分解が求められている。また、固有値分解を並列処理することができる固有値分 解装置等の開発が望まれていた。
[0004] 本発明は、上記状況の下になされたものであり、並列性に優れた高速、高精度な 固有値分解を実行可能な固有値分解装置等を提供することを目的とする。
課題を解決するための手段
[0005] 上記目的を達成するため、本発明による固有値分解装置は、対称 3重対角行列 T が記憶される対角行列記憶部と、前記対角行列記憶部から前記対称 3重対角行列 T を読み出し、当該対称 3重対角行列 Tを 2個の対称 3重対角行列に分割して前記対 角行列記憶部に蓄積し、その対称 3重対角行列を 2個の対称 3重対角行列に分割し て前記対角行列記憶部に蓄積する処理を、分割後の各対称 3重対角行列があらか じめ決められた大きさ以下となるまで繰り返す行列分割部と、前記あらかじめ決めら れた大きさ以下の各対称 3重対角行列の固有値と、当該各対称 3重対角行列の固有 ベクトル力 なる直交行列の一部の要素である行列要素とが記憶される固有値分解
記憶部と、前記あら力 め決められた大きさ以下の各対称 3重対角行列を前記対角 行列記憶部から読み出し、前記各対称 3重対角行列に対して固有値分解を行い、前 記各対称 3重対角行列の固有値と、前記各対称 3重対角行列の固有ベクトルからな る直交行列の行列要素とを少なくとも算出し、当該固有値と当該行列要素とを前記 固有値分解記憶部に蓄積する固有値分解部と、前記対称 3重対角行列 Tの固有値 が記憶される固有値記憶部と、各対称 3重対角行列の固有値と、行列要素とを前記 固有値分解記憶部から読み出し、前記固有値と、前記行列要素とから、分割元の対 称 3重対角行列の固有値と、分割元の対称 3重対角行列の行列要素とを算出して前 記固有値分解記憶部に蓄積し、その分割元の対称 3重対角行列の固有値と、行列 要素とを算出する処理を、対称 3重対角行列 Tの少なくとも 1個の固有値を算出する まで繰り返し、前記対称 3重対角行列 Tの少なくとも 1個の固有値を前記固有値記憶 部に蓄積する固有値算出部と、前記対称 3重対角行列 Tの固有ベクトルが記憶され る固有ベクトル記憶部と、前記対角行列記憶部から前記対称 3重対角行列 Tを読み 出し、前記固有値記憶部から前記対称 3重対角行列 Tの固有値を読み出し、前記対 称 3重対角行列 Tとその固有値とから、ツイスト分解法を用いて前記対称 3重対角行 列 Tの少なくとも 1個の固有ベクトルを算出して前記固有ベクトル記憶部に蓄積する 固有ベクトル算出部と、を備えたものである。
[0006] このような構成により、まず固有値を算出し、その固有値に基づいてツイスト分解法 を用いて固有べ外ルを算出することによって、高速で高精度な固有値分解を実現 することができうる。また、並列性にも優れている。さらに、全ての固有値や固有べタト ルを算出する必要がない場合には、必要な範囲で固有値や固有ベクトルを算出する ことができ、処理負荷を軽減することができる。
[0007] また、本発明による固有値分解装置では、前記固有ベクトル算出部は、 qd型ッイス ト分解法により固有ベクトルを算出してもよい。
このような構成により、高速で高精度な固有値分解を実現することができうる。また、 並列性にも優れている。
[0008] また、本発明による固有値分解装置では、前記固有ベクトル算出部は、前記固有 値記憶部から前記対称 3重対角行列 Tの固有値を読み出し、当該固有値のいずれ
力が負の値である場合に、前記対角行列記憶部力も前記対称 3重対角行列 Tを読 み出し、当該対称 3重対角行列 Τの固有ベクトルを変化させることなぐ当該対称 3重 対角行列 Τのすベての固有値が正の値となるように、当該対称 3重対角行列 Τを正 定値化し、正定値ィ匕した後の固有値を前記固有値記憶部に蓄積し、正定値化した 後の対称 3重対角行列 Τを前記対角行列記憶部に蓄積する正定値化部と、前記対 角行列記憶部からすべての固有値が正の値である対称 3重対角行列 Τを読み出し、 前記固有値記憶部から前記対称 3重対角行列 Τの正の値の固有値を読み出し、前 記対称 3重対角行列 Τの各要素に関して qd型変換を行うことによって、前記対称 3重 対角行列 Tを上 2重対角行列 B(+ 1)及び下 2重対角行列 B(_1)にコレスキー分解する コレスキー分解部と、前記上 2重対角行列 B(+1)及び下 2重対角行列 B(_1)の各要素 と、前記対称 3重対角行列 Tの正の値の固有値とを用いて固有ベクトルを算出して前 記固有ベクトル記憶部に蓄積するベクトル算出部と、を備えてもよい。
[0009] このような構成により、負の値の固有値が含まれる場合には、対称 3重対角行列 Tを 正定値ィ匕してから qd型ツイスト分解法を実行することができる。また、 LV型ツイスト分 解法よりも高速に計算することができうる。
[0010] また、本発明による固有値分解装置では、前記固有ベクトル算出部は、 LV型ツイ スト分解法により固有ベクトルを算出してもよい。
このような構成により、数値安定的に固有ベクトルの算出を行うことができうる。
[0011] また、本発明による固有値分解装置では、前記固有ベクトル算出部は、前記対角 行列記憶部から前記対称 3重対角行列 Tを読み出し、前記固有値記憶部から前記 対称 3重対角行列 Tの固有値を読み出し、前記対称 3重対角行列 Tの各要素に関し てミウラ変換、 dLVv型変換、逆ミウラ変換を行うことによって、前記対称 3重対角行列 Tを上 2重対角行列 B(+ 1)及び下 2重対角行列 B(_1)にコレスキー分解するコレスキー 分解部と、前記上 2重対角行列 B(+1)及び下 2重対角行列 B(_1)の各要素と、前記対 称 3重対角行列 Tの固有値とを用いて固有ベクトルを算出して前記固有ベクトル記憶 部に蓄積するベクトル算出部と、を備えてもよい。
このような構成により、コレスキー分解の処理において、複数の補助変数を用いるこ とによって、数値安定的に固有ベクトルの算出を行うことができうる。
[0012] また、本発明による固有値分解装置では、前記コレスキー分解部は、複数のコレス キー分解手段を備え、前記複数のコレスキー分解手段が、前記対称 3重対角行列 T をコレスキー分解する処理を並列実行してもよ ヽ。
このような構成により、コレスキー分解の処理を短時間で行うことができうる。
[0013] また、本発明による固有値分解装置では、前記ベクトル算出部は、複数のベクトル 算出手段を備え、前記複数のべ外ル算出手段が、固有べ外ルを算出する処理を 並列実行してもよい。
このような構成により、固有ベクトルを算出する処理を短時間で行うことができうる。
[0014] また、本発明による固有値分解装置では、前記固有値算出部は、複数の固有値算 出手段を備え、前記複数の固有値算出手段が、分割元の対称 3重対角行列の固有 値と、行列要素とを算出する処理を並列実行してもよい。
このような構成により、固有値を算出する処理を短時間で行うことができうる。
[0015] また、本発明による固有値分解装置では、前記固有値分解部は、複数の固有値分 解手段を備え、前記複数の固有値分解手段が、対称 3重対角行列に対して固有値 分解を行う処理を並列実行してもよ ヽ。
このような構成により、固有値分解する処理を短時間で行うことができうる。
[0016] また、本発明による固有値分解装置では、対称行列 Aが記憶される行列記憶部と、 前記対称行列 Aを前記行列記憶部から読み出し、前記対称行列 Aを 3重対角化した 前記対称 3重対角行列 Tを算出して前記対角行列記憶部に蓄積する対角化部と、を さらに備えてもよい。
[0017] このような構成により、任意の対称行列 Aについて固有値を算出することができる。
また、対称 3重対角行列 Tの固有ベクトルを用いることにより、対称行列 Aの固有べク トルを算出することもできうる。
[0018] また、本発明による固有値分解装置では、前記行列分割部は、対称 3重対角行列 を略半分の 2個の対称 3重対角行列に分割してもよい。
このような構成により、並列処理を適切に行うことができうる。
[0019] また、本発明による固有値分解装置では、前記固有値算出部は、対称 3重対角行 列 Tの全ての固有値を算出してもよ 、。
[0020] また、本発明による固有値分解装置では、前記固有ベクトル算出部は、対称 3重対 角行列 Tの全ての固有ベクトルを算出してもよい。
[0021] また、本発明による固有値分解装置では、前記対称行列 Aは、顔画像データを示 すベクトルの平均力 算出された共分散行列であってもよい。
このような構成により、固有値分解装置を顔画像データの認識の処理に用いること ができうる。
発明の効果
[0022] 本発明による固有値分解装置等によれば、高速で高精度な固有値分解を行うこと ができる。また、並列性にも優れている。
発明を実施するための最良の形態
[0023] 以下、本発明による固有値分解装置について、実施の形態を用いて説明する。な お、以下の実施の形態において、同じ符号を付した構成要素及びステップは同一ま たは相当するものであり、再度の説明を省略することがある。
[0024] (実施の形態 1)
本発明の実施の形態 1による固有値分解装置について、図面を参照しながら説明 する。
図 1は、本実施の形態による固有値分解装置 1の構成を示すブロック図である。図 1 において、本実施の形態による固有値分解装置 1は、行列記憶部 11と、対角化部 1 2と、対角行列記憶部 13と、行列分割部 14と、固有値分解部 15と、固有値分解記憶 部 16と、固有値算出部 17と、固有値記憶部 18と、固有ベクトル算出部 19と、固有べ タトル記憶部 20とを備える。
[0025] 行列記憶部 11では、任意の対称行列 Aが記憶される。この対称行列 Aは、各要素 が実数である実行列である。なお、対称行列 Aが記憶されているとは、対称行列 Aを 示すデータが記憶されている、という意味である。後述する記憶部においても同様で ある。行列記憶部 11は、所定の記録媒体 (例えば、半導体メモリや磁気ディスク、光 ディスクなど)によって実現されうる。行列記憶部 11での記憶は、 RAM等における一 時的な記憶でもよぐあるいは、長期的な記憶でもよい。行列記憶部 11に対称行列 A が記憶される過程は問わない。例えば、記録媒体を介して対称行列 Aが行列記憶部
11で記憶されるようになってもよぐ通信回線等を介して送信された対称行列 Aが行 列記憶部 11で記憶されるようになってもよぐあるいは、キーボードやマウス等の入力 デバイスを介して入力された対称行列 Aが行列記憶部 11で記憶されるようになって ちょい。
[0026] 対角化部 12は、対称行列 Aを行列記憶部 11から読み出し、その読み出した対称 行列 Aを 3重対角化した対称 3重対角行列 Tを算出する。そして、対角化部 12は、そ の算出した対称 3重対角行列 Tを対角行列記憶部 13に蓄積する。対角化部 12は、 例えば、ハウスホルダー(Householder)変換を必要なだけ繰り返し行う方法や、ラン チヨス (Lanczos)法を用いた方法、その他の 3重対角化法を用いて、対称行列 Aを 3 重対角化する。
[0027] 対角行列記憶部 13では、対称 3重対角行列 Tが記憶される。対角行列記憶部 13 は、所定の記録媒体 (例えば、半導体メモリや磁気ディスク、光ディスクなど)によって 実現されうる。対角行列記憶部 13での記憶は、 RAM等における一時的な記憶でも よぐあるいは、長期的な記憶でもよい。
[0028] 行列分割部 14は、対角行列記憶部 13から対称 3重対角行列 Tを読み出し、その 対称 3重対角行列 Tを 2個の対称 3重対角行列に分割して対角行列記憶部 13に蓄 積する。行列分割部 14は、その対称 3重対角行列を 2個の対称 3重対角行列に分割 して対角行列記憶部 13に蓄積する処理を、分割後の各対称 3重対角行列があらか じめ決められた大きさ以下となるまで再帰的に繰り返す。
[0029] 固有値分解部 15は、あらかじめ決められた大きさ以下の各対称 3重対角行列を対 角行列記憶部 13から読み出し、その各対称 3重対角行列に対して固有値分解を行 い、各対称 3重対角行列の固有値と、その各対称 3重対角行列の固有ベクトルを算 出する。固有値分解部 15は、例えば、 2分法と逆反復法を組み合わせた方法、 MR" 3法、 QR法等を用いて固有値分解を行ってもよい。ここで、 MR'3法による固有値分 解を行う場合には、 LAPACK3. 0 (http : //www. netlib. orgZlapackZ)で提 供されている DSTEGRを用いてもよい。また、 QR法による固有値分解を行う場合に は、 LAPACK3. 0で提供されている DSTEQRを用いてもよい。これらの固有値分 解の方法については、すでに公知であり、その詳細な説明を省略する。固有値分解
部 15は、算出した固有値を固有値分解記憶部 16に蓄積する。また、固有値分解部 15は、算出した固有ベクトル力 なる直交行列の一部の要素である行列要素も固有 値分解記憶部 16に蓄積する。固有ベクトル力もなる直交行列とは、固有ベクトルを各 列とする直交行列のことである。行列要素の詳細にっ 、ては後述する。
[0030] 固有値分解記憶部 16では、固有値分解部 15によって固有値分解された固有値と 、前述の行列要素とが記憶される。また、固有値分解記憶部 16では、固有値算出部 17によって算出された固有値や行列要素も記憶される。固有値分解記憶部 16は、 所定の記録媒体 (例えば、半導体メモリや磁気ディスク、光ディスクなど)によって実 現されうる。固有値分解記憶部 16での記憶は、 RAM等における一時的な記憶でも よぐあるいは、長期的な記憶でもよい。
[0031] 固有値算出部 17は、固有値分解部 15によって算出された固有値と、行列要素とを 固有値分解記憶部 16から読み出し、その固有値と行列要素とから、分割元の対称 3 重対角行列の固有値と、分割元の対称 3重対角行列の行列要素とを算出して固有 値分解記憶部 16に蓄積する。固有値算出部 17は、その分割元の対称 3重対角行 列の固有値と、行列要素とを算出する処理を、対称 3重対角行列 Tの固有値を算出 するまで再帰的に繰り返す。そして、固有値算出部 17は、算出した対称 3重対角行 列丁の固有値を固有値記憶部 18に蓄積する。
[0032] 固有値記憶部 18では、対称 3重対角行列 Tの固有値が記憶される。固有値記憶部 18は、所定の記録媒体 (例えば、半導体メモリや磁気ディスク、光ディスクなど)によ つて実現されうる。固有値記憶部 18での記憶は、 RAM等における一時的な記憶で もよぐあるいは、長期的な記憶でもよい。
[0033] 固有ベクトル算出部 19は、対角行列記憶部 13から対称 3重対角行列 Tを読み出し 、固有値記憶部 18から対称 3重対角行列 Tの固有値を読み出す。そして、固有べク トル算出部 19は、対称 3重対角行列 Tとその固有値とから、ツイスト分解法を用いて 対称 3重対角行列 Tの固有ベクトルを算出して固有ベクトル記憶部 20に蓄積する。 固有ベクトル算出部 19は、 LV型ツイスト分解法により固有ベクトルを算出してもよぐ あるいは、 qd型ツイスト分解法により固有ベクトルを算出してもよい。なお、具体的な ツイスト分解の手法にっ ヽては後述する。
[0034] 固有ベクトル記憶部 20では、対称 3重対角行列 Tの固有ベクトルが記憶される。固 有ベクトル記憶部 20は、所定の記録媒体 (例えば、半導体メモリや磁気ディスク、光 ディスクなど)によって実現されうる。固有ベクトル記憶部 20での記憶は、 RAM等に おける一時的な記憶でもよぐあるいは、長期的な記憶でもよい。
[0035] なお、行列記憶部 11、対角行列記憶部 13、固有値分解記憶部 16、固有値記憶部 18、固有ベクトル記憶部 20の任意の 2以上の記憶部は、同一の記録媒体によって 実現されてもよぐあるいは、別々の記録媒体によって実現されてもよい。前者の場合 には、例えば、対称行列 Aの記憶されている領域が行列記憶部 11となり、対称 3重 対角行列 T等の記憶されている領域が対角行列記憶部 13となる。
[0036] また、行列記憶部 11、対角行列記憶部 13、固有値分解記憶部 16、固有値記憶部 18、固有ベクトル記憶部 20の各記憶部は、 2以上の記録媒体から構成されてもよい
[0037] 次に、本実施の形態による固有値分解装置 1の動作について、図 2のフローチヤ一 トを用いて説明する。
(ステップ S101)対角化部 12は、行列記憶部 11で記憶されて!ヽる対称行列 Aを読 み出し、その行列 Aを 3重対角化して対称 3重対角行列 Tを算出して対角行列記憶 部 13に蓄積する。
[0038] (ステップ S102)行列分割部 14、固有値分解部 15、固有値算出部 17によって対 称 3重対角行列 Tの固有値が算出され、固有値記憶部 18に蓄積される。この処理の 詳細については後述する。
[0039] (ステップ S103)固有ベクトル算出部 19は、対角行列記憶部 13から対称 3重対角 行列 Tを読み出し、固有値記憶部 18から対称 3重対角行列 Tの固有値を読み出し、 対称 3重対角行列 Tの固有ベクトルを算出して固有ベクトル記憶部 20に蓄積する。こ の処理の詳細については後述する。
[0040] このようにして、対称 3重対角行列 Tの固有値分解が終了する。ここで、対称行列 A の固有値は対称 3重対角行列丁の固有値に等 ヽため、対称行列 Aの固有値も算出 されたことになる。また、後述するように、所定の変換を行うことによって、対称行列 A の固有ベクトルも対称 3重対角行列 Tの固有ベクトル力 容易に算出することができ
る。
[0041] 次に、図 2のフローチャートのステップ S101, S102の処理、すなわち、対称 3重対 角行列 Tの固有値を算出するまでの処理について、より詳細に説明する。まず、図 2 のフローチャートのステップ S102の処理について、図 3のフローチャートを用いて説 明する。
[0042] (ステップ S201)行列分割部 14は、対角行列記憶部 13から対称 3重対角行列 Tを 読み出し、その対称 3重対角行列 Tを 2個の対称 3重対角行列に分割して対角行列 記憶部 13に蓄積する。行列分割部 14は、その対称 3重対角行列を 2個の対称 3重 対角行列に分割する処理を、分割後の各対称 3重対角行列があらかじめ決められた 大きさ以下となるまで繰り返す。この処理の詳細については後述する。
[0043] (ステップ S202)固有値分解部 15は、対角行列記憶部 13で記憶されているあらか じめ決められた大きさ以下の各対称 3重対角行列について、固有値分解を行う。固 有値分解部 15は、固有値分解の結果である固有値と、固有ベクトルカゝらなる直交行 列の一部の要素である行列要素とを固有値分解記憶部 16に蓄積する。
[0044] (ステップ S203)固有値算出部 17は、対称 3重対角行列の固有値と、行列要素と を固有値分解記憶部 16から読み出し、分割元の対称 3重対角行列の固有値と、分 割元の対称 3重対角行列の行列要素とを算出して固有値分解記憶部 16に蓄積する 。固有値算出部 17は、その分割元の対称 3重対角行列の固有値と、行列要素とを算 出する処理を、対称 3重対角行列 Tの固有値を算出するまで繰り返し、対称 3重対角 行列 Tの固有値を固有値記憶部 18に蓄積する。このようにして、固有値を算出する 処理が終了する。
[0045] [対称行列 Aの対角化]
対称行列 Aは、例えば、ノ、ウスホルダー変換等を用いて、以下に示されるように 3重 対角化することができることが知られている。ここで、対称 3重対角行列 Tは、行の数と 列の数とがー致する正方行列である。
ただし、 は《x«実対称行列、 Ρは直交行列である。
[0047] したがって、対角化部 12は、上記のようにして、行列記憶部 11から対称行列 Αを読 み出し、対称 3重対角行列 Tを算出することができる。その算出された対称 3重対角 行列 Tは、対角行列記憶部 13で記憶される (ステップ S101)。
[0048] [対称 3重対角行列 Tの分割]
対称 3重対角行列 Tを分割する処理について説明する。次式で示されるように、 n
Xnの対称 3重対角行列 Tが与えられた場合に、それらを 2個の対称 3重対角行列 T
, Tと、その他の要素(下記の Θと β)とに分けることができる。
ただし、 Γは《x« («は 2以上の整数) の実対称 3重対角行列、 7;は f^ x の 実対称 3重対角行列、 Γ2は (《 - ?¾) X の実対称 3重対角行列、
e; ≡(0,···,0,1)τ eR"\ ef ≡ (1,0,···,0)τ e R""\ β は Γの (?¾ +1,?¾)の要素、
Θ は非ゼロ定数である。
ここで、 ηは、 Κηく ηとなる整数である。例えば、 8 X 8の対称 3重対角行列 Τを半 分の大きさに分割する具体的な処理は、次のようになる。
[数 3]
k
h
t
T = , in
^15ノ
[0051] ただし、 β =tであり、 Θは計算誤差が少なくなるように任意に設定することができ
8
る。また、上記各行列において、明記されている以外の行列の要素は 0である。なお 、上記各行列の明記されている各要素は 0以外であってもよぐ 0であってもよい。ここ で、並列処理を適切に実行するためには、 ηを、 ηΖ2を超えない最大の整数にとる 力 あるいは、 ηΖ2を下まわらない最小の整数にとることが好適である(この ηの値を 用いて行列を 2個の行列に分割する場合を、「行列を略半分の 2個の行列に分割す る」と呼ぶことにする)。
[0052] [数 4]
ί¾ =L"/2」
本実施の形態では、 を上式のようにとるものとする。なお、 の値は、前述のよう に、 l〈nく nの範囲内で任意であることは言うまでもない。
[0053] したがって、行列分割部 14は、上述のようにして、対角行列記憶部 13が記憶して いる対称 3重対角行列 Tを読み出し、その対称 3重対角行列 Tを 2個の対称 3重対角 行列 Τ , Tと、 2個の値 |8、 Θに分割することができ、その分割の処理を繰り返すこと
1 2
ができる。行列分割部 14は、分割後の 2個の対称 3重対角行列 Τ , Tと、 2個の値 |8
1 2
、 Θとを、対角行列記憶部 13に蓄積する。なお、 2個の値 、 Θは、どの分割で発生 した値であるのかがわ力るように対角行列記憶部 13で記憶されることが好適である。 図 4は、図 3のフローチャートのステップ S201における行列分割部 14による行列を 分割する処理を示すフローチャートである。
[0054] (ステップ S301)行列分割部 14は、カウンタ Iを「1」に設定する。
(ステップ S302)行列分割部 14は、対角行列記憶部 13から I番目の分割をしてい ない対称 3重対角行列を読み出し、その対称 3重対角行列を 2個の対称 3重対角行 列と、その他の要素とに分割する。そして、行列分割部 14は、分割した 2個の対称 3 重対角行列と、その他の要素とを対角行列記憶部 13に蓄積する。
[0055] (ステップ S303)行列分割部 14は、 I番目の分割を行って 、な 、対称 3重対角行列 力 対角行列記憶部 13で記憶されているかどうか判断する。そして、 I番目の分割を 行って 、な 、対称 3重対角行列が、対角行列記憶部 13で記憶されて 、る場合には、 ステップ S302に戻り、そうでな ヽ場合に ίま、ステップ S304に進む。
[0056] (ステップ S304)行列分割部 14は、 I番目の分割を行った対称 3重対角行列の大き さがあら力じめ決められている大きさ以下力どうか判断する。行列分割部 14は、例え ば、目的とする行列の大きさ(例えば、 25 X 25など)の記憶されて ヽる図示しな 、記 録媒体から、その目的とする行列の大きさを読み出し、対角行列記憶部 13で記憶さ れている、 I番目の分割後の対称 3重対角行列がその大きさ以下であるかどうかを判 断してもよい。そして、 I番目の分割を行った対称 3重対角行列の大きさがあらかじめ 決められている大きさ以下である場合には、対称 3重対角行列を分割する処理は終 了となり、そうでない場合には、ステップ S305に進む。
(ステップ S305)行列分割部 14は、カウンタ Iを 1だけインクリメントする。そして、ス テツプ S302に戻る。
[0057] なお、この図 4のフローチャートでは、上述のように、行列分割部 14が各行列を、略 半分の 2個の行列に分割するため、 I番目の分割後の各対称 3重対角行列の大きさ がほとんど同じである場合について説明したが、行列分割部 14が各行列を、略半分 の 2個の行列に分割しな ヽ場合には、行列分割部 14は、分割後の各行列があらかじ め決められた大きさ以下となるように、分割を繰り返すものとする。
[0058] また、図 4のフローチャートでは、ステップ S304において、行列分割部 14が、対角 行列記憶部 13で記憶されている分割後の行列の大きさをあら力じめ決められた大き さと比較する処理を実行する場合について説明したが、これは一例であって、行列分 割部 14は、ステップ S304において、それ以外の処理を行ってもよい。例えば、上述 のように、行列分割部 14が各行列を、略半分の 2個の行列に分割する場合には、元 の対称 3重対角行列 Tの大きさを知ることができれば、何番目の分割で目的とする行 列の大きさとなるのかを知ることができる。したがって、 N番目(Nは 1以上の整数)の 分割で目的とする行列の大きさとなる場合には、ステップ S304において、 Iが Nであ るかどうかを比較し、 Nでなければステップ S305に進み、 Nであれば一連の処理を 終了するようにしてもよい。
[0059] 図 5は、行列の分割について説明するための図である。まず、行列分割部 14は、 1 番目の分割として、対称 3重対角行列 Tを、対称 3重対角行列 Tと、対称 3重対角行 列 Tとに分割する (ステップ S301, S302)。対称 3重対角行列 Tは、 1個しかないた
2
め、行列分割部 14は、 1番目の分割をして ヽな 、行列がな 、と判断する (ステップ S3 03)。また、対称 3重対角行列 T等はあらかじめ決められた大きさ以下の行列でない とすると (ステップ S304)、行列分割部 14は、 2番目の分割として、対称 3重対角行列 Tを、対称 3重対角行列 T と、対称 3重対角行列 T とに分割する (ステップ S305,
1 11 12
S302)。この場合には、 2番目の分割を行っていない対称 3重対角行列 Tが存在す
2 るため、行列分割部 14は、対称 3重対角行列 Tも、対称 3重対角行列 T と、対称 3
2 21 重対角行列 T とに分割する (ステップ S303, S302)。このようにして、分割後の各
22
対称 3重対角行列が目的とする大きさ以下になるまで、行列を分割する処理が繰り返
される。なお、図 5では、対称 3重対角行列以外の要素(上述の 13、 Θ )については省 略している。また、図 5において、各対称 3重対角行列は、正方行列である。
[0060] [分割された行列の固有値分解]
行列 Tが対称行列であるとすると、行列 Tの固有値分解は、次のようになる。
[数 5]
[0061] ここで、 Dは、行列 Tと同じ大きさの対角行列である。 Dの各対角成分は Tの固有 値である。また、 Qは、行列 Tの固有ベクトル力もなる直交行列である。
[0062] したがって、固有値分解部 15は、対角行列記憶部 13から分割後の各対称 3重対 角行列を読み出し、上記のようにして、固有値分解を行う (ステップ S 202)。固有値 分解の方法として、例えば、 2分法と逆反復法を組み合わせた方法、 MR" 3法、 QR 法等を用いてもよいことは前述の通りである。図 5で示されるように対称 3重対角行列 の分割が行われた場合には、固有値分解部 15は、各対称 3重対角行列 Τ , T ,
111 112
Τ , Τ , · ··, Τ に対して固有値分解を行うことになる。なお、固有値分解部 15
121 122 222
は、固有値分解の結果得られた各固有値と、固有値分解の結果得られた直交行列 の一部の要素である行列要素とを固有値分解記憶部 16に蓄積する。ここで、行列要 素力 直交行列のどの要素を含むのかについては後述する。なお、固有値分解部 1 5が固有値と行列要素とを固有値分解記憶部 16に蓄積するのではなぐ固有値と固 有ベクトル力もなる直交行列とを固有値分解記憶部 16に蓄積してもよい。その場合 でも、固有ベクトル力もなる直交行列を蓄積することによって、少なくとも、行列要素が 蓄積されたことになる。
[0063] なお、後述するように、固有値を算出するときに用いるために必要なのは、直交行 列 Qの全体ではなぐその直交行列 Qの第 1行と最終行である。したがって、この固 有値分解において、直交行列 Qの全体を求めるのではなぐ直交行列 Qの第 1行と 最終行を求めるようにしてもよい。そのためには、例えば、 LAPACK3. 0で提供され て!、る QR法の固有値分解ルーチンである DSTEQRにお!/、て、直交行列 Qの算出 における初期値として、単位行列 Iを用いる代わりに、次式で示される行列 Υを用いて ちょい。
[数 6]
ただし、 ρ,は η χ ηの直交行列であり、 ; Τは 2 χ ηの行列である。
[0064] このようにすることで、 DSTEQRで直交行列 Qの第 1行と最終行を求めるための計 算領域を削減することができる。直交行列 Qそのものを算出する場合には、 0 (η2)の 作業領域が必要であるが、上記の行列 Υを用いて直交行列 Qの第 1行と最終行を算 出する場合には、 Ο (η)の作業領域でよいことになる。その結果、計算量も少なくなり 、固有値分解の処理速度も向上する。このように、固有値分解部 15は、分割後の対 称 3重対角行列に対して、直交行列 Qそのものを算出する固有値分解を行ってもよく 、あるいは、直交行列の一部の成分 (ここでは、第 1行と最終行)を算出する処理を行 つてもよい。この後者の処理も固有値分解と呼ぶことにする。このように、固有値分解 部 15は、あらかじめ決められた大きさ以下の各対称 3重対角行列に対して固有値分 解を行い、各対称 3重対角行列の固有値と、各対称 3重対角行列の固有ベクトルか らなる直交行列の行列要素 (ここでは、第 1行と最終行)とを少なくとも算出し、その固 有値と、その行列要素とを固有値分解記憶部 16に蓄積してもよい。
[0065] [固有値の算出]
まず、図 6で示されるように、分割された 2個の対称 3重対角行列 Τ , Τから、分割
1 2
元の対称 3重対角行列 Τの固有値等を算出する処理について説明する。対称 3重
0
対角行列 Τ , Τは、次のように固有値分解されていたとする。ここで、対称 3重対角
1 2
行列 Τ , Τは、両者共に正方行列であるとする。
1 2
[数 7]
[0066] この場合に、分割元の対称 3重対角行列 Tは、次のようになる。
0
ただし、 は の最終行であり、 f2は ρ2の第 1行である。
上記の式において、 j8、 0は、対称 3重対角行列の分割の処理において説明した 値である。ここで、行列(D + p ζζτ)の固有値分解が得られれば、行列 Τの固有値
12 0 分解が得られたことになる。なぜなら、行列(D + ρ ζζΤ)
12 の固有値分解 D + ρ ζζΤ
12
= QDQ
Tが求まると、次式のようになり、行列 Tの固有値分解が完了するからである
[0068] 次に、行列(D + p ZZ T)の固有値を算出する方法について説明する。行列(D
+ ρ ζζ )の固有値をえ、固有ベクトルを q.とすると、
[数 10]
( + pzz T)q, =へ q,
となる。
[0069] (l) zの成分に 0が含まれず、 D の対角成分に同じ値が含まれない場合
12
まず、 zの成分に 0が含まれず、 D の対角成分に同じ値が含まれない場合につい
12
て説明する。その場合には、上記の式を、次に示すように順次、変形することができ る。
1 + ρ zT(D12 — λ,·/)- = 0
[0070] ここで、
[数 12]
D12 = dia ic/j ,d2,---,dn)
z =(ζ1,ζ2,···,ζπ)τ
とすると、次の固有方程式を得ることができる。固有値え ^=1, 2, ···, n)は、その固 有方程式 n個の解である。下記の f ( λ )は、単調増加であり、かつ f ( λ ) =0の解の範 囲が既知であるため、ニュートン法を用いて計算することができる。
[数 13] (λ) = ι+ Ρ =0 (式
[0071] なお、 D = diag( , λ , ···, λ )となる。行列 Qは、行列(D + P ZZ )の固有べ
1 2 n 12
クトルカ なる直交行列であるため、 Q= (q , q , ···, q )となる。したがって、固有べ
1 2 n
タトル qを求めると、行列 Qを求めることができる。なお、固有ベクトル q.は、次式で与 えられる。
[数 14]
[0072] (2) zの成分に 0が含まれる場合
zの成分に 0が含まれる場合には、行列の次数を下げることができ、その次数を下げ た行列を用いて固有値、及び固有ベクトルを求めることができる。この行列の次数を 下げる操作をデフレーションと呼ぶ。
[0073] z=0の場合には、次式で示すように、 (d, e)がー組の固有値と固有ベクトルとなる 。ただし、 eは、 j番目の成分が 1であり、その他の成分が 0である単位ベクトルである。
[数 15]
(( + ρζζΊ )-dJI)eJ = (D12 -dJI)eJ + pz(zT )
=0
[0074] また、行列(D + ρ ζζ1)の固有方程式は、次式のようになる c
12
[数 16]
\pu + pzz T - In \ = ( j - λ; )|θ12 + pzz T - ただし、 f)u + pii Tは、 Du + pzz τの第 j行、 第 j列を除いた小行列である。 また、 /„は、 n次の単位行列である。
[0075] したがって、 z =0の場合の固有値は、 dと、行列 (D + p ζζτ)の第 j行、第 j列を除 j j 12
いた小行列について、上記式 1の固有方程式を解いた値である。すなわち、固有値 は、 dと、次の固有方程式を解いた値となる。なお、次の固有方程式を解いた固有値 を、固有値え (i= l, 2, · ··, j - 1, j + 1, · ··, n)とする。
[数 17]
: 0
固有ベクトルは、行列(D + p zz1)の第 j行、第 j列を除 、た小行列にっ 、て上記
12
式 2で算出した n—l次元の固有ベクトルの第 (j 1)行と、第 j行との間に 0を挿入し た次式の n次元のベクトルと、上述の eとなる。
[数 18] z1 ∑2
d, - λ, d ― Λ, —へ d -λ, ' d„ -λ,
[0077] このように、 zの成分に 0が含まれる場合には、行列(D + p ζζτ)よりも次元の小さ
12
い行列について固有値分解を行うことになるため、計算を高速ィ匕することが可能であ り、結果として、計算時間が短縮されうる。
[0078] (3) D の対角成分に同じ値が含まれる場合
12
d = d 二… = dの場合にも、上記説明と同様のデフレーションを行うことによつ j + 1 j + 2 k
て、固有値と固有ベクトルとを算出することができる。
[0079] [数 19] τ = ^j+i , zj+i 7…, zt )
に対して、次の 2個の直交行列を考える。
Q ζ = (*,0,0,···,0)
τ
ただし、 Qe R ( ) )である c
また、 *は所定の実数である。
[0080] すると、 d :dより、
j
[数 21]
QD12QT=D12 となる。したがって、次式が得られる。
[0081] ここで、
[数 23]
D --— · X
12 + pzz
の固有値と固有ベクトルとは、上記の zの成分に 0が含まれるデフレーションの場合と 同様にして求めることができる。また、
[数 24]
Q
は、符号の任意性を除いて一意に定まる。ここで、その算出方法について説明する。 まず、次式を満たす直交行列について考える。
[0082] [数 25]
Q , '( +い…, ,…, )— =(*,z J+2,… ; "O w,…, )
この直交行列を次式のようにとると、上記式を満たすことになる。
[0083] ここで、上記の式の *の値は、次式から求まる
[数 27]
[0084] したがって、
[数 28]
Q一 ^j ' Q
となる。その結果、
[数 29]
Q
も、符号の任意性を除いて求めることができる。このようにして、 d =d =〜 = d
j +1 j + 2 k の場合にも行列(D— + pzz"1)の固有値と固有ベクトルとを求めることができる。すな
12
わち、固有値は、 d , d , ·, dと、次の固有方程式を解いた値となる。なお、次 j+2 j+3
の固有方程式を解いた固有値を、固有値え (i -, 2,…, j + k- ·, n)とす る。
[数 30] (λ) = ι+Ρ ∑ -Γ ^ = °
m-1 —人 固有ベクトルは、次のようになる。
Le u + 2≤i≤k
[0086] なお、上記(2) zの成分に 0が含まれる場合、(3) D の対角成分に同じ値が含まれ
12
る場合において、 zの成分力 SOであるかどうかの判断や、 D の対角成分に同じ値が
12
含まれているかどうかの判断は、微少な誤差を考慮して行ってもよい。例えば、次式 が満たされる場合には、 zの成分が 0であると判断してもよぐまた、 D の対角成分が
12
同じ値であると判断してもよ!、。
[数 32]
たたし、 rQLj
rQL ≡maxf<i
1,(i
2,- - -, <i.- ) x e ?iiD 。
[0087] なお、 εは、マシン'ィプシロンに定数 (例えば、 2, 4, 8などの実数であり、計算誤 差を少なくするための値を選択することが好適である)を掛けた値を用いてもよぐ他 の適切な値であってもよ ヽ。
[0088] このようにして、(1) ζの成分に 0が含まれず、 D の対角成分に同じ値が含まれない
12
場合、(2) ζの成分に 0が含まれる場合、 (3) D の対角成分に同じ値が含まれる場合
12
のそれぞれについて、固有値分解 D + p ζζτ二 QDQTが求まることになる。したがつ
12
て、行列 Qと行列 Q から行列 Qを求めることができ、行列 Dも求まっているため、分
12 0
割元の対称 3重対角行列 Tの固有値分解を行うことができる。このように、対象となる
0
行列を 2個の副行列に分割し、その分割した後の各副行列について固有値分解を 行 、、その後に各副行列の固有値分解を用 、て分割元の行列の固有値分解を行う 方法は、分割統治法(Divide and Conquer : D&C)と呼ばれている。
[0089] 分割統治法では、固有ベクトルまで算出することになり、その固有ベクトルを算出す る処理にお!、て行列の計算をしなければならな 、ため、非常に負荷の大き 、処理と なる。分割統治法において固有値分解をする場合には、例えば、計算時間の 95% 程度が固有ベクトルを算出するベクトル更新の処理 (例えば、上述のように、行列 Qと
行列 Q 12から行列 Q 0を算出するために行列を掛け合わせる処理)に費やされることも ありうる。
[0090] 一方、分割元の行列 Tの固有値のみを算出する場合には、上記処理を簡略化す
0
ることができる。次に、その方法について説明する。上記の結果より、次のようになる。
[0091] [数 33]
f = f122 (式 3 )
Ι = Ι12β (式 4 )
ただし、 fは ρ。の第 1行であり、 Iは ρ。の最終行である。
また、 f12は g12の第 1行であり、 f12 = ,(),·' ·, 0)となる。
また、 ι12は ρ12の最終行であり、 ι12 = (ο,- ·-,ο,ι2 )となる。
また、 f\は ¾の第 1行であり、 ι2は ρ2の最終行である。
[0092] ここで、上記のように、 fは行列 Τを固有値分解した結果の直交行列の最初の行で
0
あり、 1は行列 Tを固有値分解した結果の直交行列の最後の行である。この fと 1、すな
0
わち、直交行列の最初の行と、最後の行とが行列要素となる。なお、直交行列 Q 12に ついて、後述する列の入れ替えを行った場合には、 f 、1
12 12はそれぞれ、その列を入 れ替えた後の直交行列 Q の第 1行、最終行となる。
12
[0093] 上記の結果から、図 6で示されるように、行列 Τ , Tから分割元の行列 Tを構成す
1 2 0 る場合に、行列 τについて、
0
[数 34]
λ f, i
をそれぞれ算出することができる。このような処理を繰り返すことにより、最終的に、対 称行列 Aを 3重対角化した対称 3重対角行列 Tの固有値を算出することができる。
[0094] なお、上記の(3) D の対角成分に同じ値が含まれる場合には、式 3,式 4が次のよ
12
うになる。
[数 35] f = f12Q = f12Q TQ
ただし、 = QQである。
[0095] ここで、上記式を計算する場合に、
[数 36]
を先に計算して、その後に
[数 37]
Q
を掛けた方が、計算量が少なくなるため、その順番で計算するようにしてもよい。
[0096] したがって、固有値算出部 17は、上述のようにして、固有値分解記憶部 16から固 有値と行列要素とを読み出し、対角行列記憶部 13から行列の分割時に発生したそ の他の要素に関する β、 Θを読み出し、それらを用いることによって、分割元の対称 3重対角行列の固有値と行列要素とを算出する。そして、それらを算出する処理を繰 り返すことによって、最終的に対称 3重対角行列 Τの固有値を算出する。図 7は、図 3 のフローチャートのステップ S203における固有値算出部 17が固有値を算出する処 理を示すフローチャートである。
[0097] (ステップ S401)固有値算出部 17は、カウンタ Jを「1」に設定する。
(ステップ S402)固有値算出部 17は、 J番目の固有値の算出は最後の固有値の算 出であるかどうか判断する。ここで、最後の固有値の算出とは、対称 3重対角行列 T の固有値を算出することである。そして、最後の固有値の算出である場合には、ステ ップ S406に進み、そうでな ヽ場合に ίま、ステップ S403に進む。
[0098] (ステップ S403)固有値算出部 17は、分割元の対称 3重対角行列の固有値等を算 出する。この処理の詳細については後述する。
(ステップ S404)固有値算出部 17は、 J番目の固有値の算出において、分割元の 全ての対称 3重対角行列の固有値等を算出したかどうか判断する。そして、 J番目の 固有値の算出において、分割元の全ての対称 3重対角行列の固有値等を算出した 場合には、ステップ S405〖こ進み、そうでない場合には、ステップ S403〖こ戻る。
[0099] (ステップ S405)固有値算出部 17は、カウンタ Jを 1だけインクリメントする。そして、 ステップ S402に戻る。
(ステップ S406)固有値算出部 17は、対称 3重対角行列 Tの固有値を算出し、その 算出した固有値を固有値記憶部 18に蓄積する。このようにして、対称 3重対角行列 T
の固有値を算出する一連の処理は終了となる。
[0100] 図 8は、図 7のフローチャートにおけるステップ S403の詳細な処理を示すフローチ ヤートである。なお、この図 8のフローチャートの処理を実行する前に、対角行列 D
12 の対角成分が昇順、あるいは降順となるように並べ替えておくことが好適である。なお 、その場合には、直交行列 Q の列、及び zの成分も、対角行列 D の並び替えと同
12 12
様に並び替えるものとする。具体的には、対角行列 D の第 i成分と、第 j成分とを入
12
れ替えた場合には、直交行列 Q の第洌と、第 j列とを入れ替え、 zの第珩と、第 j行
12
とを入れ替えればよい。
[0101] (ステップ S501)固有値算出部 17は、分割元の行列の固有値を、式 1等を用いて 算出する。そして、固有値算出部 17は、算出した固有値を固有値分解記憶部 16〖こ 蓄積する。
[0102] (ステップ S502)固有値算出部 17は、ステップ S501で算出した固有値を用いて、 式 2等力も q.を算出する。この q.を算出することにより、 q.を列ベクトルに有する行列 Q を算出したことになる。固有値算出部 17は、算出した行列 Qを図示しない記録媒体 にお 、て一次記憶してもよ 、。
[0103] (ステップ S503)固有値算出部 17は、ステップ S502で算出した行列 Qを用いて、 分割元の行列に関する行列要素 f、 1を算出する。この行列要素は、式 3,式 4で示さ れるものである。そして、固有値算出部 17は、算出した分割元の行列要素を固有値 分解記憶部 16に蓄積する。このようにしてステップ S403の処理は終了となる。
[0104] なお、図 8のフローチャートにおいて、 zの成分に 0が含まれず、 D の対角成分に
12
同じ値が含まれない場合には、上記(1)で説明したようにして、固有値、固有ベクトル 力 なる行列 Qを算出することができる。また、 zの成分に 0が含まれ、 D の対角成分
12
に同じ値が含まれない場合には、上記(2)で説明したようにして、固有値、固有べタト ルカもなる行列 Qを算出することができる。また、 D の対角成分に同じ値が含まれる
12
場合には、 zの成分に 0が含まれるかどうかに関わらず、上記(3)で説明したようにし て、固有値、固有ベクトル力もなる行列 Qを算出することができる。上記(3)で説明し たようにして固有値等を算出する場合には、前述のように、行列 Qを算出するのでは なぐ行列 Qを構成する行列を直接 f 等に作用させることによって、 f、 1を算出するよ
うにしてもよい。
[0105] また、図 8のフローチャートでは、行列 Qから、行列要素 f、 1を一度に算出する場合 について示した力 行列要素 f、 1をその成分ごとに計算してもよい。上記の式 3,式 4 力 明らかなように、 f 、 1 に固有ベクトル qを掛けたもの力 行列要素 f、 1の i番目の
12 12 i
成分となる。このような方法で行列要素 f、 1を計算する場合には、固有ベクトル固有べ タトル qのみを iの値を順次、変えながら記憶することによってその計算を行うことがで きる。したがって、行列要素 f、 1の計算において行列 Q全体を記憶する必要がなくなり 、その計算で用いるメモリ上の作業領域を削減することが可能である。
[0106] 図 9は、固有値を算出する処理について説明するための図である。固有値分解記 憶部 16では、固有値分解部 15によって行列 Τ , Τ , · ··, Τ が固有値分解され
111 112 222
た結果、すなわち、それらの固有値と、行列要素とが記憶されているものとする。まず 、固有値算出部 17は、固有値等の 1番目の算出を開始する (ステップ S401, S402) 。ここで、固有値等の 1番目の算出とは、図 9の一番下の行の行列の固有値と、行列 要素とから、下から 2番目の行の行列の固有値と、行列要素とを算出することである。 固有値算出部 17は、行列 Τ と、行列 Τ との各固有値、及び行列 Τ と、行列 Τ
111 112 111 11 との各行列要素を固有値分解記憶部 16から読み出す。また、行列 Τ を行列 Τ と
2 11 111
、行列 Τ とに分解したときに発生した 2個の値 13、 Θを対角行列記憶部 13から読
112
み出す。そして、固有値算出部 17は、それらの値を用いて、行列 Τ の固有値を算
11
出して固有値分解記憶部 16に蓄積する (ステップ S501)。次に、固有値算出部 17 は、行列 T の固有値を用いて直交行列 Qを算出し (ステップ S502)、その直交行列
11
Qを用いて行列 T の行列要素を算出して固有値分解記憶部 16に蓄積する (ステツ
11
プ S503)。
[0107] 固有値等の 1番目の算出はまだ終わっていないため(ステップ S404)、固有値算出 部 17は、上記説明と同様にして、行列 T 、行列 T の固有値、行列要素等に基づ
121 122
いて、行列 T の固有値、行列要素を算出する(ステップ S402, S403)。このようにし
12
て、固有値等の 1番目の算出が終了すると、固有値算出部 17は、固有値等の 2番目 の算出、すなわち、行列 T 、行列 T の固有値、行列要素等に基づいて行列丁の
11 12 1 固有値、行列要素の算出を行う(ステップ S404, S405, S402, S403)。その後、固
有値算出部 17は、同様にして、行列 T 、行列 Τ の固有値、行列要素等に基づい
21 22
て行列 Τの固有値、行列要素の算出を行う(ステップ S404, S403)。
2
[0108] 固有値算出部 17が固有値等の 2番目の算出を終了すると (ステップ S404)、次の 固有値等の算出は、対称 3重対角行列 Tの固有値を求める最後の処理となるため( ステップ S405, S402)、固有値算出部 17は、固有値の算出のみを行い、その算出 した固有値を固有値記憶部 18に蓄積する (ステップ S406)。このようにして、固有値 の算出が終了する。
[0109] なお、図 9の行列 T、行列 Tの固有値、行列要素等に基づいて行列 Tの固有値を
1 2
算出する場合には、行列要素 f 、 1、あるいは行列要素 f 、 1を用いるだけでよい。し
1 2 2 1
たがって、行列 T、行列 Tの行列要素を算出する場合に、行列要素 f 、 1、あるいは
1 2 1 2 行列要素 f 、 1
2 1を計算しなくてもよい。このようにすることで、計算量を削減することが でき、処理スピードを向上させることが可能である。
[0110] 次に、固有ベクトル算出部 19について説明する。本実施の形態では、固有ベクトル 算出部 19が(l) qd型ツイスト分解法により固有ベクトルを算出する場合と、(2) LV型 ツイスト分解法により固有ベクトルを算出する場合とについて説明する。
[0111] (l) qd型ツイスト分解法により固有ベクトルを算出する場合
図 10は、 qd型ツイスト分解法により固有ベクトルを算出する場合の固有ベクトル算 出部 19の構成を示す図である。図 10において、固有ベクトル算出部 19は、正定値 化部 21と、コレスキー分解部 22と、ベクトル算出部 23とを備える。
[0112] 正定値ィ匕部 21は、固有値記憶部 18から対称 3重対角行列 Tの固有値を読み出し 、その固有値のいずれかが負の値であるかどうか判断する。そして、その固有値のい ずれかが負の値である場合に、正定値ィ匕部 21は、対角行列記憶部 13から対称 3重 対角行列 Tを読み出し、その対称 3重対角行列 Tの固有ベクトルを変化させることなく 、対称 3重対角行列 Tのすベての固有値が正の値となるように、その対称 3重対角行 列 Tを正定値ィ匕し、正定値ィ匕した後の固有値を固有値記憶部 18に蓄積し、正定値 ィ匕した後の対称 3重対角行列 Tを対角行列記憶部 13に蓄積する。この正定値化の 処理を行うのは、 qd型ツイスト分解法により固有ベクトルを算出する場合には、対称 3 重対角行列 Tの固有値がすべて正の値でなければならないからである。なお、対称 3
重対角行列 Tを正定値ィ匕した行列も、対称 3重対角行列 Τと呼ぶことにする。また、こ の正定値ィ匕の処理が行われた場合には、コレスキー分解や固有ベクトルを算出する 処理は、正定値化後の対称 3重対角行列 Τ、固有値に対して行われることになる。こ の処理の詳細については後述する。ここで、正定値ィ匕の行われた場合であっても、 固有値記憶部 18には、正定値ィ匕の前の固有値が記憶されているものとする。その正 定値化の前の固有値が、固有値分解装置 1が最終的に求める固有値だカゝらである。 また、正定値ィ匕の行われた場合であって、 qd型ツイスト分解法による固有ベクトルの 算出のみを行う場合には、対角行列記憶部 13で記憶されている対称 3重対角行列 T を、正定値ィ匕の後の対称 3重対角行列 Tで上書きしてもよい。一方、 LV型ツイスト分 解法による固有ベクトルの算出も行う場合には、対角行列記憶部 13には、正定値ィ匕 の前の対称 3重対角行列 Tと、正定値化の後の対称 3重対角行列 Tとが記憶されるこ とになる。
[0113] コレスキー分解部 22は、対角行列記憶部 13から、すべての固有値が正の値である 対称 3重対角行列 Tを読み出し、固有値記憶部 18から、対称 3重対角行列 Tの正の 値の固有値を読み出す。そして、コレスキー分解部 22は、対称 3重対角行列 Tの各 要素に関して qd型変換を行うことによって、対称 3重対角行列 Tを上 2重対角行列 B( +1)及び下 2重対角行列 B(_1)にコレスキー分解する。この処理の詳細については後 述する。なお、「対称 3重対角行列 Tを上 2重対角行列 B(+1)及び下 2重対角行列 B(_ "にコレスキー分解する」ことには、対称 3重対角行列 Tの固有値に単位ベクトルを掛 けたものを対称 3重対角行列 Tから引いた行列を、上 2重対角行列 B(+1)及び下 2重 対角行列 B(_1)にコレスキー分解することが含まれてもよい。
[0114] ベクトル算出部 23は、コレスキー分解部 22が算出した上 2重対角行列 B(+1)及び下 2重対角行列 B(_1)の各要素と、対称 3重対角行列 Tの正の値の固有値とを用いて固 有ベクトルを算出して固有ベクトル記憶部 20に蓄積する。この固有ベクトルを各列に 有する行列が、固有値分解の直交行列となる。
[0115] 次に、図 2のフローチャートのステップ S103の処理、すなわち、対称 3重対角行列 Tの固有ベクトルを算出する処理について、より詳細に説明する。まず、図 2のフロー チャートのステップ S 103の処理につ!、て、図 11のフローチャートを用いて説明する
[0116] (ステップ S601)正定値ィ匕部 21は、固有値記憶部 18から対称 3重対角行列 Tの固 有値を読み出し、その固有値のいずれかが負の値であるかどうか判断する。そして、 負の値がある場合には、ステップ S602〖こ進み、そうでない場合には、ステップ S603 に進む。
[0117] (ステップ S602)正定値ィ匕部 21は、対角行列記憶部 13から対称 3重対角行列 Tを 読み出し、その対称 3重対角行列 Tの固有ベクトルを変化させることなぐ対称 3重対 角行列 Tのすベての固有値が正の値となるように、その対称 3重対角行列 Tを正定値 化し、正定値ィ匕した後の対称 3重対角行列 Tを対角行列記憶部 13に蓄積し、正定値 化した後の固有値を固有値記憶部 18に蓄積する。
[0118] (ステップ S603)コレスキー分解部 22は、対角行列記憶部 13から、すべての固有 値が正の値である対称 3重対角行列 Tを読み出し、固有値記憶部 18から、対称 3重 対角行列 Tの正の値の固有値を読み出す。なお、正定値化が行われた場合には、 正定値ィ匕の後の対称 3重対角行列 T、及び固有値が読み出されることになる。そして 、コレスキー分解部 22は、対称 3重対角行列 Τの各要素に関して qd型変換を行うこと によって、対称 3重対角行列 Tを上 2重対角行列 B(+1)及び下 2重対角行列 B(_ 1)にコ レスキー分解する。
[0119] (ステップ S604)ベクトル算出部 23は、コレスキー分解部 22が算出した上 2重対角 行列 B(+1)及び下 2重対角行列 B(_1)の各要素と、対称 3重対角行列 Tの正の値の固 有値とを用いて固有ベクトルを算出する。
[0120] (ステップ S605)ベクトル算出部 23は、算出した固有ベクトルを正規ィ匕する。すな わち、ベクトル算出部 23は、算出した固有ベクトルのノルムを算出し、固有ベクトルを 算出したノルムで割ったものを最終的な固有ベクトルとして固有ベクトル記憶部 20に 蓄積する。このようにして、対称 3重対角行列 Tを固有値分解する処理は終了となる。 なお、この後に、行列記憶部 11が記憶している対称行列 Aの固有ベクトルを算出 する処理が行われてもよ 、が、ここでは省略して 、る。
[0121] また、固有ベクトル算出部 19が算出した固有ベクトルの精度を上げるために、図 12 で示されるように、固有ベクトルに関する処理を実行してもよぐあるいは、実行しなく
てもよい。すなわち、図示しない逆反復法処理部は、固有ベクトル記憶部 20から固 有ベクトル算出部 19が算出した固有ベクトルを読み出し、その固有ベクトルに対して 逆反復法の処理を実行し、その結果の固有ベクトルを固有ベクトル記憶部 20に蓄積 する (ステップ S701)。このように、逆反復法の処理を実行することによって、固有べ タトルの精度を向上させることができうる。次に、図示しないグラムシュミット処理部は、 高精度が必要力どうか判断する (ステップ S 702)。この判断は、あらかじめ高精度が 必要かどうか設定されている記録媒体等から、その設定を読み出すことによって判断 してもよい。そして、図示しないグラムシュミット処理部は、高精度が必要な場合には、 固有ベクトル記憶部 20から逆反復法の処理の実行された固有ベクトルを読み出し、 その固有ベクトルに対してグラムシュミット法の処理を実行し、その結果の固有べタト ルを固有ベクトル記憶部 20に蓄積する (ステップ S 703)。このように、グラムシュミット 法の処理を実行することによって、固有ベクトルの直交性を高めることができうる。な お、逆反復法や、グラムシュミット法については、すでに公知であり、その詳細な説明 を省略する。
[0122] [対称 3重対角行列 Tの正定値化]
行列 Tを次のように固有値分解できたとする。
[数 38]
T = QDQT
[0123] その行列 Tを次のように a倍して siだけシフトしたとする。ここで、 Iは行列 Tと同じ大き さの単位行列であり、 a, sは実数である。
[数 39]
T→T = aT + sI
[0124] すると、シフト後の固有値分解は、次のようになる。
[数 40] = QDQT
ただし、 D = aD + siである。
[0125] このように、行列 Tを a倍して siだけシフトした場合には、各固有値が a倍されて sだけ シフトされる力 固有ベクトルは変化しない。したがって、この実数倍とシフトとによつ
て、すべての固有値を正の値にしてから、ツイスト分解法を用いた固有ベクトルの算 出を行えばよいことになる。
[0126] なお、算出された固有値に負の値が含まれる場合には、例えば、(A)最小の固有 値によりシフトを行ってもよぐ(B)最大の固有値によりシフトを行ってもよい。ここで、 固有値には、負の値と正の値とが含まれているものとする。固有値がすべて正の値で あれば、シフトを行う必要はなぐ固有値がすべて負の値であれば、単に行列 Tを Tとすれば、正定値ィ匕することができる。
[0127] (A)最小の固有値によるシフト
最小の固有値をえ く 0とすると、 a = l、s =— λ + λ X εとする。ここで、 εと
mm min max
しては、マシン'ィプシロンに定数を掛けた値を用いてもよぐ他の適切な値であって もよい。このように、行列 Tをシフトすることによって、行列 Tのすベての固有値を正の 値にすることができる。
[0128] (B)最大の固有値によるシフト
最大の固有値をえ 〉0とすると、 a=— 1、 s = - λ Χ εとする。この場合に
max max mm
は、次のように行列 τが変換されることになる。
[数 41]
Τ→Τ = -Τ + λίΆ3Χ - λαήη χ εΙ = -(Τ - (kmaK - λ^ χ ε )/)
[0129] 上式の右辺の括弧内では、シフトによってすベての固有値が負の値になる力 全 体にマイナスを掛けることによって、正定値ィ匕することができている。ここで、 εは、(Α )の場合と同様にマシン'ィプシロンに定数 (例えば、 2, 3, 4などの実数であり、計算 誤差を少なくするための値を選択することが好適である)を掛けた値を用いてもよぐ 他の適切な値であってもよ ヽ。
[0130] 固有値の最小値の絶対値が、固有値の最大値の絶対値よりも小さい場合には、上 記 (Α)のシフトを行い、固有値の最小値の絶対値力 固有値の最大値の絶対値より も大きい場合には、上記(Β)のシフトを行うようにしてもよい。このようにすることで、シ フトの量を少なくすることができ、丸め誤差を削減することが可能だ力 である。
なお、正定値ィ匕の後に固有ベクトルを算出する処理の詳細については、次の LV型 ツイスト分解法の場合と一緒に説明する。
[0131] (2) LV型ツイスト分解法により固有ベクトルを算出する場合
図 13は、 LV型ツイスト分解法により固有ベクトルを算出する場合の固有ベクトル算 出部 19の構成を示す図である。図 13において、固有ベクトル算出部 19は、コレスキ 一分解部 31と、ベクトル算出部 32とを備える。
[0132] コレスキー分解部 31は、対角行列記憶部 13から、対称 3重対角行列 Tを読み出し 、固有値記憶部 18から、対称 3重対角行列 Tの固有値を読み出す。そして、コレスキ 一分解部 31は、対称 3重対角行列 Tの各要素に関してミウラ変換、 dLVv型変換、逆 ミウラ変換を行うことによって、対称 3重対角行列 Tを上 2重対角行列 B(+1)及び下 2重 対角行列 B(_1)にコレスキー分解する。この処理の詳細については後述する。なお、「 対称 3重対角行列 Tを上 2重対角行列 B(+ 1)及び下 2重対角行列 B(_1)にコレスキー 分解する」ことには、対称 3重対角行列 Tの固有値に単位ベクトルを掛けたものを対 称 3重対角行列 Tから引いた行列を、上 2重対角行列 B(+1)及び下 2重対角行列 B(_1 、にコレスキー分解することが含まれてもよ 、。
[0133] ベクトル算出部 32は、コレスキー分解部 31が算出した上 2重対角行列 B(+1)及び下 2重対角行列 B(_1)の各要素と、対称 3重対角行列 Tの固有値とを用いて固有べタト ルを算出して固有ベクトル記憶部 20に蓄積する。この固有ベクトルを各列に有する 行列が、固有値分解の直交行列となる。
[0134] 次に、図 2のフローチャートのステップ S103の処理、すなわち、対称 3重対角行列 Tの固有ベクトルを算出する処理について、より詳細に説明する。まず、図 2のフロー チャートのステップ S 103の処理につ!、て、図 14のフローチャートを用いて説明する
[0135] (ステップ S801)コレスキー分解部 31は、対角行列記憶部 13から対称 3重対角行 列 Tを読み出し、固有値記憶部 18から対称 3重対角行列 Tの固有値を読み出す。そ して、コレスキー分解部 31は、対称 3重対角行列 Tの各要素に関してミウラ変換、 dL Vv型変換、逆ミウラ変換を行うことによって、対称 3重対角行列 Tを上 2重対角行列 B 及び下 2重対角行列 B(_1)にコレスキー分解する。
[0136] (ステップ S802)ベクトル算出部 32は、上 2重対角行列 B(+1)及び下 2重対角行列 B (_1〉の各要素と、対称 3重対角行列 Tの固有値とを用いて固有ベクトルを算出する。
[0137] (ステップ S803)ベクトル算出部 32は、算出した固有ベクトルを正規ィ匕する。すな わち、ベクトル算出部 32は、算出した固有ベクトルのノルムを算出し、固有ベクトルを 算出したノルムで割ったものを最終的な固有ベクトルとして固有ベクトル記憶部 20に 蓄積する。このようにして、対称 3重対角行列 Tを固有値分解する処理は終了となる。
[0138] なお、この後に、行列記憶部 11が記憶している対称行列 Aの固有ベクトルを算出 する処理が行われてもよいが、ここでは省略している。また、固有ベクトル算出部 19 が算出した固有ベクトルの精度を上げるために、図 12で示されるように、固有べタト ルに関する処理を実行してもよぐあるいは、実行しなくてもよいことは、 qd型ツイスト 分解法の場合と同様である。
[0139] [固有値からの固有ベクトルの算出]
固有値から固有ベクトルを算出する処理については、 qd型ツイスト分解法を用いる 方法と、 LV型ツイスト分解法を用いる方法とについて説明する。図 11のフローチヤ ートで示されるように、 qd型ツイスト分解法を用いて固有ベクトルを算出する場合に、 負の固有値があれば、対称 3重対角行列 Tを正定値ィ匕する処理をあらかじめ実行し ておく(ステップ S601, S602)。 qd型ツイスト分解法を用いる場合には、この後の処 理において、その正定値ィ匕の後の対称 3重対角行列 T、及び固有値を用いるものと する。
[0140] 対角行列記憶部 13では、次のような m X mの対称 3重対角行列 Tが記憶されて 、 るちのとする。
[数 42]
[0141] また、固有値記憶部 18では、固有値え (l≤i≤m)が記憶されているものとする。
のような場合に、対称 3重対角行列 Tの固有ベクトルを求めることは、次の方程式の 固有ベクトル Xを求めることになる。
[数 43]
(Γ— λ ) Xj =γΛ = l,2"..,m)
ただし、 行列 Γは mxm行列である。
は、 番目の要素力 で他の要素力^)のべクトルである。
( は、 έ単位行列/の番目の列である )
[0142] 本来であれば、上記式の右辺は 0になるはずである力 行列 Tの固有値を算出する ときに、いくらかの誤差を含むため、固有ベクトル Xが真値であれば、上記のように右 辺に残差項が存在する。
[0143] ここで、以下のようにコレスキー分解できたとする。
[数 44]
T . λ / =
(« = 0,+l).
l ("m)-2
T ·· ≡Β B
0
2m— 1ノ
, (
u2k-l - ir
¾ )y = i, ^" =1, (" = 0,+l,— 1),
ξ =ξΓη。), &^)=^v
[0144] ここで、行列 Tの各要素と、行列 BW)の各要素との対応は、次のようになる。
[数 45]
k = l,z,',',
l2k 1k-\ulk = 1,2,… "一 1
ただし、 =0 である。
[0145] なお、行列 Tの各要素と、行列 B(G)の各要素との対応を次のように書くこともできる。
下記の式力も明らかなように、行列 B
½)の各要素を、行列 Tの各要素を用いて順次、 算出することができる。
[数 46]
=i ..
)= = 1,2,...,— 1 ただし、 も。 (°) = 0 である。
上記のコレスキー分解した結果を、次式のように書くことができる c
[数 47]
I LD+LT
1 {UD~UL
ただし、 ,ひ は以下の通りである。
そして、次のようになる。
[数 48]
T-%}I = NkDk{N
Dk≡ di D D; ,...,Dk +—い ,Dk+ …, Dm) ここで、行列 Nをツイスト行列と呼ぶ。また
k
[数 49]
であるので、(T— λ ΐ)χ = γ eは、
j j k k
[数 50]
N
となる。この簡単な式を解くことによって固有ベクトルを算出することができる。具体的 には、
ただし、 (p)は の p番目の要素である。
のようにわずかな演算で固有ベクトルを算出することができる。なお、ある p 0につい て、 D + = 0あるいは D —ニ でぁったとして 行列 の , 成分である b p 0 ρθ 2p
(G)と、行列 Bの , p + 1)成分である b (G)を用いて、あるいは、行列 Tの成分を
-1 2p
用いて、
[数 52] + 2), ρθく k,
p0) =
(°) (°)
ρ0>^
^2 0-3ち^2 (°)0-
^2 0+2
(p0 + 2), pO < : ^2 0-4
(p0— 2), ρθ >
po- と固有ベクトルを算出することができる(このように固有ベクトルを算出する処理を例 外処理と呼ぶことにする)。なお、残差項のパラメータ γ及び kの値は、
k
[数 53]
ョ "+ —1)- ) _λ (式 5)
の絶対値が最小となるように決定する。したがって、上述のコレスキー分解を求め、ッ
ィスト行列 Nを求めることができれば、固有ベクトルを求めることができることになる。
k
そこで、次にコレスキー分解について説明する。
[0149] 図 15で示すように、 T- λ Iをコレスキー分解することは、 Β(0)に対応する {q (0), e (
j k k
0)}から、 B(±1)に対応する {q (±1), e (±1)}を求めることである。
k k
[0150] (qd型ツイスト分解法)
まず、 qd型ツイスト分解法で用いる qd型変換について説明する(図 15参照)。
[数 54] q d型変換: Γ,^)}!^^^1),^1)}
この変換は、さらに stationary qd with shift (stqds)変換
[数 55]
s t q d s変換 : { ), 。)}4{^+1), +1)}
; ^+ 卜 k=l,2 ,m,
«+1) =«。), k = l,2,.,m-l,
ョ 0, ≡ 0
及び re verse— time progressive qd with shift (rpqds)変換
^+^^^+^Π- ,, =
M— ^r^, k=l,2,...,m-l, に分けられる。固有値えが既知であれば反復的な計算が不要なため、計算量を少 なく抑えることができるが、常に数値安定性と精度が高い方法ではない。それは、 stq ds変換、 rpqds変換は、共に減算による桁落ちが発生する可能性があるからである。 例えば、 stqds変換において、 q (0)+e (0)—え〜 e (+"であれば、 q を求め k k-1 j k-1 k
る際に、倍精度計算でもの有効数字がわず力 1桁になることもある。その場合には、 q (0)e (0)/q を計算すると誤差が生じる。つまり、 e が精度よく計算できないこ k k k k
とになる。また、 q を求めるのに e が必要であり、 e を求めるのに q
k+1 k k k が必要であると 、つたように逐次的な計算が要求されるので、 1箇所で発生した桁落
ちによる誤差が波及し、さらなる誤差増大の可能性も秘めている。その結果、理論上 は q (+ 1)≠0であるが、誤差蓄積により q (+ 1) = 0となり、 q (0)e (Vq の計算にお k k k k k
いてオーバーフローが起こるといった数値不安定な状況も想定される。 B(G)の成分 {b (0) , b (0) }が与えられる、すなわち {q (0) , e (0) }が与えられると、 λ及び e
2k- 1 2k k k j k- 1 がー意的に決まるので、この状況は避けることはできない。 rpqds変換も同様の性質 を持っため、実用的なレベルにまで達したとはいいがたい。 LAP ACKにおいて FO RTRANルーチン DSTEGRとして改良版が公開されているものの欠点は完全に解 決されてはいない。
[0151] なお、このように対角行列 Tの各要素を、行列 B(G)の各要素に変換して、その行列 B
の各要素について qd型変換を行う場合であっても、間接的に対角行列 Tの各要素 に関して qd型変換を行うことになるため、「対角行列 Tの各要素に関して qd型変換を 行う」と言うことにする。
また、ここではスタンダードな qd型変換について説明した力 qd型変換は differen tial qd型変換であってもよい。
[0152] (LV型ツイスト分解法)
次に、 LV型ツイスト分解法で用いるミウラ変換、 dLVv型変換、逆ミウラ変換につい て説明する(図 15参照)。
[数 57] ミウラ変換:
s t d L V v変換: °) ^ uk (+1)
r d L V v変換:
[0153] まず、ミウラ変換にっ 、て説明する。この変換は、次のように示される。
[数 58]
k = \,2,...,m.
≡ 0,
ただし、 Swは任意である。
[0154] 次に、 dLVv型変換について説明する。この変換は、さらに stationary discrete Lotka― Volterra with variable step— size (stdLVv)変換
[数 59] k = 1, …,2»ί— 1,
1 + δ(+1)0' 及び re verse— time discrete Lotka― Volterra with variable step― size ( rdLVv)変換
[数 61] = λ (" = +1'— D を満たす範囲内で δ (±1)は任意である。
[0155] 最後に、逆ミウラ変換にっ 、て説明する。この変換は、次のように示される。
[数 62]
(l + ^u^2),(l + ^u^)
¾Jr _ g (+i) , κ ,Α'
≡ 0
[0156] このようにして、 qd型変換と同様に、コレスキー分解を行うことができる。 qd型変換 では見られな 、離散 Lotka— Volterra型変換の大きな特徴は、任意パラメータを持 つことである。すなわち、 λ = 1Ζ δ (°)— 1Z δ (±1)を満たす範囲で δ (η)の値を任意 に設定できる。 δ (η)を変動させると補助変数 u (η)の値も変化するが、桁落ちによる誤
k
差や数値不安定が発生するかどうかは事前に判定できる。この判定は、 if文によって 実装されてもよい。この場合は、 δ (η)を再設定後に再度計算すればよい。また、 u (±1
k
)が求まれば逆ミウラ変換によって q (±1)及び e (±1)が独立に計算されるので、誤差が
k k
伝播しないという性質を持つ。なお、逆ミウラ変換をミウラ変換、ミウラ変換を逆ミウラ 変換と呼んでもよぐ stdLVv変換を stLVv変換と呼んでもよぐ rdLVv変換を rLVv 変換と呼んでもよい。
[0157] なお、このように対角行列 Tの各要素を、行列 B(G)の各要素に変換して、その行列 B の各要素にっ 、て LV型変換を行う場合であっても、間接的に対角行列 Tの各要 素に関して LV型変換を行うことになるため、「対角行列 Tの各要素に関して LV型変 換を行う」と言うことにする。
[0158] ここで、 LV型ツイスト分解法による処理のより詳細な処理の一例について説明する 。図 16〜図 21は、 LV型ツイスト分解法による処理の一例を示すフローチャートであ る。
[0159] 図 16は、コレスキー分解の全体の処理の一例を示す図である。
(ステップ S901)コレスキー分解部 31は、ミウラ変換を行う。この処理の詳細につい ては後述する。
[0160] (ステップ S902)コレスキー分解部 31は、 1Ζ δ (±1)を lZ δ (0) - λとする。
(ステップ S903)コレスキー分解部 31は、後述する Procedure 1の処理を実行する
[0161] (ステップ S904)コレスキー分解部 31は、後述する Procedure2の処理を実行する
(ステップ S905)コレスキー分解部 31は、 q e がすでに算出されているか
k k
どうか判断する。そして、すでに算出されている場合には、コレスキー分解の一連の 処理は終了となり、一方、算出されていない場合には、ステップ S901に戻る。
[0162] 図 17は、図 16のフローチャートにおけるステップ S903の処理の詳細を示すフロー チャートである。
(ステップ S1001)コレスキー分解部 31は、 q e がすでに算出されている
k k
力どうか判断する。そして、すでに算出されている場合には、終了となり、算出されて ヽな ヽ場合に【ま、ステップ S1002に進む。
(ステップ S1002)コレスキー分解部 31は、 stdLVv変換等の処理を行う。この処理 の詳細については後述する。
[0163] 図 18は、図 16のフローチャートにおけるステップ S904の処理の詳細を示すフロー チャートである。
(ステップ S1101)コレスキー分解部 31は、 q e がすでに算出されている
k k
力どうか判断する。そして、すでに算出されている場合には、終了となり、算出されて ヽな ヽ場合に【ま、ステップ S1102に進む。
(ステップ S1102)コレスキー分解部 31は、 rdLVv変換等の処理を行う。この処理 の詳細については後述する。
[0164] 図 19は、図 16のフローチャートのステップ S901の処理の詳細を示すフローチヤ一 トである。
(ステップ S1201)コレスキー分解部 31は、 1Z δ (G)の値を決定する。この値は、前 述のように任意に決定することができるため、行列を正定値ィ匕する値に決定する。例 えば、コレスキー分解部 31は、 1Z δ (G)の値を次式のように決定する。
[数 63]
- ^ = | min| + e (°) χ |λ匪
[0165] なお、なお、 ε (ωは、マシン'ィプシロンに定数 (例えば、 2, 3, 4などの実数であり、 計算誤差を少なくするための値を選択することが好適である)を掛けた値を用いても よぐ他の適切な値であってもよい。その後、例えば、ステップ S 1203等で桁落ちの 発生する可能性があると判断された場合に、コレスキー分解部 31は、 1Z δ Wの値を 決める ε (G)の値を、例えば、マシン'ィプシロンに掛ける定数を 1ずつ大きくしながら 設定していってもよい。なお、 1Z δ の値を決定する方法は、これに限定されないこ
とは言うまでもない。このように、 LV型ツイスト分解法では、この 1Z δ (ωの値を自由 に設定することができるため、 qd型ツイスト分解法の場合のように、行列 Tの正定値化 を行わなくてもよいことになる。なお、 qd型ツイスト分解法の場合と同様に、行列丁の 正定値ィ匕の処理を行ってから、 LV型ツイスト分解法を実行してもよ ヽことは言うまで もない。
(ステップ S1202)コレスキー分解部 31は、 β ΐを α ( )— lZ δ (ωに設定する。
[0166] (ステップ S1203)コレスキー分解部 31は、 β 1の絶対値が εよりも大きいかどうか 判断する。そして、大きい場合には、ステップ S1204に進み、そうでない場合には、 ステップ S1201に戻って、 1/ δ (G)の値を決定する処理を再度実行する。なお、この εも任意に定めることができる。例えば、 εとしてマシン'ィプシロンを用いてもよい。 εの値を大きくすると精度が向上し、 εの値を小さくすると精度が低下する。なお、こ のステップ S1203で行っている処理は、桁落ちが発生する可能性について判断する 処理である。 β 1の絶対値が εよりも大きくない場合には、桁落ちの発生する可能性 があると半 IJ断されることになる。
[0167] (ステップ S1204)コレスキー分解部 31は、 β 2を q (0)/ (1 + δ (0)u (0))に設定す
1 0
る。なお、前述のように u ((>) =0であるため、 |8 2は q (())に設定されたことになる。
0 1
[0168] (ステップ S1205)コレスキー分解部 31は、 u δ (°)u (°))を j8 1に設定する。
1 0
ここで、 13 1は、ステップ S 1202において q (0) - 1/ δ ( )に設定されている力 前述 のように u (。) = 0であるため、 β 1は、 q (。ソ(1 + δ (。)u (。)— 1Ζ δ (。)と等しぐこれ
0 1 0
にミウラ変換を行うと u (0) =u (0) I となる力もである。なお、 u (°) =0から(1 +
1 2k- 1 k=l 0
δ (% (°)) = 1である。
0
[0169] (ステップ S1206)コレスキー分解部 31は、カウンタ kを「1」に設定する。
(ステップ S1207)コレスキー分解部 31は、 a ^e (G)Z j8 1に設定する。前述のよ k
うに、 β 1は u (°)となるから、 e (°)Ζ ι8 1にミウラ変換を行うと、 a 1は δ (0)u (°)と等
2k- 1 k 2k し!ヽこと〖こなる。
[0170] (ステップ S1208)コレスキー分解部 31は、 α 2を α 1 + 1に設定する。ステップ S 12 07の説明からわ力るように、 ひ 2は 1 + S ( )u ( )と等しいことになる。
2k
[0171] (ステップ S1209)コレスキー分解部 31は、 α 2の絶対値が εよりも大きいかどうか
判断する。そして、大きい場合には、ステップ S1210に進み、そうでない場合には、 ステップ S1201に戻って、 1/ δ to)の値を決定する処理を再度実行する。なお、この ステップ S1209で行っている処理は、ステップ S1203の処理と同様に、桁落ちが発 生する可能性について判断する処理である。 α 2の絶対値が εよりも大きくない場合 には、桁落ちの発生する可能性があると判断されることになる。
[0172] (ステップ S1210)コレスキー分解部 31は、 《IX |82を算出して u (°)(1+ S (°)u
2k 2k
(0))に設定する。前述のように、 a 1は δ (0)u ( )と等しく、 β 2は q (0)/(1+ δ ( )u
-1 2k k 2
(。))であるため、 αΙΧ β 2にミウラ変換を実行すると、 u (0) (1+ δ (o)u (。))に k-2 2k 2k- 1 等しくなるからである。
[0173] (ステップ S1211)コレスキー分解部 31は、 |82を q (G)Z α 2に設定する。前述の k+1
ように、 《2は 1+ S (°)u (°)と等しいため、 |82は、 q (0)/(l+ 6 (0)u (°))となり、
2k k+ 1 2k
ι82における kの値を 1だけインクリメントしたことになる。
[0174] (ステップ S1212)コレスキー分解部 31は、 βΐを β2— 1 δ Wに設定する。前述 のように、 ι82は q (°)Ζ(1+ δ ( (°))と等しいため、 |81は、 q (°
k+1 2k k+1 ソ(1+ δ (
(0))-1/ δ (0)となり、ミウラ変換を実行すると、 β 1は、 u (0)となる。したがって、
2k 2k+l
ι81における kの値を 1だけインクリメントしたことになる。
[0175] (ステップ S1213)コレスキー分解部 31は、 131の絶対値が εよりも大きいかどうか 判断する。そして、大きい場合には、ステップ S1214に進み、そうでない場合には、 ステップ S1201に戻って、 1/ δ (G)の値を決定する処理を再度実行する。なお、この ステップ S1213で行っている処理は、ステップ S1203の処理と同様に、桁落ちが発 生する可能性について判断する処理である。 β 1の絶対値が εよりも大きくない場合 には、桁落ちの発生する可能性があると判断されることになる。
[0176] (ステップ S1214)コレスキー分解部 31は、 《2Χ |81を算出して u δ (°)
2k+l
u ( ))に設定する。前述のように、 《2は 1+ δ (% ( )と等しぐ j81は、 u ( )に等
2k 2k 2k+ 1 しいからである。
(ステップ S 1215)コレスキー分解部 31は、カウンタ kを 1だけインクリメントする。
[0177] (ステップ S1216)コレスキー分解部 31は、カウンタ kが mに等しいかどうか判断す る。そして、 mに等しい場合には、一連の処理は終了となり、そうでない場合には、ス
テツプ SI 207に戻る。
[0178] このようにして、 u (0)(l+ 6 (0)u (0))と、 u (0)(l+ 6 (0)u (0))とが算出される
2k+l 2k 2k 2k- 1
ことになる。これらの値は、コレスキー分解部 31が有する図示しないメモリ等において 一時的に記憶されてもよい。
[0179] 図 20は、図 17のフローチャートのステップ S1002の処理の詳細を示すフローチヤ ートである。
(ステップ S1301)コレスキー分解部 31は、 ひ2を1+ δ (+1)u に設定する。なお
0
、前述のように u (+1)=0であるため、 α 2は 1に設定されたことになる。
0
[0180] (ステップ S1302)コレスキー分解部 31は、 β 1を u δ (°)u δ (+1
1 0
u に設定する。ここで、 u (0) (1+ δ (0)u (0))の値としては、ステップ S1205で算
0 1 0
出したものを用いる。なお、前述のように u (+1)=0である。また、この β 1の式に stdL
0
Vv変換を実行すると、 β 1は、 u に設定されたことになる。
[0181] (ステップ S1303)コレスキー分解部 31は、カウンタ kを「1」に設定する。
(ステップ S1304)コレスキー分解部 31は、 α 1を |81 + 1Z δ に設定する。
[0182] (ステップ S1305)コレスキー分解部 31は、 α 1の絶対値が εよりも大きいかどうか 判断する。そして、大きい場合には、ステップ S1306に進み、そうでない場合には、 図 16のフローチャートの Procedure2(ステップ S904)〖こ進む。なお、このステップ S 1305で行っている処理は、ステップ S1203の処理と同様に、桁落ちが発生する可 能性について判断する処理である。 a 1の絶対値が εよりも大きくない場合には、桁 落ちの発生する可能性があると判断されることになる。
[0183] (ステップ S1306)コレスキー分解部 31は、 j82を u δ ( )u ( ))Ζα1に
2k 2k- 1
設定する。ここで、 u (0)(1+ δ (0)u (0))の値としては、ステップ S1210で算出した
2k 2k- 1
ものを用いる。また、この 132の式に stdLVv変換を実行すると、 β 2は、 δ (+1)u
2k に設定されたことになる。
[0184] (ステップ S1307)コレスキー分解部 31は、 α 1 X α2を算出する。前述のように、 a
1は ι81 + 1/δ (+1)=ιι (+1) + 1/δ (+1)に等しぐ ひ 2は l+ S (+1)u に等
2k- 1 2k- 2 しいため、 α IXひ2に逆ミウラ変換を実行すると q に等しくなる。したがって、コレ k
スキー分解部 31は、 《IXひ2を算出して q に設定する。
[0185] (ステップ S1308)コレスキー分解部 31は、 0;2を1 + β 2に設定する。前述のように 、 j8 2は S (+1)u と等しいため、 ひ2は 1 + δ (+1)u (+1)となる。したがって、 0;2に
2k 2k
おける kの値を 1だけインクリメントしたことになる。
[0186] (ステップ S1309)コレスキー分解部 31は、 α 2の絶対値力 S εよりも大きい力どう力 判断する。そして、大きい場合には、ステップ S1310に進み、そうでない場合には、 図 16のフローチャートの Procedure2 (ステップ S904)〖こ進む。なお、このステップ S 1309で行っている処理は、ステップ S1203の処理と同様に、桁落ちが発生する可 能性について判断する処理である。 α 2の絶対値が εよりも大きくない場合には、桁 落ちの発生する可能性があると判断されることになる。
[0187] (ステップ S1310)コレスキー分解部 31は、 j8 1 X j8 2を算出する。前述のように、 β 1は u に等しく、 2は S (+1)u と等しいため、 |8 1 Χ |8 2に逆ミウラ変換を
2k- 1 2k
実行すると、 e に等しくなる。したがって、コレスキー分解部 31は、 β Ι Χ β 2を算
k
出して e に設定する。
k
[0188] (ステップ S1311)コレスキー分解部 31は、 |8 1を u (0) (1 + δ (0)u (0)) / α 2に
2k+l 2k
設定する。ここで、 u (0) (1 + δ (0)u の値としては、ステップ S1214で算出した
2k+l 2k
ものを用いる。また、この β 1の式に stdLVv変換を実行すると、 |8 1は、 u に
2k+l 設定されたことになる。したがって、 13 1における kの値を 1だけインクリメントしたことに なる。
[0189] (ステップ S1312)コレスキー分解部 31は、カウンタ kを 1だけインクリメントする。
(ステップ S1313)コレスキー分解部 31は、カウンタ kが mに等しいかどうか判断す る。そして、 mに等しい場合には、ステップ S1314に進み、そうでない場合には、ステ ップ S 1304に戻る。
[0190] (ステップ S1314)コレスキー分解部 31は、 α 2 X ( 1 + ΐΖ δ を算出する。こ れ ίま、ステップ S 1304で a 1を更新した後に、ステップ S1307で α Ι Χ α 2を計算す ることと等しい。したがって、コレスキー分解部 31は、 《2 Χ ( l + ΐΖ δ を算出 して q に設定する。このようにして、ミウラ変換された結果に stdLVv変換と、逆ミゥ ラ変換とを実行して、 q (+1)、 e を算出する処理が終了する。これらの値は、コレス
k k
キー分解部 31が有する図示しな 、メモリ等にぉ 、て一時的に記憶されてもょ 、。
[0191] 図 21は、図 18のフローチャートのステップ SI 102の処理の詳細を示すフローチヤ ートである。
(ステップ S1401)コレスキー分解部 31は、 131を u (0)(1+ δ (。)u (。))
2m- 1 2m- 2 Z(1
+ δ (_1)u に設定する。ここで、 u (0)(l+ 6 (0)u (0))の値としては、ステ
2m 2m- 1 2m- 2
ップ S1214で算出したものを用いる。なお、前述のように u (_1)=0である。また、こ
2m
の 131の式に rdLVv変換を実行すると、 |81は、 u に設定されたことになる。
2m- 1
[0192] (ステップ S1402)コレスキー分解部 31は、カウンタ kを「m— 1」に設定する。
(ステップ S1403)コレスキー分解部 31は、 α 1を |81 + 1Z δ に設定する。
[0193] (ステップ S1404)コレスキー分解部 31は、 α 1の絶対値が εよりも大きいかどうか 判断する。そして、大きい場合には、ステップ S1405に進み、そうでない場合には、 図 16のフローチャートのミウラ変換 (ステップ S901)に戻る。なお、このステップ S 140 4で行っている処理は、ステップ S1203の処理と同様に、桁落ちが発生する可能性 について判断する処理である。 a 1の絶対値が εよりも大きくない場合には、桁落ち の発生する可能性があると判断されることになる。
[0194] (ステップ S1405)コレスキー分解部 31は、 j82を u δ (°)u (°))Ζα1に
2k 2k- 1
設定する。ここで、 u (0)(1+ δ (0)u (0))の値としては、ステップ S1210で算出した
2k 2k- 1
ものを用いる。また、この β 2の式に rdLVv変換を実行すると、 β 2は、 δ (_1)u
2k に設定されたことになる。
[0195] (ステップ S1406)コレスキー分解部 31は、 0;2を1+ β 2に設定する。前述のように 、 j82は S (_1)u と等しいため、 ひ2は 1+ δ (_1)u となる。
2k 2k
[0196] (ステップ S1407)コレスキー分解部 31は、 α 2の絶対値力 S εよりも大きい力どう力 判断する。そして、大きい場合には、ステップ S1408に進み、そうでない場合には、 図 16のフローチャートのミウラ変換 (ステップ S901)に戻る。なお、このステップ S 140 7で行っている処理は、ステップ S1203の処理と同様に、桁落ちが発生する可能性 について判断する処理である。 《2の絶対値が εよりも大きくない場合には、桁落ち の発生する可能性があると判断されることになる。
[0197] (ステップ S1408)コレスキー分解部 31は、 α 1 X α2を算出する。前述のように、 a
1は ι81 + 1/δ (_1)=ιι (_1) + 1/δ (_1)に等しぐ ひ 2は 1+ S (_1)u に等し
いため、ひ 1 X ひ 2に逆ミウラ変換を実行すると q に等しくなる。したがって、コ k+1
レスキー分解部 31は、 α 1 Χ α 2を算出して q に設定する。
k+1
[0198] (ステップ S1409)コレスキー分解部 31は、 β 1を u (0) (1 + δ (0)u (0)) / α 2
2k- 1 2k- 2 に設定する。ここで、 u (0) (1 + δ (0)u (°))の値としては、ステップ S1205, S12
2k- 1 2k- 2
14で算出したものを用いる。また、この j8 1の式に stdLVv変換を実行すると、 1は 、 u に設定されたことになる。したがって、 13 1における kの値を 1だけデクリメン
2k- 1
卜したこと〖こなる。
[0199] (ステップ S1410)コレスキー分解部 31は、 j8 1 X j8 2を算出する。前述のように、 β
1は u 卜1)に等しく、 13 2は δ (_1)u と等しいため、 I X 2に逆ミウラ変換を
2k- 1 2k
実行すると、 e に等しくなる。したがって、コレスキー分解部 31は、 β Ι Χ β 2を算 k
出して e に設定する。
k
[0200] (ステップ S1411)コレスキー分解部 31は、カウンタ kを 1だけデクリメントする。
(ステップ S1412)コレスキー分解部 31は、カウンタ kが 0に等しいかどうか判断する 。そして、 0に等しい場合には、ステップ S 1413に進み、そうでない場合には、ステツ プ S 1403に戻る。
[0201] (ステップ S1413)コレスキー分解部 31は、 1 + ΐΖ δ を算出する。これは、ス テツプ S1403で a 1を更新した後に、ステップ S1408で α Ι Χ α 2を計算することと 等しい。この場合、 α 2は 1だ力もである。したがって、コレスキー分解部 31は、 |8 1 + 1/ δ を算出して q に設定する。このようにして、ミウラ変換された結果に rdL Vv変換と、逆ミウラ変換とを実行して、 q (_1)、 e を算出する処理が終了する。こ k k
れらの値は、コレスキー分解部 31が有する図示しないメモリ等において一時的に記 憶されてもよい。
[0202] なお、図 16のフローチャートの処理によって算出することができるのは 1個の固有 値に対応する固有ベクトルであるため、全ての固有値に対応する固有ベクトルを算出 する場合には、コレスキー分解部 31は、図 16のフローチャートの処理を固有値の数 だけ繰り返すことになる。
[0203] メモリ消費を抑えるために、補助変数 u (n)のための配列は必ずしも用意する必要は k
ない。一方、 1 + δ (G)u(G)のためのメモリ領域を確保し、ミウラ変換、 dLVv型変換、逆
ミウラ変換のステップにまたがつてこの値を利用することで、メモリ消費を抑え、計算 量を低減することができる。これにより、誤差も低減される。
[0204] ここで、誤差について説明する。人間が理想的な状況、すなわち、無限桁の計算を いくらでもできるとすると、 qd型ツイスト分解法であっても、 LV型ツイスト分解法であつ ても問題ない。しかしながら、コンピュータで計算を行う場合は注意が必要である。有 限桁の計算し力、行えないコンピュータ上では、数学的に正しい計算法を使ったとして も必ずしも正しい結果が得られる訳ではない。そればかりか、いつまでたっても計算 が終了しないといった思わぬ数値的な問題が発生する場合もある。
[0205] コンピュータ計算による誤差には、丸め誤差及び桁落ちによる誤差などが知られて いる。丸め誤差単独では、高々有効桁の最後の桁が真値と比べて異なる程度で大き な誤差にはならない。また、指数部が異なる 2つの実数の加算、乗算、除算の少なく とも 1つの演算を行えばやはり丸め誤差が生じるが、それ以上の誤差は発生しな 、。 さらに、このような丸め誤差を発生するような操作が繰り返されても、丸めモードが nea r (四捨五入)ならば、一方的に切り上げられたり、あるいは切り捨てられたりして誤差 が極端に蓄積することは少ない。よって、多くの数値計算法は加算、乗算、除算の少 なくとも 1つの演算によって発生する丸め誤差を特別注意することは少なぐ適切な 固有値計算でも結果的に丸め誤差は一様に増大しない。
[0206] 問題となるのは、同符号の実数の減算及び異符号の実数の加算により生じる、桁 落ちである。桁落ちによる誤差で値が 0となった後、その値による除算を行うと、 0が分 母にくるような不定形となり計算不可能となる。こうなるといつまでたつても計算が終了 しない。減算→除算と計算する部分が qd型ツイスト分解法、 LV型ツイスト分解法の 両方に存在するので、桁落ち誤差には十分に注意する必要がある。
[0207] LV型ツイスト分解法では、上述の桁落ちによる誤差を含んでいるかどうかは減算に よって得られた値が小さいかどうかで判断できる。 qd型ツイスト分解法の場合、桁落 ち誤差を含むことが分力つたとしても、それを回避することはできない。なぜならば、 初期値として {q (0), e (° が与えられると、 λは一意的に決定され、 {q e
k k j k k も一意的に導出されるためである。すなわち、任意パラメータを持たない自由度のな V、計算法であるためである。
[0208] それに対して、 LV型ツイスト分解法は、自由に設定できるパラメータ δ (0)を持った め、補助変数 u (η)の値を様々に変化させることができる(図 22参照)。すなわち、様 k
々な経路で {q (±1), e (±1)}を計算することができる。よって、桁落ちが発生する場合 k k
も回避できる。図 19〜図 21の条件判定によって桁落ちの影響をチェックし、減算に よって得られた値の絶対値力 、さな数 εより大きいという条件が満たされなければ、 ノ ラメータ δ (G)の設定に戻るというものである。この処理は、条件が満たされるまで繰 り返される。なお、精度よりも高速性を重視する場合は、数回条件が満たさなければ( q (+1)=0あるいは q (_1)=0ならば)、例外処理を行ってもよい。
k k
[0209] なお、前述の行列 Tの各要素と、行列 B(G)の各要素との対応を示す式を用いると、 q d型変換を次のように書き換えることもできる。
[数 64]
q d型変換: - ^
[0210] この変換は、さらに stqds変換
[数 65]
q( l +e^=tu_1- J, k = U
E0
及び rpqds変換
[数 66]
r p q d s変換: {t2t i, }
+e x ~^j-> k = l,2,...,m,
に分けられる。このように、 {t , t }から {q (±1), e (±1)}を求める場合には、 {t
2k- 1 2k k k 2k- 1
, t }から {q (。), e (。)}を求め、さらに q (。), e (。)}から {q (土 e (±1)}を求める場合に
2k k k k k k k
比べて、計算量が少なくなることとなり、計算速度を向上させることも可能である。
[0211] なお、この場合には、対角行列 Tの各要素について直接 qd型変換が行われること になる。したがって、この変換が、「対角行列 Tの各要素に関して qd型変換を行う」場
合に含まれることは言うまでもな 、。
[0212] また、 qd型変換と同様に、前述の行列 Tの各要素と、行列 Β(ωの各要素との対応を 示す式を用いると、 LV型変換におけるミウラ変換を次のように書き換えることもできる
[数 67] ミウラ変換: {υ^ ί"^,^)}
s t d L V v変換: ) u[+1)
r d L V v変換: 。)
[0213] この場合のミウラ変換は、次のように示される。
[数 68] t =^(1+5 (。) — 2 XI + δ ( ) + δ (。) 3 )— 2 k = l,2,.,m
≡ ο,
ただし、 Swは任意である。
このように、 {t , t in (0), u (。)}を求める場合には、 {t , 1; }から (
2k- 1 2k 2k- 1 2k 2k- 1 2k k o), e (。)}を求め、さらに q ), e (。)}から {u (0), u (。)}を求める場合に比べて、計 k k k 2k- 1 2k
算量が少なくなることとなり、計算速度を向上させることも可能である。
[0214] なお、この場合には、対角行列 Tの各要素について直接 LV型変換が行われること になる。したがって、この変換が、「対角行列 Tの各要素に関して LV型変換を行う」場 合に含まれることは言うまでもな 、。
[0215] qd型ツイスト分解法あるいは LV型ツイスト分解法によってコレスキー分解をすること ができると、上述のようにツイストされた行列 Nを算出することができ、その行列 Nの k k
N Tx =eを解くことによって、 χを算出することができる。ここで、
k j k j
[数 69]
INI
と Xを置き換えることにより、この Xを正規ィ匕する。このようにして、固有ベクトル Xを求
めること力できる。この固有べク卜ノレ Xを用!/、て、 Q = (x , X , ... , X )とすることにより j T 1 2 m
、直交行列 Qを算出することができる。
T
[0216] したがって、次式のように対称 3重対角行列 Tについて固有値分解が行われたこと になる。
[数 70]
T = QTDTQ
[0217] また、対称 3重対角行列 Tの固有値分解を行うことができれば、次のように、対称行 列 Aの固有値分解も行われる。
[数 71]
Α = ΡΤΡΊ
= P{QTDTQT T )PT
= (PQT )DT (PQT
[0218] 固有ベクトル算出部 19は、上述のようにして、固有値記憶部 18が記憶している対 称 3重対角行列 Tの固有値と、対角行列記憶部 13が記憶している対称 3重対角行列 Tとを用いて、対称 3重対角行列 Tの固有ベクトルを算出する。まず、コレスキー分解 部 31は、対角行列記憶部 13から対称 3重対角行列 Tを読み出し、固有値記憶部 18 から対称 3重対角行列 Tの固有値を読み出す。そして、コレスキー分解部 31は、図 2 3のフローチャートで示されるように各変換を行い、コレスキー分解の処理を行う。ここ では、 LV型ツイスト分解法を用いる場合にっ 、て説明する。
[0219] コレスキー分解部 31は、まず、対称 3重対角行列 Tの各要素の値から、 q (0), e (0) k k を求める。そして、コレスキー分解部 31は、ミウラ変換を実行することにより、 u (0), u (
1 2 ω等を順次求めていく(ステップ S1501)。
[0220] 次に、コレスキー分解部 31は、ミウラ変換で得られた u (ωを用いて、 stdLVv変換を k
実行することにより、 u 等を順次求めていく(ステップ S1502)。また、コレスキー 分解部 31は、ミウラ変換で得られた u ((>)を用いて、 rdLVv変換を実行することにより k
、 u 卜 υ等を順次求めていく(ステップ S1503)。
2m- 1
[0221] 最後に、コレスキー分解部 31は、 stdLVv変換で得られた u 及び rdLVv変換で
得られた u を用いて、逆ミウラ変換を実行することにより、 q (±1)、 e (±1)等を順次 k 1 1
求めていく(ステップ SI 504)。 q (±1)及び e (±1)が求まると、すなわち、上 2重対角行 k k
列 B(+1)と、下 2重対角行列 B(_1)が求まると、コレスキー分解部 31は、それらをべタト ル算出部 32に渡す。なお、コレスキー分解部 31は、各固有値について、それぞれコ レスキー分解を行うものとする。
[0222] なお、ここでは、説明の便宜上、図 23のフローチャートを用いてコレスキー分解の 処理を説明したが、図 16〜図 21のフローチャートで示されるように処理を行ってもよ いことは言うまでもない。
[0223] ベクトル算出部 32は、固有値記憶部 18から固有値を読み出し、式 5を用いて kの値 を決定する。ベクトル算出部 32は、その kの値を用いて、 q (±1)及び e (±1)からツイスト k k
行列 Nを求め、 N Tx =eを解くことによって、 Xを算出する(ステップ S802)。
k k j k j
[0224] 次に、ベクトル算出部 32は、算出した Xを正規ィ匕して、固有ベクトル Xを求めて固有 ベクトル記憶部 20に蓄積する (ステップ S803)。なお、ベクトル算出部 32は、各固有 値について、 Xを算出する処理と、正規ィ匕する処理とを行うことによって、全ての固有 ベクトルを算出することができる。このようにして、固有ベクトルの算出が終了する。 この後、行列記憶部 11が記憶して 、る対称行列 Aの固有ベクトルを算出してもよ!/ヽ 。その算出の方法は、前述の通りである。
[0225] また、固有値算出部 17が算出した固有値、固有ベクトル算出部 19が算出した固有 ベクトルを出力する図示しない出力部を固有値分解装置 1が備えてもよい。ここで、 図示しない出力部による出力は、例えば、固有値等の表示デバイス (例えば、 CRT や液晶ディスプレイなど)への表示でもよぐ固有値等の所定の機器への通信回線を 介した送信でもよぐ固有値等のプリンタによる印刷でもよぐ固有値等の記録媒体へ の蓄積でもよい。なお、その出力部は、出力を行うデバイス (例えば、表示デバイスや プリンタなど)を含んでもよぐあるいは含まなくてもよい。また、その出力部は、ハード ウェアによって実現されてもよぐあるいは、それらのデバイスを駆動するドライバ等の ソフトウェアによって実現されてもよい。
[0226] なお、ここでは、コレスキー分解部 31が LV型ツイスト分解法によってコレスキー分 解を行う場合について説明したが、コレスキー分解部 31は、 qd型ツイスト分解法によ
つてコレスキー分解を行ってもよい。例えば、コレスキー分解部 31は、算出された固 有値の分布を見て、分布が密でない場合には、 qd型ツイスト分解法を用いるようにし てもよい。
[0227] また、上記説明では、行列 Bto)が上 2重対角行列である場合について説明したが、 行列 B(C>)は下 2重対角行列であっても固有値分解を同様に実行することができうる。 ただし、行列 Tの各要素と、行列 B(G)の各要素との対応を示す式が上述のものと異な ることになる。
[0228] また、上記説明では、固有値算出部 17が全ての固有値を算出する場合について 説明したが、一部の固有値のみを算出するようにしてもよい。例えば、図 9において、 固有値算出部 17は、行列 Τ , Tまでは、全ての固有値を算出する必要があるが、行
1 2
列 Τ , Tから対称 3重対角行列 Tの固有値を算出する際に、必要な範囲で固有値を
1 2
算出してもよい。したがって、固有値算出部 17は、対称 3重対角行列 Tの少なくとも 1 個の固有値を算出するものであってもよい。その場合には、不必要な固有値を算出 することに伴う余分な処理を実行しなくてよいため、処理負荷を軽減することができう る。このように、一部の固有値のみを算出する場合には、例えば、対称 3重対角行列 Tの固有値を算出する処理に費やす計算時間を約(1 +kZm) Z2倍にすることがで きうる。ここで、 mは行列サイズであり、 kは求める固有値の個数である。
[0229] また、上記説明では、固有ベクトル算出部 19が算出された固有値に対応する全て の固有ベクトルを算出する場合について説明したが、上記説明から明らかなように、 固有ベクトルを算出する処理は、固有値ごとに行うことができる。したがって、固有べ タトル算出部 19は、対称 3重対角行列 Tの少なくとも 1個の固有ベクトルを算出するも のであってもよい。このように、固有ベクトル算出部 19は、必要な範囲で固有ベクトル を算出することができ、不必要な固有ベクトルを算出することに伴う余分な処理を実 行しなくてよいため、処理負荷を軽減することができうる。
[0230] 次に、本実施の形態による固有値分解装置 1における並列処理について説明する 本実施の形態による固有値分解装置 1では、固有値の計算及び固有ベクトルの計 算において、並列的に処理を実行することができる。例えば、図 24〜図 26で示され
るように、固有値分解装置 1において、固有値分解部 15、固有値算出部 17、コレス キー分解部 22、ベクトル算出部 23,コレスキー分解部 31、ベクトル算出部 32におい て、それぞれ並列処理を行ってもよい。
[0231] 固有値分解部 15は、複数の固有値分解手段 15a、 15bを備え、その複数の固有 値分解手段 15a、 15bが、分割後の対称 3重対角行列の固有値と、行列要素とを算 出する処理を並列実行してもよい。例えば、図 9において、固有値分解手段 15aが行 列 Τ , Τ , Τ , Τ の固有値分解を実行し、固有値分解手段 15bが行列 Τ ,
111 112 121 121 211 τ 。
212 , τ の固有値分解を実行してもよい
221 , τ 222
[0232] 固有値算出部 17は、複数の固有値算出手段 17a、 17bを備え、その複数の固有 値算出手段 17a、 17bが、分割元の対称 3重対角行列の固有値と、行列要素とを算 出する処理を並列実行してもよい。例えば、図 9において、固有値算出手段 17aが行 列 Τ , Τ , Τ , Tの固有値等を算出する処理を実行し、固有値算出手段 17bが行
11 12 1
列 τ , τ , Tの固有値等を算出する処理を実行してもよい。
21 22 2
[0233] コレスキー分解部 22は、複数のコレスキー分解手段 22a、 22bを備え、その複数の コレスキー分解手段 22a、 22bが、対称 3重対角行列 Tに関してコレスキー分解する 処理を並列実行してもよい。例えば、コレスキー分解手段 22aが半分の固有値につ いてコレスキー分解する処理を実行し、コレスキー分解手段 22bが残りの半分の固有 値にっ 、てコレスキー分解する処理を実行してもよ 、。
[0234] ベクトル算出部 23は、複数のベクトル算出手段 23a、 23bを備え、その複数のベタト ル算出手段 23a、 23bが、固有ベクトルを算出する処理を並列実行してもよい。例え ば、ベクトル算出手段 23aがコレスキー分解手段 22aによってコレスキー分解された 固有値に関して固有ベクトルを算出する処理を実行し、ベクトル算出手段 23bがコレ スキー分解手段 22bによってコレスキー分解された固有値に関して固有ベクトルを算 出する処理を実行してもよ ヽ。
[0235] コレスキー分解部 31が複数のコレスキー分解手段 31a、 31bを備えて、対称 3重対 角行列 Tに関してコレスキー分解する処理を並列実行してもよいことは、コレスキー分 解部 22と同様である。
[0236] ベクトル算出部 32が複数のベクトル算出手段 32a、 32bを備えて、固有ベクトルを
算出する処理を並列実行してもよいことは、ベクトル算出部 23と同様である。
[0237] なお、固有値算出部 17の複数の固有値算出手段 17a、 17bは、図 6で示される分 割された 2個の行列 Τ , Tの固有値と行列要素とから、分割元の行列 Tの固有値と
1 2 0
行列要素とを算出する処理を、並列実行してもよい。以下、その処理について説明 する。
[0238] まず、式 1から、各固有値を求める処理については、並列実行可能なことがわかる。
例えば、固有値算出手段 17aが半分の固有値を算出し、固有値算出手段 17bが残り の半分の固有値を算出してもよい。なお、固有値算出手段 17a、 17bのそれぞれは、 行列 D と、ベクトル zとの各成分の値を有するものとする。
12
[0239] また、式 2から、各固有ベクトル qを求める処理についても、並列実行可能なことが わかる。例えば、固有値算出手段 17aは、算出した固有値に対応する半分の固有べ タトル qを算出し、固有値算出手段 17bは、算出した固有値に対応する残りの半分の 固有ベクトル qを算出してもよい。
[0240] また、式 3,式 4から、 f、 1を求める処理にっ 、ても、並列実行可能なことがわかる。
例えば、固有値算出手段 17aは、算出した固有ベクトル qを用いて、 f、 1の一部の要 素を算出し、固有値算出手段 17bは、算出した固有ベクトル αを用いて、 f、 1の残りの 要素を算出してもよい。その後、固有値算出手段 17a、あるいは固有値算出手段 17 bが、固有値算出手段 17a、 17bの算出した f、 1の各要素を統合することによって、式 3,式 4で示される f、 1を算出することができる。
[0241] ここでは、 zの成分に 0が含まれず、 D の対角成分に同じ値が含まれない場合にお
12
ける固有値算出手段 17a、 17bの処理について説明した力 zの成分に 0が含まれる 場合、 D の対角成分に同じ値が含まれる場合であっても、固有方程式を解く処理、
12
固有ベクトル ^を算出する処理、固有ベクトル力 分割元の行列の行列要素を算出 する処理を同様に並列実行することができうる。
[0242] 上記のような各構成要素における並列処理において、各手段が固有値等の情報を 格納するメモリを用いる場合に、複数の手段が同一のメモリ、すなわち共有メモリを使 用してもよぐあるいは、各手段がそれぞれ別のメモリを使用してもよい。
[0243] なお、図 24〜図 26を用いて、固有値分解部 15や固有値算出部 17等が 2個の手
段によって並列処理を実行する場合について説明したが、固有値分解部 15や固有 値算出部 17等が 3以上の手段を備え、並列処理を実行してもよい。また、固有値分 解部 15、固有値算出部 17、コレスキー分解部 22、ベクトル算出部 23,コレスキー分 解部 31、ベクトル算出部 32のそれぞれにおいて並列処理が実行される場合につい て説明したが、いずれかの任意の 1以上の部において、並列処理が実行されなくても よい。例えば、固有値分解部 15において並列処理が行われなくてもよい。
[0244] また、その並列処理は、 1の装置において、 2以上の CPU等を用いて実行されても よぐ 2以上の装置において実行されてもよい。例えば、図 27で示されるように、装置 Aと、装置 Bとがそれぞれ固有値分解手段 15a、 15bを備え、各装置において、固有 値分解の処理が並列実行されてもよい。この場合には、装置 Aの固有値分解手段 1 5aを備える固有値分解部 15—1と、装置 Bの固有値分解手段 15bを備える固有値分 解部 15— 2とによって固有値分解部 15が構成されることになる。したがって、固有値 分解装置 1は、装置 Aと、装置 Bとからなるシステムを構成することになる。ここでは、 固有値分解部 15の並列処理にっ 、て説明したが、その他の固有値算出部 17ゃコ レスキー分解部 22等についても、 2以上の装置による並列処理を行ってもよい。
[0245] 次に、数値実験による性能の評価について説明する。ここでは、本実施の形態によ る固有値分解装置 1の方法 (DDC)と、標準的な分割統治法 (DC)と、 QR法 (QR)と 、二分法と逆反復法とを組み合わせた方法 (B&I)とを比較した。なお、本実施の形態 による固有値分解装置 1の方法では、コレスキー分解を qd型ツイスト分解法で行い、 逆反復(図 12のステップ S701参照)を 1回用いた。分割統治法としては、 LAPACK で提供されている DSTEDCを用いた。 QR法としては、 LAPACKで提供されている DSTEQRを用いた。二分法と逆反復法とを組み合わせた方法としては、 LAPACK で提供されて 、る DSTEVRのソースコードを一部変更したものを用いた。実験で用 いる LAPACKは BLAS (Basic Linear Algebra Subprograms)を呼び出す。 また、本実施の形態による固有値分解装置 1の固有値分解部 15では、 QR法を用い て固有値分解を行った。また、この数値実験では、ランダムに与えた対角行列を、ラ ンチヨス法を用いて対称 3重対角化した行列を用いた。数値実験結果のグラフにお いて、横軸は、数値実験で用いた行列の大きさである。
[0246] 図 28は、計算の実行時間を示す図である。実行時間が短いほど、高速に計算でき ることになる。図 28の数値実験結果のグラフからわ力るように、本実施の形態による 固有値分解装置 1の方法では、他の方法に比べて高速に固有値分解を行うことがで さることがゎカゝる。
[0247] 図 29は、算出された固有ベクトルの直交性を示す図である。値の小さい方力 直交 性が高いことになる。図 29の数値実験結果のグラフからわ力るように、本実施の形態 による固有値分解装置 1の方法では、他の方法に比べて、固有ベクトルの直交性は 高くない。本実施の形態による固有値分解装置 1の方法では、二分法と逆反復法と を組み合わせた方法と同程度の直交性を有することがわかる。これは、固有値をまず 算出し、その後に、固有ベクトルを算出していることに起因していると考えられる。
[0248] 図 30は、全固有値の相対誤差の総和を示す図である。値の小さい方が、誤差が小 さぐ精度が高いことになる。図 30の数値実験結果のグラフからわ力るように、本実施 の形態による固有値分解装置 1の方法では、他の方法に比べて固有値の精度が高 いことがわかる。分割統治法により算出した固有値と同程度の固有値の精度を有す る。本実施の形態による固有値分解装置 1の方法では、分割統治法によって固有値 を算出しているため、当然の結果であると考えられる。
[0249] 図 31は、前固有ベクトルの誤差の総和を示す図である。値の小さい方力 誤差が 小さぐ精度が高いことになる。図 31の数値実験結果のグラフからわ力るように、本実 施の形態による固有値分解装置 1の方法では、他の方法に比べて固有ベクトルの精 度が高いことがわかる。
[0250] このように、本実施の形態による固有値分解装置 1の方法では、高速に固有値分解 をすることができ、さらに、固有値、固有ベクトルの精度の高いことがわかる。また、前 述のように、並列性にも優れているため、並列処理を行うことによってさらに高速ィ匕を 図ることも可能である。
[0251] [主成分分析による顔画像認識]
次に、主成分分析による顔画像認識に固有値分解を応用する場合について説明 する。
[0252] 主成分分析による顔画像認識の処理は、以下の各ステップによって行われる。
(1)射影行列の作成
(2)個人の顔画像に関する情報の登録
(3)入力された顔画像と、登録されている個人の顔画像に関する情報とを比較するこ とによる認識
[0253] まず、上記(1)の射影行列の作成について説明する。
種々の人物の顔画像データを用意する。その顔画像データは、例えば、スキャナ やデジタルスチルカメラ、デジタルビデオカメラ等の光学的読み取り機器によって読 み取られた 2次元画像データであってもよい。各顔画像データは、各画素値を成分と するベクトルで表示することができる。そのベクトルを、次のようにする。ここでは、 M 個の顔画像データを扱うものとする。
[数 72]
Λ1 ' X2 ' ' M
[0254] 次に、その顔画像データのベクトルの平均値 を算出する。
[数 73]
Μ
[0255] その算出した; zを用いて、共分散行列 Cを次のように算出する。
[数 74]
M M
C = ∑∑( - - ) τ
[0256] その後、上述の固有値分解装置 1によって、その行列 Cに対して、固有値分解を行 う。すなわち、行列記憶部 11に行列 Cを蓄積し、その行列 Cに対して対角化や、行列 の分割等の処理を行うことによって、固有値分解を行う。その固有値分解された結果 である固有値えは、固有値記憶部 18に蓄積されることになる。また、固有値分解さ れた結果である固有ベクトル Vは、固有ベクトル記憶部 20で記憶されて 、る固有べク トルに対して、対角化で用いた直交行列を作用させることによって、前述のようにして 求めることができる。なお、添字 jは、固有値の降順になるように設定されているものと する。すなわち、固有値え が最大の固有値となる。
[0257] その求めた固有ベクトルのうち、対応する固有値が上位から d個の固有ベクトルを 用いて、射影行列 r?を次のように算出する。
[数 75]
= (v^ v, , - - - ^, )
[0258] 次に、上記(2)の個人の顔画像に関する情報の登録について説明する。
各個人について、 m個の顔画像データ
[数 76]
を用意する。ここで、添字 kは、個人を識別するための添字である。そのベクトルに射 影行列 7?をそれぞれ掛けることにより、次式のようにして m個の d次元ベクトル ξを算 出し、その平均値 算出する。そして、その平均値/ を登録しておく。
[数 77]
i = η i = l,2, " ', m
1
=丄∑
[0259] 次に、上記(3)の入力された顔画像と、登録されている個人の顔画像に関する情報 とを比較することによる認識について説明する。
ある人物の顔画像データのベクトル Xが入力されたとする。すると、その顔画像デー タのベクトル Xに射影行列 7?を掛けることにより、 d次元ベクトル を算出する。
[数 78]
[0260] 次に、その d次元ベクトル ξと、各個人の d次元ベクトル ξの平均値 kとの差のノ ルムを計算する。
[数 79]
I - <
[0261] そのノルムがあら力じめ設定されて ヽるしき 、値より小さ ヽ場合に、入力された顔画 像力 添字 kで識別される個人の顔画像であると判断してもよい。あるいは、すべての 添字 kについて上記のノルムを計算し、入力された顔画像が、最小のノルムに対応す
る添字 kで識別される個人の顔画像であると判断してもよい。このようにして、固有値 分解装置 1を用いて、主成分分析による顔画像認識を行うことができうる。
[0262] [2次元画像から 3次元へ復元する画像処理への応用]
次に、物体の 2次元画像から 3次元へ復元する画像処理に固有値分解を応用する 場合について説明する。
[0263] 複数の 2次元画像から 3次元復元を行う処理は、以下の各ステップによって行われ る。
(1) 2次元画像力 特徴点を抽出するステップ。
(2)特徴点データより形状 (元の物体の特徴点の 3次元座標データ)及び回転(3次 元データ力 特徴点データへの変換)に関するデータを計算するステップ。
(3)形状及び回転のデータより可視化を行うステップ。
[0264] 以下、上記(1)、(2)の各ステップについて、図 32のフローチャートを用いて説明す る。ここで、 2次元画像は、例えば、スキャナやデジタルスチルカメラ、デジタルビデオ カメラ等の光学的読み取り機器によって読み取られた 2次元画像であってもよい。
[0265] ステップ S5001において、 2次元画像; j (j = l, · · · , m、 mは 3以上の整数)から特 徴点 i (i= l, · · · , n、nは 2以上の整数)の座標 (xj, yj)を抽出する。取り扱う 2次元 画像は、弱中心射影画像であることが好ましい。このとき、次の式が成り立つ。
[0266] ここで、 sは物体のスケールに相対する j番目の画像のスケール、 r , r はそれぞ
j l, j 2, j
れ物体座標系に相対する j番目のカメラ座標系の回転行列の 1番目と 2番目の行べク トル、(Xi, Yi, Zi) 番目の点の 3次元座標である。物体のスケールは 1番目の画 像のスケールと同じにし (s = 1)、物体の座標系の姿勢は 1番目の画像のカメラ座標 系と同じにする (r = (1, 0, 0)T, r = (0, 1, 0)T)。 m枚全ての画像における η個 全ての点の座標を行列 Dの要素として並べると、次式のようになる。
[0267] [数 81]
D = MS
{ 1
ただし、 D = y{
[0268] Mと Sの形から分かるように、 Dのランクは 3である。ここで、ステップ S5001において
、行列 Dが与えられている。以下、回転に関するデータ M及び形状 Sを求める。
[0269] そこで、行列 Dの特異値分解
D = U∑VT
を考える。ここで、∑は特異値を大小順に対角線上に並べたもので、 U及び Vはそれ ぞれ左直交行列、及び右直交行列である。この特異値分解において、前述の固有 値分解を用いることができる。すなわち、固有値分解装置 1において、行列記憶部 11 が記憶している対称行列 Aを、 DTDとすることにより、前述の説明のようにして、対称 行列 Aの固有値分解がなされることになる。なお、固有値分解装置 1において、固有 ベクトル記憶部 20に蓄積されるのは、対称行列 DTDを変換した対称 3重対角行列 T の固有ベクトルであるので、その固有ベクトルを、前述の説明のようにして、行列 DTD の固有ベクトルに変換する必要がある。また、その行列 DTDの各固有値の 1Z2乗( 平方根)が各特異値となる。すなわち、特異値 σ = ( λ ) 1/2となる。また、固有べタト ルと、右直交行列 Vの各列を構成する右特異ベクトル Xとは等しいため、固有べタト
j
ルを各列に有する行列力 右直交行列 Vとなる。なお、特異値 σ力^でない場合に は、左直交行列 Uの各列を構成する左特異ベクトル yを次のようにして求めることが できる。
[0270] [数 82]
となる。一方、特異値 σ力^である場合には、
[数 83]
が = 0 を解くことにより、 yを算出することができる。ここで、次の置き換えを行うことによって、 左特異ベクトル yを正規化する。
[0271] このようにして、左特異ベクトル yを求めることができ、この左特異ベクトル yを用い j ] て、 U= (y , y , · ··, y )とすることにより、左直交行列 Uを算出することができる。
[0272] ここで、画像のデジタル誤差のため、ゼロでな!、特異値は 3つ以上出てくる。しかし 、 4番目以降の特異値はノイズによるもので、最初の 3つの特異値と比べて格段に小 さい。そこで、ステップ S5002では、最初の 3つの特異値に対して特異ベクトルを計 算する。すなわち、本実施の形態による固有値分解装置 1では、最初の 3個の固有 値に対して固有ベクトルを計算する。採用する 3個のベクトルをまとめると、次式となる
[0273] D' = L'∑'R'T=M'S'
ただし、 M' =L' (∑') 1/2、 S' = (∑') 1/2R'T、 D'は II D-D' IIを最小にするランク 3 の行列である。
[0274] 次に、 D'から M及び Sを求めたいが、その組合せは唯一ではない。なぜなら、任意 の正則行列じが
D' = (M'C) (C_1S,)
を満たす力もである。そこで、上式における Cを M = M'Cを満たすように決める。 ま 下記の式を満たす。
[0275] E = CC^すると、上式力 Eの 6つの要素に関する 2m+ 1個の線形方程式が得ら れる。 m≥ 3であるので、 Eの要素を一意に決めることができる。ステップ S5003にお いて、行列 Eを求める。
[0276] 次に、ステップ S5004にお!/、て、 Eから Cを求める。じの自由度(9)は Eの自由度(6 )より多い。そこで、条件 = (1, 0, 0)T, r = (0, 1, 0)τを加えれば、 Cを決めること lj ¾
ができる。このとき 2つの解(Necker Reversal)が出る。
次に、ステップ S5005において、 M = M'C及び S = C_1S'より、回転に関するデー タ M及び形状 Sが決まる。
[0277] [文書検索への応用]
次に、文書検索処理に固有値分解を応用する場合について説明する。文書中から その文書の内容に関連する索引語を抽出し、索引語の重みを計算する処理の後、 ベクトル空間モデルでは、この索引語の重みを要素とするベクトルで文書を表現する 。ここで、検索対象となる文書を d , d , · · · , dとし、これら文書集合全体を通して全
1 2 n
部で m個の索引語 w , w , · · · , wがあるとする。このとき、文書 dは、次のようなベタ
1 2 m j
トルで表現されることになる。これを文書ベクトルと呼ぶ。
[数 86]
[0278] ここで、 dは索引語 wの文書 dにおける重みである。また、文書集合全体は、次の ような m X n行列 Dによって表現することができる。
[0279] 行列 Dを索引語文書行列と呼ぶ。索引語文書行列の各列は文書に関する情報を 表している文書ベクトルである力 同様に、索引語文書行列の各行は索引語に関す る情報を表しているべ外ルであり、これを索引語べ外ルと呼ぶ。検索質問も、文書と 同様に、索引語の重みを要素とするベ外ルで表現することができる。検索質問文に 含まれる索引語 wの重みを qとすると、検索質問ベクトル qは次のように表されること になる。
[数 88]
[0280] 実際の文書検索においては、与えられた検索質問文と類似した文書を見つけ出す 必要があるが、検索質問ベクトル qと各文書べ外ル dの間の類似度を計算することに より行う。ベクトル間の類似度の定義としてはさまざまなものが考えられるが、文書検 索にお!、てよく用いられて 、るものはコサイン尺度(2つのベクトルのなす角度)また は内積である。
[0281] [数 89] d , q ∑ '
cos(d q) = (コサイン尺度
' q =∑ (内積 なお、ベクトルの長さが 1に正規ィ匕 (コサイン正規化)されている場合には、コサイン 尺度と内積とは一致する。
図 33は、本実施の形態による固有値分解装置 1を利用した文書検索方法の一例 を示すフローチャートである。
ステップ S6001にお!/、て、質問ベクトル qを受け取る。
[0283] ここでは、 Dの近似行列 Dを使った検索を考える。ベクトル空間モデルでは、検索
k
質問ベクトル qと索引語文書行列 D中の各文書ベクトル dの間の類似度を計算するこ とにより検索を行うが、ここでは Dの代わりに Dを使う。ベクトル空間モデルでは、文
k
書ベクトルの次元数は索引語の総数と等しい。したがって、検索対象となる文書の数 が増えるに従い、文書ベクトルの次元数も増加する傾向にある。しかし、次元数が増 カロしてくると、コンピュータのメモリによる制限や検索時間の増大などの問題が生じて くるばかりでなぐ文書中に含まれる不必要な索引語がノイズ的な影響を及ぼし、検 索精度を低下させてしまうという現象も起こってくる。潜在的意味インデキシング (late nt semantic indexing ; LSI)は、高次元の空間にある文書ベクトルを低次元の空 間へと射影することにより、検索精度の改善を図る技術である。高次元の空間では別 々に扱われていた索引語力 低次元の空間では相互に関連を持ったものとして扱わ れる可能性もあるため、索引語の持つ意味や概念に基づく検索を行うことができる。 たとえば、通常のベクトル空間モデルでは" car"という索引語と" automobile"という 索引語はまったく別物であり、一方の索引語による質問ではもう片方の索引語を含ん だ文書を検索することができない。しかし、低次元の空間ではこれらの意味的に関連 した索引語は 1つの次元に縮退することが期待できるため、 "car"という検索質問によ つて" car"を含む文書ば力りでなぐ automobile"を含む文書をも検索することが可能 となる。潜在的意味インデキシングでは、特異値分解により高次元ベクトルの次元削 減を行うが、これは基本的に多変量解析における主成分分析と等価である。
[0284] ステップ S6002にお!/、て、 kを選択する。ここでは、 k〈rなる kの値を選択する。 r= min (n, m)である。 kの値は、予め与えられていてもよいし、計算ごとに選択可能で あってもよい。
[0285] 次に、ステップ S6003では、行列 Dの特異値分解を行う。この特異値分解として、 前述の 2次元画像から 3次元へ復元する画像処理への応用で説明したように、固有 値分解による方法を用いることができる。すなわち、固有値分解装置 1において、行 列記憶部 11が記憶している対称行列 Aを、このたびの行列 DTDとすることにより、前 述の説明のようにして、対称行列 Aの固有値分解がなされ、その結果として、行列 D
の特異値分解を行うことができうる。なお、この特異値分解では、計算された特異値 のうち、大きい順に 1番目力も k番目までの k個の特異値に対して Dの特異ベクトルを 算出する。すなわち、固有値分解において、計算された固有値のうち、大きい順に 1 番目から k番目までの k個の固有値に対して固有ベクトルを算出し、この固有ベクトル を用いて特異ベクトルを算出すればよい。 kは、ステップ S6002で選択された値であ る。
[0286] すなわち、
D =U∑V T
k k k
なる u及び Vを計算する。ここで、 Uは、最初の k個の左特異ベクトルのみから構成 k k k
される m X k行列であり、 Vは、最初の k個の右特異ベクトルのみから構成される n X
k
k行列であり、∑は、最初の k個の特異値のみ力も構成される k X k対角行列である。
[0287] 次に、ステップ 6004にお 、て、行列 Dと質問ベクトル qとの類似度を計算する。 Vヽ
k
ま、ベクトル eを n次元の単位ベクトルとすると、 Dの j番目の文書ベクトルは D eで表
j k k j すことができる。文書ベクトル D eと検索質問べ外ル qとの間の類似度計算は、
[数 90]
φ ejfo)
としてもよいが、別の定義を用いてもよい。上式では、 Dを U , ∑ , Vから再構成す
k k k k
る必要はなく特異値分解の結果から、直接、類似度を計算できることを示している。 上式の中に現われる∑ V Teは、
k k j
∑ V Te =U TD e
k k j k k j
と書き直すことができる。この式の右辺は、近似行列 Dにおける j番目の文書ベクトル
k
の基底 Uのもとでの座標(文書の k次元表現)を表している。同様に、上式の中の U
k k
Tqは、検索質問ベクトル qの基底 Uのもとでの座標 (検索質問の k次元表現)である。
[0288] ステップ S6005において、ステップ S6004において計算された類似度を基準に、 検索結果を出力する。
このように、本実施の形態による固有値分解装置 1は、画像処理や検索処理等の 種々の処理に対して用いることができうる。なお、上記以外の処理に用いてもよいこと は言うまでもない。
[0289] 以上のように、本実施の形態による固有値分解装置 1では、分割統治法を用いて 固有値のみを算出するため、標準的な分割統治法で実行されるベクトル更新が必要 なくなり、標準的な分割統治法よりも非常に高速である。また、固有値力 固有べタト ルを算出する処理も、高速に処理することができる。さらに、 QR法では固有値を算出 する段階の並列化が困難であるが、本実施の形態による固有値分解装置 1では、固 有値を算出する段階、及び固有値力 固有ベクトルを算出する段階のそれぞれにお いて、本質的に高い並列性を持つ。また、本実施の形態による固有値分解装置 1で は、他の方法と比べて高 、精度の得られることがわかる。
[0290] なお、本実施の形態による固有値分解装置 1は、スタンドアロンの装置であってもよ ぐサーバクライアントシステムにおけるサーバ装置であってもよぐ前述のように、複 数の装置カゝら構成されるシステムであってもよい。固有値分解装置 1がサーバクライ アントシステムにおけるサーバ装置である場合には、行列記憶部 11で記憶される対 称行列 Aや、固有値記憶部 18で記憶される固有値や固有ベクトル記憶部 20で記憶 される固有ベクトル等は、インターネットやイントラネット等の通信回線を介して送受信 されてちょい。
[0291] また、本実施の形態による固有値分解装置 1における固有ベクトルの算出において 、ある固有値を用いた固有ベクトルの算出では、 qd型ツイスト分解法を用い、他の固 有値を用いた固有ベクトルの算出では、 LV型ツイスト分解法を用いるようにしてもよ い。例えば、値の近接している固有値については、 LV型ツイスト分解法を用いて固 有ベクトルの算出を行い、値が近接していない固有値については、 qd型ツイスト分解 法を用いて固有ベクトルの算出を行ってもょ 、。固有値の値が近接して 、るかどうか は、所定の記録媒体等にぉ 、てあら力じめ設定されて 、るしき 、値と比較することに よって半 U断してもよ ヽ。
[0292] また、上記実施の形態にお!、て、各処理または各機能は、単一の装置または単一 のシステムによって集中処理されることによって実現されてもよぐあるいは、複数の 装置または複数のシステムによって分散処理されることによって実現されてもよい。
[0293] また、上記実施の形態において、各構成要素は専用のハードウェアにより構成され てもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを 実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の 記録媒体に記録されたソフトウェア 'プログラムを CPU等のプログラム実行部が読み 出して実行することによって、各構成要素が実現され得る。なお、上記実施の形態に おける固有値分解装置を実現するソフトウェアは、以下のようなプログラムである。つ まり、このプログラムは、コンピュータに、対称 3重対角行列 Tが記憶される対角行列 記憶部から前記対称 3重対角行列 Tを読み出し、当該対称 3重対角行列 Tを 2個の 対称 3重対角行列に分割して前記対角行列記憶部に蓄積し、その対称 3重対角行 列を 2個の対称 3重対角行列に分割して前記対角行列記憶部に蓄積する処理を、分 割後の各対称 3重対角行列があらかじめ決められた大きさ以下となるまで繰り返す行 列分割ステップと、前記あらかじめ決められた大きさ以下の各対称 3重対角行列を前 記対角行列記憶部から読み出し、前記各対称 3重対角行列に対して固有値分解を 行い、前記各対称 3重対角行列の固有値と、前記各対称 3重対角行列の固有べタト ルカ なる直交行列の行列要素とを少なくとも算出し、当該固有値と当該行列要素と を固有値分解記憶部に蓄積する固有値分解ステップと、各対称 3重対角行列の固有 値と、行列要素とを前記固有値分解記憶部から読み出し、前記固有値と、前記行列 要素とから、分割元の対称 3重対角行列の固有値と、分割元の対称 3重対角行列の 行列要素とを算出して前記固有値分解記憶部に蓄積し、その分割元の対称 3重対 角行列の固有値と、行列要素とを算出する処理を、対称 3重対角行列 Tの少なくとも 1個の固有値を算出するまで繰り返し、前記対称 3重対角行列 Tの少なくとも 1個の固 有値を固有値記憶部に蓄積する固有値算出ステップと、前記対角行列記憶部から 前記対称 3重対角行列 Tを読み出し、前記固有値記憶部から前記対称 3重対角行 列 Tの固有値を読み出し、前記対称 3重対角行列 Tとその固有値とから、ツイスト分 解法を用いて前記対称 3重対角行列 Tの少なくとも 1個の固有ベクトルを算出して固
有ベクトル記憶部に蓄積する固有ベクトル算出ステップと、を実行させるためのもの である。
また、このプログラムでは、前記固有ベクトル算出ステップにおいて、 qd型ツイスト分 解法により固有ベクトルを算出してもよ 、。
[0294] また、このプログラムでは、前記固有ベクトル算出ステップ力 前記固有値記憶部か ら前記対称 3重対角行列 Tの固有値を読み出し、当該固有値のいずれかが負の値 である場合に、前記対角行列記憶部から前記対称 3重対角行列 Tを読み出し、当該 対称 3重対角行列 Tの固有ベクトルを変化させることなぐ当該対称 3重対角行列丁の すべての固有値が正の値となるように、当該対称 3重対角行列 Tを正定値化し、正定 値ィ匕した後の固有値を前記固有値記憶部に蓄積し、正定値化した後の対称 3重対 角行列 Tを前記対角行列記憶部に蓄積する正定値化ステップと、前記対角行列記 憶部からすべての固有値が正の値である対称 3重対角行列 Tを読み出し、前記固有 値記憶部から前記対称 3重対角行列 Tの正の値の固有値を読み出し、前記対称 3重 対角行列 Tの各要素に関して qd型変換を行うことによって、前記対称 3重対角行列 T を上 2重対角行列 B(+1)及び下 2重対角行列 B(_1)にコレスキー分解するコレスキー 分解ステップと、前記上 2重対角行列 B(+1)及び下 2重対角行列 B(_ 1)の各要素と、前 記対称 3重対角行列 Tの正の値の固有値とを用いて固有ベクトルを算出して前記固 有ベクトル記憶部に蓄積するベクトル算出ステップと、を備えてもよい。
また、このプログラムでは、前記固有ベクトル算出ステップにおいて、 LV型ツイスト 分解法により固有ベクトルを算出してもよ 、。
[0295] また、このプログラムでは、前記固有ベクトル算出ステップ力 前記対角行列記憶部 から前記対称 3重対角行列 Tを読み出し、前記固有値記憶部から前記対称 3重対角 行列 Tの固有値を読み出し、前記対称 3重対角行列 Tの各要素に関してミウラ変換、 dLVv型変換、逆ミウラ変換を行うことによって、前記対称 3重対角行列 Tを上 2重対 角行列 B(+1)及び下 2重対角行列 B(_1)にコレスキー分解するコレスキー分解ステップ と、前記上 2重対角行列 B(+1)及び下 2重対角行列 B(_1)の各要素と、前記対称 3重 対角行列 Tの固有値とを用いて固有ベクトルを算出して前記固有ベクトル記憶部に 蓄積するベクトル算出ステップと、を備えてもよい。
[0296] また、このプログラムでは、コンピュータに、対称行列 Aが記憶される行列記憶部か ら前記対称行列 Aを読み出し、前記対称行列 Aを 3重対角化した前記対称 3重対角 行列 Tを算出して前記対角行列記憶部に蓄積する対角ィ匕ステップをさらに実行させ てもよい。
なお、上記プログラムにおいて、情報を蓄積するステップなどでは、ハードウェアで しか行われな 、処理は少なくとも含まれな!/、。
[0297] また、このプログラムは、サーバなど力 ダウンロードされることによって実行されても よぐ所定の記録媒体 (例えば、 CD— ROMなどの光ディスクや磁気ディスク、半導 体メモリなど)に記録されたプログラムが読み出されることによって実行されてもよい。
[0298] また、このプログラムを実行するコンピュータは、単数であってもよぐ複数であって もよい。すなわち、集中処理を行ってもよぐあるいは分散処理を行ってもよい。
[0299] 図 34は、上記プログラムを実行して、上記実施の形態による固有値分解装置 1を実 現するコンピュータの外観の一例を示す模式図である。上記実施の形態は、コンビュ ータハードウェア及びその上で実行されるコンピュータプログラムによって実現されう る。
[0300] 図 34において、コンピュータシステム 100は、 CD— ROM (Compact Disk Rea d Only Memory)ドライブ 105、 FD (Flexible Disk)ドライブ 106を含むコンビュ ータ 101と、キーボード 102と、マウス 103と、モニタ 104とを備える。
[0301] 図 35は、コンピュータシステムを示す図である。図 35において、コンピュータ 101は 、 CD— ROMドライブ 105、 FDドライブ 106に加えて、 CPU (Central Processing Unit) 111と、ブートアッププログラム等のプログラムを記憶するための ROM (Rea d Only Memory) 112と、 CPU111に接続され、アプリケーションプログラムの命 令を一時的に記憶すると共に、一時記憶空間を提供する RAM (Random Access Memory) 113と、アプリケーションプログラム、システムプログラム、及びデータを 記憶するハードディスク 114と、 CPU111、 ROM112等を相互に接続するバス 115 とを備える。なお、コンピュータ 101は、 LANへの接続を提供する図示しないネットヮ ークカードを含んでもよい。
[0302] コンピュータシステム 100に、上記実施の形態による固有値分解装置 1の機能を実
行させるプログラムは、 CD— ROM121、または FD122に記憶されて、 CD— ROM ドライブ 105、または FDドライブ 106に挿入され、ハードディスク 114に転送されても よい。これに代えて、そのプログラムは、図示しないネットワークを介してコンピュータ 1 01に送信され、ハードディスク 114に記憶されてもよい。プログラムは実行の際に RA M113にロードされる。なお、プログラムは、 CD— ROM121や FD122、またはネット ワークから直接、ロードされてもよい。
[0303] また、行列記憶部 11、対角行列記憶部 13、固有値分解記憶部 16、固有値記憶部 18,固有ベクトル記憶部 20は、 RAMI 13やハードディスク 114によって実現されて ちょい。
[0304] プログラムは、コンピュータ 101に、上記実施の形態による固有値分解装置 1の機 能を実行させるオペレーティングシステム (OS)、またはサードパーティプログラム等 を必ずしも含まなくてもよい。プログラムは、制御された態様で適切な機能 (モジユー ル)を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいてもよ い。コンピュータシステム 100がどのように動作するのかについては周知であり、詳細 な説明を省略する。
また、本発明は、以上の実施の形態に限定されることなぐ種々の変更が可能であ り、それらも本発明の範囲内に包含されるものであることは言うまでもない。
また、本発明のほんのいくつかの典型的な実施例について上で詳細に説明したが 、その典型的な実施例において、発明の利益と新規な技術から実質的にはずれるこ となく多くの変更が可能であることを当業者は容易に認識することができるであろう。 したがって、そのようなすべての変更は、本発明の範囲に含まれるものである。
産業上の利用可能性
[0305] 以上のように、本発明による固有値分解装置等によれば、固有値分解を高速に処 理することができ、分子軌道法による化学計算処理や統計計算処理、情報検索処理 、その他の固有値分解を用いる処理を実行する装置等にぉ 、て有用である。
図面の簡単な説明
[0306] [図 1]本発明の実施の形態 1による固有値分解装置の構成を示すブロック図
[図 2]同実施の形態による固有値分解装置の動作を示すフローチャート
圆 3]同実施の形態による固有値分解装置の動作を示すフローチャート
圆 4]同実施の形態による固有値分解装置の動作を示すフローチャート
圆 5]同実施の形態における対称 3重対角行列 Tの分割について説明するための図 圆 6]同実施の形態における対称 3重対角行列 Tの固有値の算出について説明する ための図
圆 7]同実施の形態による固有値分解装置の動作を示すフローチャート
圆 8]同実施の形態による固有値分解装置の動作を示すフローチャート
圆 9]同実施の形態における対称 3重対角行列 Tの固有値の算出について説明する ための図
[図 10]同実施の形態における固有ベクトル算出部の構成を示すブロック図 圆 11]同実施の形態による固有値分解装置の動作を示すフローチャート 圆 12]同実施の形態による固有値分解装置の動作を示すフローチャート
[図 13]同実施の形態における固有ベクトル算出部の構成を示すブロック図 圆 14]同実施の形態による固有値分解装置の動作を示すフローチャート
[図 15]同実施の形態におけるコレスキー分解について説明するための図 圆 16]同実施の形態による固有値分解装置の動作を示すフローチャート 圆 17]同実施の形態による固有値分解装置の動作を示すフローチャート 圆 18]同実施の形態による固有値分解装置の動作を示すフローチャート 圆 19]同実施の形態による固有値分解装置の動作を示すフローチャート 圆 20]同実施の形態による固有値分解装置の動作を示すフローチャート 圆 21]同実施の形態による固有値分解装置の動作を示すフローチャート
[図 22]同実施の形態における qd型ツイスト分解法と LV型ツイスト分解法とについて 説明するための図
圆 23]同実施の形態による固有値分解装置の動作を示すフローチャート 圆 24]同実施の形態による固有値分解装置の構成の他の一例を示すブロック図
[図 25]同実施の形態における固有ベクトル算出部の構成の他の一例を示すブロック 図
[図 26]同実施の形態における固有ベクトル算出部の構成の他の一例を示すブロック
図
圆 27]同実施の形態による固有値分解装置の構成の他の一例を示すブロック図 圆 28]同実施の形態による固有値分解装置の数値実験の結果を示す図 圆 29]同実施の形態による固有値分解装置の数値実験の結果を示す図 圆 30]同実施の形態による固有値分解装置の数値実験の結果を示す図 圆 31]同実施の形態による固有値分解装置の数値実験の結果を示す図
[図 32]同実施の形態における画像処理の一例を示すフローチャート
[図 33]同実施の形態における文書検索処理の一例を示すフローチャート 圆 34]同実施の形態におけるコンピュータシステムの外観一例を示す模式図 [図 35]同実施の形態におけるコンピュータシステムの構成の一例を示す図