(57)【要約】      （修正有）【課題】従来のQR分解のアルゴリズムに比較し、処理演算量を少なくし、回路規模を小型化し、消費電力を削減するQR分解アルゴリズムの行列における数値分解方法を提供する。【解決手段】本発明の数値分解方法は、入力される行列Hを行列Qと上三角行列Rとに分解するQR分解に関し、行列H、及び該行列の複素共役転置行列HＨと行列Hとを乗算して求めた正方行列Gを入力し、行列Hの各要素を、空行列Qに対して付与して行列Qとし、正方行列Gの上三角部分の各要素を空三角行列Rに対して付与して上三角行列Rとする過程と、上三角行列Rを読み出し、行ベクトル単位に、各行ベクトルにおける非ゼロ要素のみの部分行列に対して演算を行い、行列Rの各行ベクトルを算出する過程と、記憶部から行列Qを読み出し、列ベクトル単位に演算を行い、行列Qの各列ベクトルを求める過程と、行列R，Qを求める程を同一ループ内にて、行列Hの列数に対応する回数繰り返す過程とを有する。【選択図】図１
2007264788.tif 000002
【特許請求の範囲】
【請求項１】
入力される行列Ｈを行列Ｑと上三角行列Ｒとに分解するＱＲ分解を行う数値分解方法であって、
初期化手段が、記憶部に記憶されている分解対象である行列Ｈ、及び該行列の複素共役転置行列ＨＨと行列Ｈとを乗算して求めた正方行列Ｇを入力し、行列Ｈの各要素を、空行列Ｑに対して付与して仮の行列Ｑとし、正方行列Ｇの上三角部分の各要素を空三角行列Ｒに対して付与して仮の上三角行列Ｒとする初期化過程と、
行列Ｒ演算部が前記記憶部から前記仮の上三角行列Ｒを読み出し、この仮の上三角行列Ｒを行ベクトル単位に、上部から下部方向に、各行ベクトルにおける非ゼロ要素のみの部分行列に対して、対応する行ベクトルより下部の要素を所定の割合にて順次減算する演算を行い、算出された行列Ｒの各行ベクトルを記憶部に記憶する行列Ｒ演算過程と、
行列Ｑ演算部が前記記憶部から前記仮の行列Ｑを読み出し、この仮の行列Ｑを列ベクトル単位に、列ベクトルの各要素より、所定の列ベクトルの要素を順次減算する演算を行い、算出された行列Ｑの各列ベクトルを記憶部に記憶する行列Ｑ演算過程と、
演算処理部が前記行列Ｒ演算過程及び行列Ｑ演算過程を同一の処理ループ内にて行い、この処理ループを行列Ｈの列数に対応する回数繰り返し、行列Ｈを分解した行列Ｑ及び上三角行列Ｒを、記憶部から読み出して出力する演算処理過程と
を有することを特徴とする行列における数値分解方法。
【請求項２】
入力される行列Ｈを行列Ｑと上三角行列Ｒとに分解するＱＲ分解を行う数値分解方法であって、
初期化手段が、記憶部に記憶されている分解対象である行列Ｈ、及び該行列の複素共役転置行列ＨＨと行列Ｈとを乗算して求めた正方行列Ｇを入力し、行列Ｈの各要素を、空行列Ｑに対して付与して仮の行列Ｑとし、正方行列Ｇの上三角部分の各要素を空三角行列Ｒに対して付与して仮の上三角行列Ｒとする初期化過程と、
行列Ｒ演算部が前記記憶部から前記仮の上三角行列Ｒを読み出し、この仮の上三角行列Ｒを行ベクトル単位に、上部から下部方向に、各行ベクトルにおける非ゼロ要素のみの部分行列に対して、対応する行ベクトルより下部の要素を所定の割合にて順次減算する演算を行い、算出された行列Ｒの各行ベクトルを記憶部に記憶する行列Ｒ演算過程と、
行列Ｑ演算部が前記記憶部から前記仮の行列Ｑを読み出し、この仮の行列Ｑを列ベクトル単位に、列ベクトルの各要素より、所定の列ベクトルの要素を順次減算する演算を行い、算出された行列Ｑの各列ベクトルを記憶部に記憶する行列Ｑ演算過程と、
演算処理部が前記行列Ｒ演算過程及び行列Ｑ演算過程を、各々独立した処理ループ内にて行い、この各処理ループを行列Ｈの列数に対応する回数繰り返し、行列Ｈを分解した行列Ｑ及び上三角行列Ｒを、記憶部から読み出して出力する演算処理過程と
を有し、
前記演算処理部が行列Ｒ演算過程の繰り返しループが終了した後に、行列Ｑ演算過程の繰り返しループを実行することを特徴とする行列における数値分解方法。
【請求項３】
入力される行列Ｈを行列Ｑと上三角行列Ｒとに分解するＱＲ分解を行う数値分解方法であって、
初期化手段が、記憶部に記憶されている分解対象である行列Ｈ、及び該行列の複素共役転置行列ＨＨと行列Ｈとを乗算して求めた正方行列Ｇを入力し、行列Ｈの各要素を、空行列Ｑに対して付与して仮の行列Ｑとし、正方行列Ｇの下三角部分の各要素を空三角行列Ｌに対して付与して下三角行列Ｌとする初期化過程と、
行列Ｒ演算部が前記記憶部から前記仮の下三角行列Ｌを読み出し、この下三角行列Ｌを列ベクトル単位に、左端から右端方向に、各列ベクトルにおける非ゼロ要素のみの部分行列に対して演算を行い、算出された行列Ｌの各列ベクトルを記憶部に記憶する行列Ｌ演算過程と、
行列Ｒ演算部が所定の回数の処理ループの繰り返しの終了の後、前記行列Ｌを読み出し、この行列Ｌに対して複素共役転置処理を行い、この演算結果を上三角行列Ｒとして、記憶部に記憶する複素共役転置処理過程と、
行列Ｑ演算部が前記記憶部から前記仮の行列Ｑを読み出し、この仮の行列Ｑを列ベクトル単位に、列ベクトルの各要素より、所定の列ベクトルの要素を順次減算する演算を行い、算出された行列Ｑの各列ベクトルを記憶部に記憶する行列Ｑ演算過程と、
演算処理部が前記行列Ｒ演算過程及び行列Ｑ演算過程を同一の処理ループ内にて行い、この処理ループを行列Ｈの列数に対応する回数繰り返し、行列Ｈを分解した行列Ｑ及び上三角行列Ｒを、記憶部から読み出して出力する演算処理過程と
を有することを特徴とする行列における数値分解方法。
【請求項４】
入力される行列Ｈを行列Ｑと上三角行列Ｒとに分解するＱＲ分解を行う数値分解方法であって、
初期化手段が、記憶部に記憶されている分解対象である行列Ｈ、及び該行列の複素共役転置行列ＨＨと行列Ｈとを乗算して求めた正方行列Ｇを入力し、行列Ｈの各要素を、空行列Ｑに対して付与して仮の行列Ｑとし、正方行列Ｇの下三角部分の各要素を空三角行列Ｌに対して付与して下三角行列Ｌとする初期化過程と、
行列Ｒ演算部が前記記憶部から前記仮の下三角行列Ｌを読み出し、この下三角行列Ｌを列ベクトル単位に、左端から右端方向に、各列ベクトルにおける非ゼロ要素のみの部分行列に対して演算を行い、算出された行列Ｌの各列ベクトルを記憶部に記憶する行列Ｌ演算過程と、
行列Ｒ演算部が所定の回数の処理ループの繰り返しの終了の後、前記行列Ｌを読み出し、この行列Ｌに対して複素共役転置処理を行い、この演算結果を上三角行列Ｒとして、記憶部に記憶する行列Ｒ演算過程と、
行列Ｑ演算部が前記記憶部から前記仮の行列Ｑを読み出し、この仮の行列Ｑを列ベクトル単位に、列ベクトルの各要素より、所定の列ベクトルの要素を順次減算する演算を行い、算出された行列Ｑの各列ベクトルを記憶部に記憶する行列Ｑ演算過程と、
演算処理部が前記行列Ｒ演算過程及び行列Ｑ演算過程を、各々異なった処理ループ内にて行い、この各処理ループを行列Ｈの列数に対応する回数繰り返し、行列Ｈを分解した行列Ｑ及び上三角行列Ｒを、記憶部から読み出して出力する演算処理過程と
を有することを特徴とする行列における数値分解方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数値計算分野における行列のＱＲ分解計算方法に属し、あらゆるデジタル信号処理分野（例えば、デジタル通信，画像処理，音声処理，ソナーシステム，レーザシステムなど）において、ある行列Ｈを、行列Ｑと上三角行列Ｒとの２つに分解することに適用する行列における数値分解方法に関する。
【背景技術】
【０００２】
数値計算の分野において、行列Ｈを、行列Ｑと上三角行列Ｒとの２つに分解する計算アルゴリズムがあり、その計算イメージを図Ｘに示す。
図７において、従来のＱＲ分解アルゴリズムにより、以下に示す（１）式に基づき、行列Ｈを行列Ｑと上三角行列Ｒとの２つの行列に分解される。ここで、行列ＨはＲ行，Ｔ列の行列を表し、行列ＱはＲ行，Ｔ列の行列を表し、上三角行列ＲはＴ行，Ｔ列の行列を表している。
【０００３】
【数１】
2007264788.tif 000003
【０００４】
上記（１）式に示すように、行列Ｑ及び三角行列Ｒに分解するアルゴリズムとして、Classical Gram-Schmidt QR分解法，Modified Gram-Schmidt QR分解法，Householder QR分解法，Given QR分解法などがある（例えば、非特許文献１参照）。
【非特許文献１】Gene H.Golub, Charles F.Van Loan、Matrix Computations Third Edition. Hohns Hopkins published
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、非特許文献１に示すＱＲ分解方法にあっては、ＧＲアルゴリズムにおける行列のＱＲ分解の繰り返しにより行われるため、所要処理演算量が大きいという問題がある。
また、従来例にあっては、アルゴリズムを実際の物理的な回路により実現する場合、回路規模が上記所要処理演算量に比例するため、必要な回路規模も大きくなり、装置を小型化することが困難である。
また、従来例にあっては、上述したように、回路規模が大きくなることにより、消費電力も比例して増加することとなり、バッテリで動作する携帯機器等で使用した場合、電力の消耗が早く、長時間使用することができなくなる。
【０００６】
本発明は、このような事情に鑑みてなされたもので、入力される行列Ｇ及びＨが既知である場合、従来のＱＲ分解のアルゴリズムに比較して、所要処理演算量を少なくし、回路規模を小型化し、消費電力を削減することができるＱＲ分解のアルゴリズムの行列における数値分解方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の行列における数値演算方法は、入力される行列Ｈを行列Ｑと上三角行列Ｒとに分解するＱＲ分解を行う数値分解方法であって、初期化手段が、記憶部に記憶されている分解対象である行列Ｈ、及び該行列の複素共役転置行列ＨＨと行列Ｈとを乗算して求めた正方行列Ｇを入力し、行列Ｈの各要素を、空行列Ｑに対して付与して仮の行列Ｑとし、正方行列Ｇの上三角部分の各要素を空三角行列Ｒに対して付与して仮の上三角行列Ｒとする初期化過程と、行列Ｒ演算部が前記記憶部から前記仮の上三角行列Ｒを読み出し、この仮の上三角行列Ｒを行ベクトル単位に、上部から下部方向に、各行ベクトルにおける非ゼロ要素のみの部分行列に対して、対応する行ベクトルより下部の要素を所定の割合にて順次減算する演算を行い、算出された行列Ｒの各行ベクトルを記憶部に記憶する行列Ｒ演算過程と、行列Ｑ演算部が前記記憶部から前記仮の行列Ｑを読み出し、この仮の行列Ｑを列ベクトル単位に、列ベクトルの各要素より、所定の列ベクトルの要素を順次減算する演算を行い、算出された行列Ｑの各列ベクトルを記憶部に記憶する行列Ｑ演算過程と、演算処理部が前記行列Ｒ演算過程及び行列Ｑ演算過程を同一の処理ループ内にて行い、この処理ループを行列Ｈの列数に対応する回数繰り返し、行列Ｈを分解した行列Ｑ及び上三角行列Ｒを、記憶部から読み出して出力する演算処理過程とを有することを特徴とする。
【０００８】
本発明の行列における数値演算方法は、入力される行列Ｈを行列Ｑと上三角行列Ｒとに分解するＱＲ分解を行う数値分解方法であって、初期化手段が、記憶部に記憶されている分解対象である行列Ｈ、及び該行列の複素共役転置行列ＨＨと行列Ｈとを乗算して求めた正方行列Ｇを入力し、行列Ｈの各要素を、空行列Ｑに対して付与して仮の行列Ｑとし、正方行列Ｇの上三角部分の各要素を空三角行列Ｒに対して付与して仮の上三角行列Ｒとする初期化過程と、行列Ｒ演算部が前記記憶部から前記仮の上三角行列Ｒを読み出し、この仮の上三角行列Ｒを行ベクトル単位に、上部から下部方向に、各行ベクトルにおける非ゼロ要素のみの部分行列に対して、対応する行ベクトルより下部の要素を所定の割合にて順次減算する演算を行い、算出された行列Ｒの各行ベクトルを記憶部に記憶する行列Ｒ演算過程と、行列Ｑ演算部が前記記憶部から前記仮の行列Ｑを読み出し、この仮の行列Ｑを列ベクトル単位に、列ベクトルの各要素より、所定の列ベクトルの要素を順次減算する演算を行い、算出された行列Ｑの各列ベクトルを記憶部に記憶する行列Ｑ演算過程と、演算処理部が前記行列Ｒ演算過程及び行列Ｑ演算過程を、各々独立した処理ループ内にて行い、この各処理ループを行列Ｈの列数に対応する回数繰り返し、行列Ｈを分解した行列Ｑ及び上三角行列Ｒを、記憶部から読み出して出力する演算処理過程とを有し、前記演算処理部が行列Ｒ演算過程の繰り返しループが終了した後に、行列Ｑ演算過程の繰り返しループを実行することを特徴とする。
【０００９】
本発明の行列における数値演算方法は、入力される行列Ｈを行列Ｑと上三角行列Ｒとに分解するＱＲ分解を行う数値分解方法であって、初期化手段が、記憶部に記憶されている分解対象である行列Ｈ、及び該行列の複素共役転置行列ＨＨと行列Ｈとを乗算して求めた正方行列Ｇを入力し、行列Ｈの各要素を、空行列Ｑに対して付与して仮の行列Ｑとし、正方行列Ｇの下三角部分の各要素を空三角行列Ｒに対して付与して下三角行列Ｌとする初期化過程と、行列Ｒ演算部が前記記憶部から前記仮の下三角行列Ｌを読み出し、この下三角行列Ｌを列ベクトル単位に、左端から右端方向に、各列ベクトルにおける非ゼロ要素のみの部分行列に対して演算を行い、算出された行列Ｌの各列ベクトルを記憶部に記憶する行列Ｌ演算過程と、行列Ｒ演算部が所定の回数の処理ループの繰り返しの終了の後、前記行列Ｌを読み出し、この行列Ｌに対して複素共役転置処理を行い、この演算結果を上三角行列Ｒとして、記憶部に記憶する複素共役転置処理過程と、行列Ｑ演算部が前記記憶部から前記仮の行列Ｑを読み出し、この仮の行列Ｑを列ベクトル単位に、列ベクトルの各要素より、所定の列ベクトルの要素を順次減算する演算を行い、算出された行列Ｑの各列ベクトルを記憶部に記憶する行列Ｑ演算過程と、演算処理部が前記行列Ｒ演算過程及び行列Ｑ演算過程を同一の処理ループ内にて行い、この処理ループを行列Ｈの列数に対応する回数繰り返し、行列Ｈを分解した行列Ｑ及び上三角行列Ｒを、記憶部から読み出して出力する演算処理過程とを有することを特徴とする。
【００１０】
本発明の行列における数値演算方法は、入力される行列Ｈを行列Ｑと上三角行列Ｒとに分解するＱＲ分解を行う数値分解方法であって、初期化手段が、記憶部に記憶されている分解対象である行列Ｈ、及び該行列の複素共役転置行列ＨＨと行列Ｈとを乗算して求めた正方行列Ｇを入力し、行列Ｈの各要素を、空行列Ｑに対して付与して仮の行列Ｑとし、正方行列Ｇの下三角部分の各要素を空三角行列Ｒに対して付与して下三角行列Ｌとする初期化過程と、行列Ｒ演算部が前記記憶部から前記仮の下三角行列Ｌを読み出し、この下三角行列Ｌを列ベクトル単位に、左端から右端方向に、各列ベクトルにおける非ゼロ要素のみの部分行列に対して演算を行い、算出された行列Ｌの各列ベクトルを記憶部に記憶する行列Ｌ演算過程と、行列Ｒ演算部が所定の回数の処理ループの繰り返しの終了の後、前記行列Ｌを読み出し、この行列Ｌに対して複素共役転置処理を行い、この演算結果を上三角行列Ｒとして、記憶部に記憶する行列Ｒ演算過程と、行列Ｑ演算部が前記記憶部から前記仮の行列Ｑを読み出し、この仮の行列Ｑを列ベクトル単位に、列ベクトルの各要素より、所定の列ベクトルの要素を順次減算する演算を行い、算出された行列Ｑの各列ベクトルを記憶部に記憶する行列Ｑ演算過程と、演算処理部が前記行列Ｒ演算過程及び行列Ｑ演算過程を、各々異なった処理ループ内にて行い、この各処理ループを行列Ｈの列数に対応する回数繰り返し、行列Ｈを分解した行列Ｑ及び上三角行列Ｒを、記憶部から読み出して出力する演算処理過程とを有することを特徴とする。
【００１１】
上述した本発明のアルゴリズムとしては、複素領域（あるいは実数領域）にある行列Ｈに対して、行列Ｇ＝ＨＨＨが既知であることを前提に、行列Ｈを行列Ｑと上三角行列Ｒとの２つの行列に分解する機能を有している。
すなわち、行列Ｈを行列Ｑ，Ｒの２つの行列へ分解する処理において、演算量が大きい、所要回路規模が大きい、消費電力が多いという従来の課題を、分解対象の行列Ｈのみを用いたアルゴリズムにより解決する。
具体的な実施形態のアルゴリズムとしては、行列Ｈと行列Ｇ（行列Ｈの複素共役転置行列）とをアルゴリズムの入力とし、Ｔ（行列Ｈの列ベクトルの数）回の巡回（ループ処理）により、Ｈ＝ＱＲとなる行列Ｑ及び行列Ｒを生成する。行列Ｒは列ベクトル毎に上部から下部方向に、また行列Ｑは列ベクトル毎に左端から右端に向かって順次生成される。
【発明の効果】
【００１２】
以上説明したように、本発明のアルゴリズムによれば、部分行列毎に行列全体を演算していくため、所要処理演算量が従来アルゴリズム（Classical Gram-Schmidt QR分解法，Modified Gram-Schmidt QR分解法，Householder QR分解法，Given QR分解法など）に比較して少なくなる。
また、本発明のアルゴリズムによれば、ＱＲ分解法のための回路を小さい規模で実現できる。すなわち、回路規模は所要演算量に比例するため、従来例に比較して演算量が少なくなるため、行列のＱＲ分解の所要回路規模も従来に比較して小さくなり、従来装置に比較して小型化を実現できる。
【発明を実施するための最良の形態】
【００１３】
本発明の行列における数値分解方法は、分解対象の行列Ｈに対する複素共役転置の行列ＨＨを数値演算により求め、行列Ｈと行列ＨＨとを乗算することにより、正方行列Ｇを算出し、この行列Ｈと正方行列Ｇとを用いて、行列Ｈを行列Ｑと上三角行列Ｒとに分解するアルゴリズである。
すなわち、計算のイメージは、図１に示すような流れで行われ、行列Ａと行列Ｇとを入力し、以下の（２）式に示すように、行列Ｒを各行毎に、最上部の行から、最下部の行まで順次算出し、行列Ｑを各列毎に、左側から右側まで順次算出する。この（２）式において、ｑｔ（１≦ｔ≦Ｔ）は行列Ｑのｔ番目の列ベクトルを示しており、ｒｔ（１≦ｔ≦Ｔ）は行列Ｒのｔ番目の行ベクトルを示している。
【００１４】
【数２】
2007264788.tif 000004
【００１５】
＜第１の実施形態＞
以下、本発明の第１の実施形態による数値分解システムを図面を参照して説明する。図２は同実施形態による数値分解システムの構成例を示すブロック図である。
第１の実施形態による数値分解システムは、入力部１，初期化部４，行列Ｒ演算部５，行列Ｑ演算部６，記憶部７及び演算制御部８を有している。
【００１６】
入力部１は、分解対象のＲ行，Ｔ列の行列Ｈ及びＴ行，Ｔ列の正方行列Ｇが既知の値を、記憶部７に記憶する。すなわち、行列Ｈ及び行列Ｇ（＝ＨＨＨ）が既知であるとし、これらの行列が外部機器から入力されるとして、以下の説明を行う。また、入力部１が入力される行列Ｈ及び行列Ｇを、直接に初期下部４へ出力するようにしてもよい。
初期化部４は、行列Ｒ演算部５及び行列演算部６にて用いる仮の行列を設定する。すなわち、初期化部４は、空行列Ｑに対して、分解対象の行列Ｈを付与して（行列Ｈの要素を、空行列Ｑの対応する要素の位置（行及び列で指定される）に要素のデータを上書きして）、行列Ｑとし、空行列Ｒに対して正方行列の上三角行列を付与して（対応する位置に要素のデータを上書きして）、行列Ｒとして初期化を行う。
【００１７】
行列Ｒ演算部５は、設定された数値ｉにより、記憶部７に記憶されている対応するｉ行目の行ベクトルＲ（i,i:T）のデータを読み出すとともに、行列Ｒの要素ｒｋ，ｉからスカラーｒｋ，ｉ＊を算出し、以下の（３）式により、新たな行ベクトルを算出して、記憶部７の読み出した位置（すなわちアドレス）に上書きを行い、行ベクトルのデータの変更を行う。
ここで、行ベクトルＲ（i,i:T）は、ｉ行目の行ベクトルにおけるｉ番目の列成分からＴ番目までの列成分までの部分行列を示し、スカラーｒｋ，ｉ＊は行列Ｒのｋ行，ｉ列目の要素の複素共役を示している。すなわち、各列ベクトル単位にて、非ゼロ要素の部分からなる部分行列のみの演算を行っている。
Ｒ（i,i:T）：＝Ｒ（i,i:T）−ｒｋ，ｉ＊・Ｒ（i,i:T）…（３）
【００１８】
すなわち、行列Ｒ演算部５は、行ベクトルＲ（i,i:T）に対して、スカラーｒｋ，ｉ＊を乗算し、乗算結果をこの行ベクトルから減算して、この減算結果を新たな行ベクトルＲ（i,i:T）として、記憶部７に対して、読み出した位置に上書きする。
このとき、行列Ｒ演算部４は、ｋをインクリメントして、上記（３）式を、１≦ｋ≦ｉ−１の間で繰り返して行う。
【００１９】
また、行列Ｒ演算部５は、以下の（４）式に示すように、最終的に得られた行ベクトルＲ（i,i:T）を記憶部７から読み出し、スカラーｒｋ，ｉの平方根である（ｒｋ，ｉ）１／２により除算し、この除算結果を最終的な行ベクトルＲ（i,i:T）演算結果として、記憶部７に記憶する。このスカラーｒｋ，ｉは、行列Ｒのｋ行番目，ｉ列番目の要素を示している。
Ｒ（i,i:T）：＝Ｒ（i,i:T）／（ｒｋ，ｉ）１／２       …（４）
【００２０】
行列Ｑ演算部６は、設定された数値ｉにより、記憶部７から行列Ｑのｉ番目の列ベクトルＱ（：,ｉ）を読み出し、以下の（５）式に示すように、スカラーｒｉ，ｉにより除算し、除算結果を新たな列ベクトルＱ（：,ｉ）として、記憶部７において読み出した位置に書き込む。このスカラーは、行列Ｒにおけるｉ行，ｉ列目の要素である。
Ｑ（：,ｉ）：＝Ｑ（：,ｉ）／ｒｉ，ｉ              …（５）
また、行列Ｑ演算部６は、記憶部７から列ベクトルＱ（：,ｊ）を読み出し、以下の（６）式により、新たな列ベクトルＱ（：，ｊ）を算出し、記憶部７の読み出した位置に記憶する。ここで、スカラーｒｉ，ｊは、行列Ｒにおけるｉ行目，ｊ列目の要素である。
Ｑ（：,ｊ）：＝Ｑ（：,ｊ）−ｒｉ，ｊ・Ｑ（：,ｉ） …（６）
【００２１】
すなわち、行列Ｑ演算部６は、列ベクトルＱ（：,ｉ）の要素に対して、スカラーを乗算し、この乗算結果を列ベクトルＱ（：,ｊ）から減算し、この減算結果を新たな列ベクトルＱ（：,ｊ）として、記憶部７の読み出した位置に書き込み、データの更新を行う。
このとき、行列Ｑ演算部６は、ｊを初期値ｉ＋１とし、処理を１回行う毎にインクリメントしつつ、上記（６）式を、ｉ＋１≦ｊ≦Ｔの間で繰り返して行う。
演算制御部８は、行列Ｒ演算部５及び行列Ｑ演算部６における演算処理の順序制御と、各演算部における演算処理の回数の制御、すなわち演算ループの制御とを行っている。
【００２２】
次に、図２及び図３を参照して、第１の実施形態による数値分解システムの動作を説明する。図３は、第１の実施形態の数値分解システムのアルゴリズムにおける各部の処理を示したテーブルであり、（１）〜（１１）の処理が順次行われる。ここで、入力部１，複素共役転置行列生成部２及び正方行列生成部３の動作は省略され、行列Ｈ及び正方行列Ｇが各々求められ、すでに記憶部７に記憶されているとする。
処理（１）において、初期化部４は、記憶部７から分割対象の行列Ｈを読み出し、空行列Ｑに対し、この行列Ｈの各要素を、対応する行番号及び列番号で指定される位置に書き込み、すなわち空行列Ｑに対して行列Ｈの値を付与し、空行列ＱをＲ行，Ｔ列の行列とする。
また、初期化部４は、記憶部７から行列Ｇを読み出し、この行列Ｇから上三角部分を抽出し、空行列Ｒの対応する行番号及び列番号で指定される位置に書き込み、すなわち空行列Ｒに対して行列Ｇの上三角部分の要素を付与し、行列Ｒを上三角部分が非ゼロ要素である上三角行列である行列Ｒとする。
【００２３】
次に、処理（２）において、演算制御部８は、正方行列である行列Ｒの列数及び行数の数値Ｔを抽出し、行列Ｒ演算回路５と行列Ｑ演算回路６とにおける繰り返し演算回数をＴとし、数値ｉを「１」に初期化して、処理（２）〜処理（１１）までの、行列Ｒ演算回路５と行列Ｑ演算回路６とにおける演算処理を、数値ｉが１≦ｉ≦Ｔの間繰り返して行う。ここで、例えば、１回の処理が終了した後、処理（１１）にて数値ｉをインクリメント（１を加算）し、処理（２）にて数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（３）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（２）〜処理（１１）の演算ループ（行列分割の演算ループ）を終了し、その時点で記憶部７に記憶されている行列Ｒ及び行列Ｑを、それぞれ行列Ｈを分解した上三角行列Ｒと行列Ｑとして出力する。
【００２４】
次に、処理（３）において、行列Ｒ演算部５は、演算制御部８から数値ｉを入力し、数値ｋを「１」に初期化して、処理（３）〜処理（５）までの演算ループを、数値ｋが１≦ｋ≦ｉ−１の間繰り返して行い、演算ループ毎に（３）式により、（２）式の最左辺の行ベクトルｒ１〜行ベクトルｒＴの各行ベクトル（部分行列）を、行列の最上部の行ベクトルから最下部の行ベクトルの順に、すなわち行ベクトルｒ１から行ベクトルｒＴの向かい、順に行ベクトルを演算する。ここで、行ベクトルｒ１は、Ｒ（１，１：Ｔ）と同様である。
【００２５】
ここで、ｉ＝１の場合、１≦ｋ≦ｉ−１が成り立たないため、演算ループには入らず、行列Ｒ演算部５は、処理を処理（６）へ移す。すなわち、１行目の行ベクトルｒ１は行列Ｇの１行目の行ベクトルのままとする。
したがって、数値ｉ＝２以降において、行列演算部５は、数値ｋが１≦ｋ≦ｉ−１の範囲内にあることを検出するため、処理（４）へ処理を進める。
【００２６】
次に、処理（４）において、行列Ｒ演算部５は、数値ｉの示す行ベクトルｒｉにおける部分行列Ｒ（ｉ,ｉ：Ｔ）を、記憶部７に記憶されている行列Ｒから読み出す。
そして、行列Ｒ演算部５は、この部分行列Ｒ（ｉ,ｉ：Ｔ）に対し、（３）式の演算を行い、記憶部７における読み出した位置に書き込み、処理を処理（５）へ進める。
次に、処理（５）において、行列Ｒ演算部５は、１回の演算ループの毎に数値ｋをインクリメントし、処理を処理（３）へ進める。
【００２７】
次に、行列Ｒ演算部５は、処理（３）にて数値ｋが１≦ｋ≦ｉ−１の範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（４）へ処理を移し、一方、数値ｋが数値ｉ−１を超えたこと（範囲外であること）を検出すると、処理（３）〜処理（５）の演算ループ（行列Ｒ生成の演算ループ）を終了させ、処理を処理（６）へ移す。
【００２８】
次に、処理（６）において、行列Ｒ演算部５は、この時点の数値ｉに対応した行ベクトルにおける部分行列Ｒ（ｉ,ｉ：Ｔ）を、記憶部７に記憶された行列Ｒから読み出し、（４）式の演算処理を行い、演算結果を記憶部７の読み出した位置に上書きし、データの変更を行い、処理を処理（７）へ移す。
【００２９】
次に、処理（７）において、行列Ｑ演算部６は、演算制御部８から数値ｉを入力し、記憶部７に記憶された行列Ｑから、数値ｉに対応した列ベクトルｑｉを読み出し、（５）式に示す処理を行い、すなわちスカラーｒｉ，ｉにて列ベクトルｑｉを除算し、この除算結果を記憶部７の読み出した位置に書き込み、データの変更を行い、処理を処理（８）へ進める。
【００３０】
次に、処理（８）において、行列Ｑ演算部６は、数値ｊを「１」に初期化して、処理を処理（８）へ進める。
以下、行列Ｑ演算部６は、処理（８）〜処理（１０）までの演算ループを、数値ｊがｉ＋１≦ｊ≦Ｔの間繰り返して行い、演算ループ毎に（３）式により、（２）式の最左辺の列ベクトルｑ１〜行ベクトルｑＴの各列ベクトル（部分行列）を、行列の最右端の列ベクトルから最左端の列ベクトルの順に、すなわち列ベクトルｑ１から列ベクトルｑＴに向かい、順に列ベクトルを演算する。ここで、列ベクトルｑjは、Ｑ（：,ｊ）と同様である。
【００３１】
次に、処理（９）において、行列Ｑ演算部６は、ｉ＝１の場合、ｉ＋１≦ｊ≦Ｔの範囲として、２≦ｊ≦Ｔの範囲で、（６）式の処理を行うため、演算ループにおいて、行列Ｑの第１列目に対して、（７）の処理のみが行われる。すなわち、１行目の列ベクトルｑ１に対して、処理（８）から処理（１０）までの処理は行われない。
そして、行列Ｑ演算部６は、数値ｊの示す列ベクトルｒｊ、すなわち部分行列Ｑ（,：ｊ）を、記憶部７に記憶されている行列Ｑから読み出す。
そして、行列Ｑ演算部６は、この部分行列Ｑ（,：ｊ）に対し、（６）式の演算を行い、記憶部７における読み出した位置に書き込み、処理を処理（１０）へ進める。
次に、処理（１０）において、行列Ｑ演算部６は、１回の演算ループの毎に数値ｊをインクリメントし、処理を処理（８）へ進める。
【００３２】
次に、行列Ｑ演算部６は、処理（８）にて数値ｊがｉ＋１≦ｊ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（８）へ処理を移し、一方、数値ｊが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（８）〜処理（１０）の演算ループ（行列Ｑの生成の演算ループ）を終了させ、処理を処理（１１）へ移す。
【００３３】
＜第２の実施形態＞
第２の実施形態の数値分解システムは、第１の実施形態と同様の構成をしている。第２の実施形態と第１の実施形態との違いは、演算制御部８の行列Ｒ演算部５及び行列Ｑ演算部６の演算順序にある。すなわち、第１の実施形態においては、同一の演算ループ内にて、行列Ｒを生成する演算ループと行列Ｑを生成する演算ループとが実行されるアルゴリズムとなっている。
【００３４】
一方、第２の実施形態においては、演算制御部８が、行列Ｒを生成する演算ループと、行列Ｑを生成する演算ループとを、順番に、それぞれ独立に制御し、すなわち、行列Ｒの生成の演算ループが終了し、分割後の行列Ｒが求められた後、行列Ｑの生成の演算ループを開始して行列Ｑの生成を行い、行列Ｈが分解された行列Ｒ及び行列Ｑ各々の生成を別々に行うアルゴリズムとなっている。
したがって、演算制御部８及び初期化部４以外の他の構成要素（入力部１，行列Ｒ演算部５，行列Ｑ演算部６及び記憶部７）の動作は、第２の実施形態においても、第１の実施形態の構成と同様である。
【００３５】
以下、図２及び図４を参照して、第２の実施形態による数値分解システムの動作を説明する。図４は、第２の実施形態の数値分解システムのアルゴリズムにおける各部の処理を示したテーブルであり、（１）〜（１３）の処理が順次行われる。ここで、入力部１，複素共役転置行列生成部２及び正方行列生成部３の動作は省略され、行列Ｈ及び正方行列Ｇが各々求められ、すでに記憶部７に記憶されているとする。
処理（１）において、初期化部４は、記憶部７から分割対象の行列Ｈを読み出し、空行列Ｑに対し、この行列Ｈの各要素を、対応する行番号及び列番号で指定される位置に書き込み、すなわち空行列Ｑに対して行列Ｈの値を付与し、空行列ＱをＲ行，Ｔ列の行列とする。
また、初期化部４は、記憶部７から行列Ｇを読み出し、空行列Ｒに対し、この行列Ｇの各要素を、対応する行番号及び列番号で指定される位置に書き込み、すなわち空行列Ｒに対して行列Ｇの値を付与し、空行列ＲをＴ行，Ｔ列の正方行列とする。
【００３６】
次に、処理（２）において、演算制御部８は、正方行列である行列Ｒの列数及び行数の数値Ｔを抽出し、行列Ｒ演算回路５と行列Ｑ演算回路６とにおける繰り返し演算回数をＴとし、数値ｉを「１」に初期化して、処理（２）〜処理（７）までの、行列Ｒ演算回路５における演算処理を、数値ｉが１≦ｉ≦Ｔの間繰り返して行う。ここで、例えば、１回の処理が終了した後、処理（７）にて数値ｉをインクリメント（１を加算）し、処理（２）にて数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（３）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（２）〜処理（７）の演算ループ（行列Ｒ生成の演算ループ）を終了し、その時点で記憶部７に記憶されている行列Ｒを、行列Ｈを分解した行列Ｑとして出力し、処理を処理（８）へ進める。
【００３７】
次に、処理（３）〜処理（６）までの処理は、第１の実施形態における処理（３）〜処理（６）それぞれと同様のため、処理の説明を省略する。
そして、処理（７）において、演算制御部８は、数値ｉをインクリメント（１を加算）し、処理を処理（２）ヘ進める。
次に、処理（２）において、演算制御部８は、数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（３）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、この時点における行列Ｒとして記憶部７へ記憶するとともに、処理を処理（８）へ進める。
【００３８】
次に、処理（８）において、演算制御部８は、Ｒ行，Ｔ列の行列である行列Ｑの列数及の数値Ｔを抽出し、行列Ｑ演算回路６における繰り返し演算回数をＴとし、数値ｉを「１」に初期化して、処理（８）〜処理（１３）までの、行列Ｒ演算回路５における演算処理を、数値ｉが１≦ｉ≦Ｔの間繰り返して行う。ここで、例えば、１回の処理が終了した後、処理（１３）にて数値ｉをインクリメント（１を加算）し、処理（８）にて数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（９）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（９）〜処理（１２）の演算ループ（行列Ｑ生成の演算ループ）を終了し、その時点で記憶部７に記憶されている行列Ｑを、行列Ｈを分解した行列Ｑとして出力し、行列Ｈの分解処理を終了する。上記、処理（９），（１０），（１１），（１２）各々は、それぞれ第１の実施形態における処理（７），（８），（９），（１０）と同様のため、説明を省略する。
【００３９】
すなわち、処理（２）〜処理（７）においては、Ｔ回（正方行列Ｇの行及び列の数に対応した回数）の演算ループにて、行列Ｒを（２）式の最左辺の行ベクトルｒ１から行ベクトルｒＴまで、順番に演算する。
また、処理（８）〜処理（１３）においては、Ｔ回（正方行列Ｇの行及び列の数に対応した回数）の演算ループにて、行列Ｑを（２）式の最左辺の列ベクトルｑ１から列ベクトルｑＴまで、順番に演算する。
【００４０】
＜第３の実施形態＞
以下、本発明の第３の実施形態による数値分解システムを図面を参照して説明する。図２は同実施形態による数値分解システムの構成例を示すブロック図である。構成は第１の実施形態と同様であるが各構成の機能が異なっている。
したがって、第３の実施形態による数値分解システムは、第１の実施形態と同様に、入力部１，初期化部４，行列Ｒ演算部５，行列Ｑ演算部６，記憶部７及び演算制御部８を有している。
【００４１】
入力部１は、分解対象のＲ行，Ｔ列の行列Ｈ及びＴ行，Ｔ列の正方行列Ｇが既知の値を、記憶部７に記憶する。すなわち、行列Ｈ及び行列Ｇ（＝ＨＨＨ）が既知であるとし、これらの行列が外部機器から入力されるとして、以下の説明を行う。また、入力部１が入力される行列Ｈ及び行列Ｇを、直接に初期下部４へ出力するようにしてもよい。
初期化部４は、行列Ｒ演算部５及び行列演算部６にて用いる仮の行列を設定する。すなわち、初期化部４は、空行列Ｑに対して、分解対象の行列Ｈを付与して（対応する位置に要素のデータを上書きして）、行列Ｑとし、空行列Ｌ’に対して正方行列の下三角行列を付与して（対応する位置に要素のデータを上書きして）、行列Ｌとして初期化を行う。
【００４２】
行列Ｒ演算部５は、設定された数値ｉにより、記憶部７に記憶されている対応するｉ列目の列ベクトルＬ（i:T,i）のデータを読み出すとともに、スカラーｌｉ、ｋ＊を算出し、以下の（７）式により、新たな列ベクトルを算出して、記憶部７の読み出した位置に上書きを行い、列ベクトルのデータの変更を行う。
ここで、行ベクトルＬ（i:T,i）は、ｉ列目の列ベクトルにおけるｉ番目の行成分からＴ番目までの行成分までの部分行列を示し、スカラーｌｉ、ｋ＊は行列Ｌのｉ行，ｋ列目の要素の複素共役を示している。ここで、Ｒ＝ＬＨであるため、行列Ｒの行ベクトルを最上部から順に最下部の行を順次計算することに相当する。
Ｌ（i:T,i）：＝Ｌ（i:T,i）−ｌｉ、ｋ＊・Ｌ（i:T,k）…（７）
【００４３】
すなわち、行列Ｒ演算部５は、列ベクトルＬ（i:T,i）に対して、スカラーｌｉ、ｋ＊を乗算し、乗算結果をこの行ベクトルから減算して、この減算結果を新たな列ベクトルＬ（i:Ｔ,i）として、記憶部７に対して、読み出した位置に上書きする。
このとき、行列Ｒ演算部４は、ｋをインクリメントして、上記（７）式を、１≦ｋ≦ｉ−１の間で繰り返して行う。
【００４４】
また、行列Ｒ演算部５は、以下の（８）式に示すように、最終的に得られた列ベクトルＬ（i;T,i）を記憶部７から読み出し、スカラーｌｉ、ｉの平方根である（ｌｉ，ｉ）１／２により除算し、この得られた除算結果を最終的な列ベクトルＬ（i:T,i）として、記憶部７に記憶する。このスカラーｌｉ，ｉは、行列Ｌのｉ行番目，ｉ列番目の要素を示している。
Ｌ（i:T,i）：＝L（i:T,i）／（ｌｉ，ｉ）１／２           …（８）
【００４５】
行列Ｑ演算部６は、設定された数値ｉにより、記憶部７から行列Ｑのｉ番目の列ベクトルＱ（：,ｉ）を読み出し、以下の（９）式に示すように、スカラーｌｉ，ｉにより除算し、除算結果を新たな列ベクトルＱ（：,ｉ）として、記憶部７において読み出した位置に書き込む。このスカラーは、行列Ｌにおけるｉ行，ｉ列目の要素である。
Ｑ（：,ｉ）：＝Ｑ（：,ｉ）／ｌｉ，ｉ              …（９）
また、行列Ｑ演算部６は、記憶部７から列ベクトルＱ（：,ｊ）を読み出し、以下の（１０）式により、新たな列ベクトルＱ（：，ｊ）を算出し、記憶部７の読み出した位置に記憶する。ここで、スカラーｌｉ，ｊ＊は、行列Ｌにおけるｉ行目，ｊ列目の要素の複素共役である。
Ｑ（：,ｊ）：＝Ｑ（：,ｊ）−ｌｉ，ｊ＊・Ｑ（：,ｉ） …（１０）
【００４６】
すなわち、行列Ｑ演算部６は、列ベクトルＱ（：,ｉ）の要素に対して、スカラーｌｉ，ｊ＊を乗算し、この乗算結果を列ベクトルＱ（：,ｊ）から減算し、この減算結果を新たな列ベクトルＱ（：,ｊ）として、記憶部７の読み出した位置に書き込み、データの更新を行う。
このとき、行列Ｑ演算部６は、ｊを初期値ｉ＋１とし、処理を１回行う毎にインクリメントしつつ、上記（６）式を、ｉ＋１≦ｊ≦Ｔの間で繰り返して行う。
演算制御部８は、行列Ｒ演算部５及び行列Ｑ演算部６における演算処理の順序制御と、各演算部における演算処理の回数の制御、すなわち演算ループの制御とを行っている。
【００４７】
次に、図２及び図５参照して、第３の実施形態による数値分解システムの動作を説明する。図５は、第３の実施形態の数値分解システムのアルゴリズムにおける各部の処理を示したテーブルであり、（１）〜（１３）の処理が順次行われる。ここで、入力部１，複素共役転置行列生成部２及び正方行列生成部３の動作は省略され、行列Ｈ及び正方行列Ｇが各々求められ、すでに記憶部７に記憶されているとする。
処理（１）において、初期化部４は、記憶部７から分割対象の行列Ｈを読み出し、空行列Ｑに対し、この行列Ｈの各要素を、対応する行番号及び列番号で指定される位置に書き込み、すなわち空行列Ｑに対して行列Ｈの値を付与し、空行列ＱをＲ行，Ｔ列の行列とする。
また、初期化部４は、記憶部７から行列Ｇを読み出し、この行列Ｇから下三角部分を抽出し、空行列Ｌ’の対応する行番号及び列番号で指定される位置に書き込み、すなわち空行列Ｌ’に対して行列Ｇの下三角部分の要素を付与し、行列Ｌ’を下三角部分が非ゼロ要素である下三角行列である行列Ｌ’とする。
【００４８】
次に、処理（２）において、演算制御部８は、正方行列である行列Ｌ’の列数及び行数の数値Ｔを抽出し、行列Ｒ演算回路５と行列Ｑ演算回路６とにおける繰り返し演算回数をＴとし、数値ｉを「１」に初期化して、処理（２）〜処理（１１）までの、行列Ｒ演算回路５と行列Ｑ演算回路６とにおける演算処理を、数値ｉが１≦ｉ≦Ｔの間繰り返して行う。ここで、例えば、１回の処理が終了した後、処理（１１）にて数値ｉをインクリメント（１を加算）し、処理（２）にて数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（３）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（２）〜処理（１１）の演算ループ（行列分割の演算ループ）を終了し、処理を処理（１２）へ進める。
また、行列Ｒ演算部５は、処理（１２）において、Ｒ＝ＬＨの演算を行い、すなわち上述した求めた下三角行列Ｌに対して複素共役転置の処理を行い、上三角行列の行列Ｒを算出して、記憶部７に記憶する。
次に、演算制御部８は、その時点で記憶部７に記憶されている行列Ｒ及び行列Ｑを、それぞれ行列Ｈを分解した上三角行列Ｒと行列Ｑとして出力する。
【００４９】
次に、処理（３）において、行列Ｒ演算部５は、演算制御部８から数値ｉを入力し、数値ｋを「１」に初期化して、処理（３）〜処理（５）までの演算ループを、数値ｋが１≦ｋ≦ｉ−１の間繰り返して行い、演算ループ毎に（７）式により、行列Ｌ’の列ベクトルｌ１〜列ベクトルｌＴの各列ベクトル（部分行列）を求めるため、行列の最左部の列ベクトルから最右部の列ベクトルの順に、列ベクトルｌ１から列ベクトルｌＴに向かい、順に列ベクトルを演算する。ここで、列ベクトルｌ１の全ての行成分から成る部分行列は、Ｌ（１:T,１）と同様である。
【００５０】
ここで、ｉ＝１の場合、１≦ｋ≦ｉ−１が成り立たないため、演算ループには入らず、行列Ｒ演算部５は、処理を処理（６）へ移す。すなわち、１行目の行ベクトルｒ１は行列Ｇの１行目の行ベクトルのままとする。
したがって、数値ｉ＝２以降において、行列演算部５は、数値ｋが１≦ｋ≦ｉ−１の範囲内にあることを検出するため、処理（４）へ処理を進める。
【００５１】
次に、処理（４）において、行列Ｒ演算部５は、数値ｉの示す行ベクトルｌｉにおける部分行列Ｒ（ｉ:T,ｉ）を、記憶部７に記憶されている行列Ｌ’から読み出す。
そして、行列Ｒ演算部５は、この部分行列Ｌ（ｉ:T,ｉ）に対し、（７）式の演算を行い、記憶部７における読み出した位置に書き込み、処理を処理（５）へ進める。
次に、処理（５）において、行列Ｒ演算部５は、１回の演算ループの毎に数値ｋをインクリメントし、処理を処理（３）へ進める。
【００５２】
次に、行列Ｒ演算部５は、処理（３）にて数値ｋが１≦ｋ≦ｉ−１の範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（４）へ処理を移し、一方、数値ｋが数値ｉ−１を超えたこと（範囲外であること）を検出すると、処理（３）〜処理（５）の演算ループ（行列Ｒ生成の演算ループ）を終了させ、処理を処理（６）へ移す。
【００５３】
次に、処理（６）において、行列Ｒ演算部５は、この時点の数値ｉに対応した行ベクトルにおける部分行列L（ｉ:T,ｉ）を、記憶部７に記憶された行列L’から読み出し、（８）式の演算処理を行い、演算結果を記憶部７の読み出した位置に上書きし、データの変更を行い、処理を処理（７）へ移す。
【００５４】
次に、処理（７）において、行列Ｑ演算部６は、演算制御部８から数値ｉを入力し、記憶部７に記憶された行列Ｑから、数値ｉに対応した列ベクトルｑｉを読み出し、（９）式に示す処理を行い、すなわちスカラーｌｉ，ｉにて列ベクトルｑｉを除算し、この除算結果を記憶部７の読み出した位置に書き込み、データの変更を行い、処理を処理（８）へ進める。ここで、列ベクトルｑｉは、部分行列Ｑ（：,ｉ）に等しい。
【００５５】
次に、処理（８）において、行列Ｑ演算部６は、数値ｊを「１」に初期化して、処理を処理（８）へ進める。
以下、行列Ｑ演算部６は、処理（８）〜処理（１０）までの演算ループを、数値ｊがｉ＋１≦ｊ≦Ｔの間繰り返して行い、演算ループ毎に（３）式により、（２）式の最左辺の列ベクトルｑ１〜行ベクトルｑＴの各列ベクトル（部分行列）を、行列の最右端の列ベクトルから最左端の列ベクトルの順に、すなわち列ベクトルｑ１から列ベクトルｑＴに向かい、順に列ベクトルを演算する。上述したように、列ベクトルｑjは、Ｑ（：,ｊ）と同様である。
【００５６】
次に、処理（９）において、行列Ｑ演算部６は、ｉ＝１の場合、ｉ＋１≦ｊ≦Ｔの範囲として、２≦ｊ≦Ｔの範囲で、（６）式の処理を行うため、演算ループにおいて、行列Ｑの第１列目に対して、（７）の処理のみが行われる。すなわち、１行目の列ベクトルｑ１に対して、処理（８）から処理（１０）までの処理は行われない。
そして、行列Ｑ演算部６は、数値ｊの示す列ベクトルｒｊ、すなわち部分行列Ｑ（,：ｊ）を、記憶部７に記憶されている行列Ｑから読み出す。
そして、行列Ｑ演算部６は、この部分行列Ｑ（,：ｊ）に対し、（１０）式の演算を行い、記憶部７における読み出した位置に書き込み、処理を処理（１０）へ進める。
次に、処理（１０）において、行列Ｑ演算部６は、１回の演算ループの毎に数値ｊをインクリメントし、処理を処理（８）へ進める。
【００５７】
次に、行列Ｑ演算部６は、処理（８）にて数値ｊがｉ＋１≦ｊ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（８）へ処理を移し、一方、数値ｊが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（８）〜処理（１０）の演算ループ（行列Ｑの生成の演算ループ）を終了させ、処理を処理（１１）へ移す。
次に、処理（１１）において、演算制御部８は、数値ｉをインクリメント（１を加算）し、処理を処理（２）へ進める。
そして、処理（２）において、演算制御部８は、数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（３）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（２）〜処理（１１）の演算ループ（行列分割の演算ループ）を終了し、処理を処理（１２）へ進める。
【００５８】
次に、行列Ｒ演算部５は、処理（１２）において、Ｒ＝ＬＨの演算を行い、すなわち上述した求めた下三角行列Ｌに対して複素共役転置の処理を行い、上三角行列の行列Ｒを算出して、記憶部７に記憶する。
上述した複素共役転置の処理後、演算制御部８は、記憶部７から行列Ｑ及び行列Ｒを読み出し、行列Ｈの分解結果として出力する。
【００５９】
＜第４の実施形態＞
第４の実施形態の数値分解システムは、第３の実施形態と同様の構成をしている。第４の実施形態と第３の実施形態との違いは、演算制御部８の行列Ｒ演算部５及び行列Ｑ演算部６の演算順序にある。すなわち、第３の実施形態においては、同一の演算ループ内にて、行列Ｒを生成する演算ループと行列Ｑを生成する演算ループとが実行されるアルゴリズムとなっている。
【００６０】
一方、第４の実施形態においては、演算制御部８が、行列Ｒを生成する演算ループと、行列Ｑを生成する演算ループとを、順番に、それぞれ独立に制御し、すなわち、行列Ｒの生成の演算ループが終了し、分割後の行列Ｒが求められた後、行列Ｑの生成の演算ループを開始して行列Ｑの生成を行い、行列Ｈが分解された行列Ｒ及び行列Ｑ各々の生成を別々に行うアルゴリズムとなっている。
したがって、行列Ｒ演算部５，行列Ｑ演算部６及び演算制御部８以外の他の構成要素（入力部１，初期化部４及び記憶部７）の動作は、第４の実施形態においても、第３の実施形態の構成と同様である。
【００６１】
以下、本発明の第４の実施形態において、第３の実施形態と異なる機能の構成のみの説明を行う。第４の実施形態の構成自体は、第３の実施形態と同様であるが各構成の機能が異なっている。
行列Ｒ演算部５は、設定された数値ｉにより、記憶部７に記憶されている対応するｉ列目の列ベクトルＬ（i:T,i）のデータを読み出すとともに、スカラーｌｉ、ｋ＊を算出し、以下の（７）式により、新たな列ベクトルを算出して、記憶部７の読み出した位置に上書きを行い、列ベクトルのデータの変更を行う。
ここで、行ベクトルＬ（i:T,i）は、ｉ列目の列ベクトルにおけるｉ番目の行成分からＴ番目までの行成分までの部分行列を示し、スカラーｌｉ、ｋ＊は行列Ｌのｉ行，ｋ列目の要素の複素共役を示している。ここで、Ｒ＝ＬＨであるため、行列Ｒの行ベクトルを最上部から順に最下部の行を順次計算することに相当する。
【００６２】
すなわち、行列Ｒ演算部５は、列ベクトルＬ（i:T,i）に対して、スカラーｌｉ、ｋ＊を乗算し、乗算結果をこの行ベクトルから減算して、この減算結果を新たな列ベクトルＬ（i:Ｔ,i）として、記憶部７に対して、読み出した位置に上書きする。
このとき、行列Ｒ演算部４は、ｋをインクリメントして、上記（７）式を、１≦ｋ≦ｉ−１の間で繰り返して行う。
【００６３】
また、行列Ｒ演算部５は、上記（８）式に示すように、最終的に得られた列ベクトルＬ（i;T,i）を記憶部７から読み出し、スカラーｌｉ、ｉの平方根である（ｌｉ，ｉ）１／２により除算し、この得られた除算結果を最終的な列ベクトルＬ（i:T,i）として、記憶部７に記憶する。このスカラーｌｉ，ｉは、行列Ｌのｉ行番目，ｉ列番目の要素を示している。
【００６４】
行列Ｑ演算部６は、設定された数値ｉにより、記憶部７から行列Ｑのｉ番目の列ベクトルＱ（：,ｉ）を読み出し、上記（５）式に示すように、スカラーｒｉ，ｉにより除算し、除算結果を新たな列ベクトルＱ（：,ｉ）として、記憶部７において読み出した位置に書き込む。このスカラーは、行列Ｌにおけるｉ行，ｉ列目の要素である。
また、行列Ｑ演算部６は、記憶部７から列ベクトルＱ（：,ｊ）を読み出し、上記（６）式により、新たな列ベクトルＱ（：，ｊ）を算出し、記憶部７の読み出した位置に記憶する。ここで、スカラーｒｉ，ｊは、行列Ｒにおけるｉ行目，ｊ列目の要素の複素共役である。
すなわち、行列Ｑ演算部６は、列ベクトルＱ（：,ｉ）の要素に対して、スカラーｌｉ，ｊを乗算し、この乗算結果を列ベクトルＱ（：,ｊ）から減算し、この減算結果を新たな列ベクトルＱ（：,ｊ）として、記憶部７の読み出した位置に書き込み、データの更新を行う。
このとき、行列Ｑ演算部６は、ｊを初期値ｉ＋１とし、処理を１回行う毎にインクリメントしつつ、上記（１２）式を、ｉ＋１≦ｊ≦Ｔの間で繰り返して行う。
演算制御部８は、行列Ｒ演算部５及び行列Ｑ演算部６における演算処理の順序制御と、各演算部における演算処理の回数の制御、すなわち演算ループの制御とを行っている。
【００６５】
次に、図２及び図６参照して、第４の実施形態による数値分解システムの動作を説明する。図６は、第４の実施形態の数値分解システムのアルゴリズムにおける各部の処理を示したテーブルであり、（１）〜（１４）の処理が順次行われる。ここで、入力部１，複素共役転置行列生成部２及び正方行列生成部３の動作は省略され、行列Ｈ及び正方行列Ｇが各々求められ、すでに記憶部７に記憶されているとする。
処理（１）における、初期化部４が行う処理（１）は、第３の実施形態と同様のため、説明を省略する。
【００６６】
次に、処理（２）において、演算制御部８は、正方行列である行列Ｌ’の列数及び行数の数値Ｔを抽出し、行列Ｒ演算回路５と行列Ｑ演算回路６とにおける繰り返し演算回数をＴとし、数値ｉを「１」に初期化して、処理（２）〜処理（７）までの、行列Ｒ演算回路５と行列Ｑ演算回路６とにおける演算処理を、数値ｉが１≦ｉ≦Ｔの間繰り返して行う。ここで、例えば、１回の処理が終了した後、処理（７）にて数値ｉをインクリメント（１を加算）し、処理（２）にて数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（３）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（２）〜処理（７）の演算ループ（行列分割の演算ループ）を終了し、処理を処理（８）へ進める。
また、行列Ｒ演算部５は、処理（８）において、Ｒ＝ＬＨの演算を行い、すなわち上述した求めた下三角行列Ｌに対して複素共役転置の処理を行い、上三角行列の行列Ｒを算出して、記憶部７に記憶する。
【００６７】
次の処理（３）〜処理（５）までは、第３の実施形態における処理（３）〜処理（５）各々と同様のため、説明を省略する。
次に、処理（７）において、演算制御部８は、数値ｉをインクリメント（１を加算）し、処理を処理（２）ヘ進める。
次に、処理（２）において、演算制御部８は、数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（３）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、行列Ｌ’を行列Ｌとして記憶部７へ記憶するとともに、処理を処理（８）へ進める。
【００６８】
次に、処理（８）において、行列Ｒ演算部５は、Ｒ＝ＬＨの演算を行い、すなわち上述した求めた下三角行列Ｌに対して複素共役転置の処理を行い、上三角行列の行列Ｒを算出して、記憶部７に記憶するとともに、処理を処理（９）へ進める。
【００６９】
次に、処理（９）において、演算制御部８は、Ｒ行，Ｔ列の行列である行列Ｑの列数及の数値Ｔを抽出し、行列Ｑ演算回路６における繰り返し演算回数をＴとし、数値ｉを「１」に初期化して、処理（９）〜処理（１４）までの、行列Ｑ演算回路６における演算処理を、数値ｉが１≦ｉ≦Ｔの間繰り返して行う。ここで、例えば、１回の処理が終了した後、処理（１４）にて数値ｉをインクリメント（１を加算）し、処理（９）にて数値ｉが１≦ｉ≦Ｔの範囲内であるか否かを検出し、範囲内であることを検出した場合、次の処理（１０）へ処理を移し、一方、数値ｉが数値Ｔを超えたこと（範囲外であること）を検出すると、処理（９）〜処理（１４）の演算ループ（行列Ｑ生成の演算ループ）を終了し、その時点で記憶部７に記憶されている行列Ｑを、行列Ｈを分解した行列Ｑとして出力し、行列Ｈの分解処理を終了する。上記、処理（１０），（１１），（１２），（１３）各々は、それぞれ第３の実施形態における処理（７），（８），（９），（１０）と同様のため、説明を省略する。しかしながら、処理（１０）で用いる式は（５）式であり、処理（１２）で用いる式は（６）式である。
【００７０】
上述した第１から第４の実施形態によれば、以下に示す効果がある。
・本発明の各実施形態におけるアルゴリズムは、所要処理演算量が従来アルゴリズム（Classical Gram-Schmidt QR分解法，Modified Gram-Schmidt QR分解法，Householder QR分解法，Given QR分解法など）に比較して少なくなる。
・本発明の各実施形態におけるアルゴリズムは、ＱＲ分解法のための回路を小さい規模で実現できる。すなわち、回路規模は所要演算量に比例するため、従来例に比較して演算量が少なくなるため、行列のＱＲ分解の所要回路規模も従来に比較して小さくなり、従来装置に比較して小型化を実現できる。
【００７１】
・本発明の各実施形態におけるアルゴリズムは、上述したように回路規模を小さくすることが可能のため、従来に比較して消費電力を少なくすることができる。また、演算量が少なくなることにより、回路動作時間も減少させることができ、消費電力を従来に比較して減少することができ、バッテリ等で動作するＱＲ分解演算機能を有する携帯型の装置の使用時間を延ばすことができる。
・上述した各効果により、従来例に比較して、ＱＲ分解演算機能の装置への実装が簡易に行える。
・上述した各効果により、小型化、低消費電力化、低製造コスト化等が、従来例に比して向上しているため、経済的な大量生産を行うことができる。
【００７２】
次に、上述した各実施形態のアルゴリズムにおける式及び行列において用いた用語の定義を以下に示す。
行列及びスカラーは、その度毎に定義しているため省略し、以下、行列Ａ、この行列Ａの要素（スカラー）をａとして説明する。
ａｉまたはＡ（ｉ,：）…行列Ａのｉ番目の行ベクトル
ａｊまたはＡ（：,ｊ）…行列Ａのｊ番目の列ベクトル
ａｉｊ…行列Ａのｉ番目行，ｊ番目列の要素
Ａ（n：m,i：j）…行列Ａのｎ番目行〜ｍ番目行、ｉ番目列〜ｊ番目列の範囲の部分行列
ＡＨ…行列Ａの複素共役転置行列
ＡＴ…行列Ａの転置行列
‖ｂ‖…ベクトルｂの２次ノルム
ａ＊…スカラーａの複素共役
｜ａ｜…スカラーａの絶対値
ａ：＝ａ…ａの値の更新処理を示す
【００７３】
なお、図１における数値分解システムの機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりＱＲ分解の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境（あるいは表示環境）を備えたＷＷＷシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００７４】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【図面の簡単な説明】
【００７５】
【図１】本発明の第１〜第４の実施形態において用いられるＱＲ分解のアルゴリズムを説明する概念図である。
【図２】本発明の第１〜第４の実施形態による数値分解システムの構成例を示すブロック図である。
【図３】本発明の第１の実施形態におけるＱＲ分解のアルゴリズムを説明する、処理の順番を示すテーブルである。
【図４】本発明の第２の実施形態におけるＱＲ分解のアルゴリズムを説明する、処理の順番を示すテーブルである。
【図５】本発明の第３の実施形態におけるＱＲ分解のアルゴリズムを説明する、処理の順番を示すテーブルである。
【図６】本発明の第４の実施形態におけるＱＲ分解のアルゴリズムを説明する、処理の順番を示すテーブルである。
【図７】従来例において用いられるＱＲ分解のアルゴリズムを説明する概念図である。
【符号の説明】
【００７６】
１…入力部
２…複素共役転置行列生成部
３…正方行列生成部
４…初期化部
５…行列Ｒ生成部
６…行列Ｑ生成部
７…記憶部
８…演算制御部
【図１】
2007264788.tif 000005
【図２】
2007264788.tif 000006
【図３】
2007264788.tif 000007
【図４】
2007264788.tif 000008
【図５】
2007264788.tif 000009
【図６】
2007264788.tif 000010
【図７】
2007264788.tif 000011