(57)【特許請求の範囲】
【請求項１】
非零構造が一定の疎行列を係数行列とし、前記疎行列の係数が変化する毎にＬＵ分解を行う連立一次方程式の演算処理システムであって、
前記疎行列の全ての非零要素データ、前記疎行列における前記各非零要素が格納された行列中の位置を示す情報を複数の配列に格納し、これら複数の配列を参照して前記疎行列のＬＵ分解を行い、
最初に前記疎行列のＬＵ分解を行うときに、
前記疎行列の全ての非零要素に対して計算に必要な非零要素の組み合わせを探索し、各非零要素に関してその非零要素のＬＵ分解に必要な非零要素との組み合わせの数と各組み合わせに含まれる二つの非零要素の格納位置を前記各非零要素に関してそれぞれ前記複数の配列とは別の配列に格納し、
その後前記疎行列のＬＵ分解を行って所定の計算を行う一方、
前記疎行列の前記係数のいずれかが変化したことが検出される毎に、前記複数の配列及び前記別の配列を参照して前記係数が変化した前記疎行列のＬＵ分解を行って所定の計算を行うことを特徴とする連立一次方程式の演算処理システム。
【請求項２】
請求項１に記載する連立一次方程式の演算処理システムにおいて、
前記複数の配列は少なくとも第１〜第２の配列を有するとともに、前記別の配列が第３の配列を有するとともに、
第１の配列は、番地に前記各非零要素を対応付けて格納する配列であり、
第２の配列は、前記疎行列における前記各非零要素が格納された行列中の位置を示す情報を格納する配列であり、
第３の配列は、前記最初のＬＵ分解の後に入力され、各非零要素に対し、その後のＬＵ分解を行わせるために必要な非零要素との組み合わせの数と各組み合わせに含まれる二つの非零要素の格納位置を格納する配列であることを特徴とする連立一次方程式の演算処理システム。
【請求項３】
請求項２に記載する連立一次方程式の演算処理システムにおいて、
前記第３の配列は、二種類の配列からなり、
一方の配列には、前記各非零要素に対応する番地に他方の配列に記録された前記各非零要素の非零組み合わせ情報の先頭番地が記録され、
他方の配列には、前記各非零要素に対応する非零要素の組み合わせの個数ｎが記録されるとともに、ｎ組の非零要素の組み合わせ要素の前記第１の配列の番地が記録されていることを特徴とする連立一次方程式の演算処理システム。
【請求項４】
請求項２または請求項３に記載する連立一次方程式の演算処理システムにおいて、
前記第１の配列は、ＬＵ分解前の非零要素の配列と、ＬＵ分解後の非零要素の配列とを有するものであることを特徴とする連立一次方程式の演算処理システム。
【請求項５】
請求項２〜請求項４の何れか一つに記載する連立一次方程式の演算処理システムにおいて、
前記第２の配列は、各非零要素の行番号を格納する一方の配列と、各非零要素の列番号を格納する他方の配列とを有することを特徴とする連立一次方程式の演算処理システム。
【請求項６】
請求項２〜請求項５の何れか一つに記載する連立一次方程式の演算処理システムにおいて、
前記複数の配列は、さらに第４および第５の配列を有し、
第４の配列は、各列方向に関する各非零要素の番地の情報を格納する配列であり、
第５の配列は、各行方向に関する各非零要素の番地の情報を格納する配列であることを特徴とする連立一次方程式の演算処理システム。
【請求項７】
請求項６に記載する連立一次方程式の演算処理システムにおいて、
前記第４の配列は、１〜Ｎ番地（前記疎行列がＮ×Ｎの行列である場合）までは各列で最も上に位置する非零要素の番地を格納し、（Ｎ＋１）番地目以降には、行列の列を上から下に見たとき、ある非零要素の次に存在する非零要素の番地を格納するとともに、下にデータが存在しない場合は、データを格納しない構造とし、
第５の配列は、前記第４の配列と同様の考え方で、行を左から右にみた場合の構造としたことを特徴とする連立一次方程式の演算処理システム。
【請求項８】
請求項６または請求項７に記載する連立一次方程式の演算処理システムにおいて、
前記複数の配列は、さらに第６および第７の配列を有し、
第６の配列は、各列を下から上に見たときに、ある非零要素の次に存在する非零要素の番地を格納するものであり、
第７の配列は、各行を右から左に見たときに、ある非零要素の次に存在する非零要素の番地を格納するものであることを特徴とする連立一次方程式の演算処理システム。
【請求項９】
請求項２〜請求項８の何れか一つに記載する連立一次方程式の演算処理システムにおいて、
前記複数の配列は、さらに第８の配列を有し、
第８の配列は、前記疎行列の対角要素の番地を格納する配列であることを特徴とする連立一次方程式の演算処理システム。
【請求項１０】
請求項１〜請求項９の何れか一つに記載する連立一次方程式の演算処理システムにおいて、
疎行列の係数の変化が検出された場合には、その部分に識別のためのフラグを立てておくことを特徴とする連立一次方程式の演算処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は連立一次方程式の演算処理システムに関し、特に非零構造の同じ大規模疎行列を係数行列にもつ連立一次方程式をＬＵ分解に基づく直接法で複数回解く場合に適用して有用なものである。
【背景技術】
【０００２】
電力系統における各種異常現象、電力品質などの解析のため、瞬時値解析に対するニーズが高まってきている。かかる瞬時値解析における求解プロセスは、一般に連立一次方程式として表現される回路方程式を行列として取り扱い、ＬＵ分解など効率的な行列演算手法を活用することで高速化を行う。特に、回路方程式から得られる行列は、その要素の多くが零の疎行列であり、この特徴を活用した演算手法（疎行列演算手法）を用いることで、一層の高速化が図られている。
【０００３】
疎行列は通常、非零要素のみを記録するため、格納されるデータの行番号・列番号は連続していない。このため、疎行列のＬＵ分解では、非零要素の探索に一定の処理時間を要する。
【０００４】
ここで、基本的な疎行列の演算手法について説明しておく。疎行列の演算手法は、直接法と反復法に大別されるが、瞬時値解析で用いられるのは直接法である。直接法は、「ＬＵ分解」、「前進代入」、「後退代入」からなり、これに加えて「順序付け」と呼ばれる前処理が必要となる。また、実装の観点からは、「データ格納方法」も重要である。
【０００５】
瞬時値解析では、解くべき回路方程式が次式の連立一次方程式で表される。
【０００６】
【数１】
0005888782.tif 000002
【０００７】
ただし、ＡはサイズがＮ×Ｎの正方行列、ｂ、ｘは要素がＮ個の列ベクトルであり、Ａとｂを既知として与え、ｘを未知として求める。瞬時値解析では、係数行列であるＡの要素の多くが零となり、このような行列を疎行列と呼ぶ。以下、Ａが疎行列である場合に、（１）式を直接法により解く場合について概説する。まず、行列のＬＵ分解について説明する。
【０００８】
（１）式のＡを下三角行列Ｌと上三角行列Ｕの積に分解することをＬＵ分解と呼ぶ。
【０００９】
【数２】
0005888782.tif 000003
【００１０】
Ａの要素を（３）式のように書くとき、ＬとＵはそれぞれ（４）式、（５）式のように表わすことができる。
【００１１】
【数３】
0005888782.tif 000004
【００１２】
【数４】
0005888782.tif 000005
【００１３】
【数５】
0005888782.tif 000006
【００１４】
具体例として、Ａのサイズが３×３の場合について考えると、（２）式は、（６）式のように表わされる。
【００１５】
【数６】
0005888782.tif 000007
【００１６】
上式（６）において、右辺の積を展開して各要素を等しいと置き、ＵとＬについて整理すると（７）式のように表わされる。
【００１７】
【数７】
0005888782.tif 000008
【００１８】
（７）式において、各式の計算は、いずれも自身より上に書かれた式で計算した値の代入だけで行うことができる。つまり、第１番目の式から順に計算を行うことができる。これはＡのサイズがＮ×Ｎである一般的な場合にも成立し、ＬとＵの各成分はそれぞれ次式（８）、（９）により計算することができる。
【００１９】
【数８】
0005888782.tif 000009
【００２０】
【数９】
0005888782.tif 000010
【００２１】
瞬時値解析において、素子の値が変化する時変素子や、非線形素子が回路中に存在しない場合、（１）式の回路方程式で計算時間ステップごとに変化するのはｂのみであり、Ａは変化しない。すなわち、演算の最初にＡを一度だけＬＵ分解しておけば良く、各計算時間ステップの解ｘは、変化するｂに対して前進代入と後退代入を行うだけで求めることができる。なお、前進代入と後退代入に関するここでの詳細な説明は省略する。
【００２２】
同様に、回路に時変素子および非線形素子が存在する場合でも、時変素子の値が変化せず、折れ線で表現された非線形素子の動作区間が変化しない時間ステップにおいては、Ａの値は変化しないため、前進代入と後退代入だけで解ｘを求めることができる。
【００２３】
このように、（１）式の求解過程をＬＵ分解と前進・後退代入の２つのステップに分けることにより、次回以降の求解において、回路中の素子の値が変化しない場合はＬＵ分解を省略することができ、計算効率を向上することができる。
【００２４】
ただ、実際の回路では、係数行列を構成するＡの係数が変わることも多く、この場合には、都度ＬＵ分解をやり直す必要がある。なお、前進代入と後退代入に関するここでの詳細な説明は省略する。
【００２５】
行列Ａが疎行列の場合、全ての要素を記録するのではなく、非零要素のみを記録することでメモリ容量を節約できる。ただし、その記録方法には、計算中に効率よく特定の行列要素を読み出せる工夫が必要になる。その手法としては、従来より行索引法とスレデッド・リスト法と呼ばれるものが知られているが、ここではスレデッド・リスト法について概説する。
【００２６】
スレデッド・リスト法では、５つの配列を用いて１つの行列を表現する。同手法により図７に示す５×５行列を格納したときの各配列の内容を表１に示す。
【００２７】
【表１】
0005888782.tif 000011
【００２８】
表１において、配列ＶＡＬは、１〜５番地（行列のサイズがＮ×Ｎのときは１〜Ｎ番地）まで使用せず、６番地目から行列Ａの非零要素を格納する。配列ＩＲＯＷは各要素の行番号、配列ＪＣＯＬは各要素の列番号を格納する。配列ＩＰＴは、１〜５番地までは各列で最も上に位置する要素の番地を格納し、６番地目以降には、行列の列を上から下に見たとき、ある非零要素の次に存在する非零要素の番地を格納する。下にデータが存在しない場合は、データを格納しない。また、配列ＩＰＴと同じ考え方で、行を左から右に見た配列がＪＰＴである。このように、データそのものを格納するＶＡＬ以外に、ＩＲＯＷ、ＪＣＯＬ、ＩＰＴ、ＪＰＴを用いることで、ＶＡＬに格納された各データの位置を探索でき、（８）式、（９）式の計算を効率良く行うことができる。なお、ＩＰＴとＪＰＴで各要素の位置関係を表しているため、ＬＵ分解の過程でフィル・インが発生しても、表１の末尾に新たな番地を追加し、ＩＰＴ、ＪＰＴの一部を修正することで、新たな行列構造を表すことができる。
【００２９】
かかる疎行列のＬＵ分解の過程を実際にプログラムとして実装する際には必然的にデータ探索のための処理が必要になる。ここで、図８に示す９×９行列を用いて、ＬＵ分解の実装において発生する、従来技術におけるデータ探索のための処理について説明する。
【００３０】
この場合の行列のＬＵ分解の過程において、７行６列目の要素l76を求める場合、その式は（９）式より、
【００３１】
【数１０】
0005888782.tif 000012
【００３２】
上式（１０）の右辺の下線部（第３，４，６項）は、乗算の２つの値のうちどちらか（もしくは両方）が零であるため、その積も零となる。疎行列のＬＵ分解では零となるこれらの項の計算を行わず、非零のデータだけを計算に用いることで、全ての要素を計算する場合よりも少ない手順でＬＵ分解を実現することができる。
【００３３】
一方、疎行列は通常、行索引法やスレデッド・リスト法といった専用のデータ格納方式で取り扱うため、Ａを（８）式、（９）式を用いてＬＵ分解するとき、データの探索が必要となる。
【００３４】
例えば（１０）式の計算において右辺の括弧内の第２項のｌ７１ｕ１６は、図８を参照すれば、いずれも非零となっていることが直ちにわかり、その積の演算を行う。
【００３５】
しかしながら、従来のスレデッド・リスト法によりデータが格納されている場合、プログラム実装上は、７行目の最も左の要素が１列目のデータであるかどうか、また６列目の最も上の要素が１行目のデータであるかどうかは、配列ＩＲＯＷ、ＪＣＯＬを確認しないとわからない。同様に、（１０）式の右辺の括弧内の第３項のｌ７２ｕ２６は、図８を参照するとｕ２６が零であることが判断できるため、計算を行わない。しかしプログラム実装上では、６列目の上から２つ目の要素の行番号が２より大きい、すなわち、ｕ２６が存在しないことを確認して初めて、ｌ７２ｕ２６の計算が不要であることを判断できる。図８に示す場合において、本質的に必要な計算は手順番号を二重丸で囲んだ３手順のみであるが、データの探索のため余計に１０手順が必要となる。このように、データ探索処理に一定の計算コストがかかるため、ＬＵ分解の実装手法やデータ格納方法には、さらなる改善の余地があると考えられる。上述の如きデータ探索処理に要する時間は、係数行列が大きくなればなるほど、また係数が変更されＬＵ分解のやり直し回数が増えれば増えるほど、顕著に長くなる。
【００３６】
連立方程式として回路方程式を行列として取り扱い、ＬＵ分解など効率的な行列演算手法を活用することで高速化を行う場合において、一連の求解手順をプログラム（ソースコード）として生成し、その処理を効率化するコード生成手法を提案する公知技術として、例えば非特許文献１および非特許文献２に開示するものがある。
【００３７】
かかる非特許文献１および非特許文献２に提案されたコード生成手法は、高速化の効果が非常に高いことが知られているが、幾つかの課題も存在する。第一に、計算実行時にコンパイラ環境が必要であり、一般的なユーザーが利用する汎用解析プログラムとしては実用的ではない。第二に、回路を変更するたびにプログラムを生成し直す必要があり、その生成にも一定の時間を要することから、結果として迅速な解析が難しい。第三に、非線形素子など、計算中に値が動的に変化する回路素子によって、行列の対角要素が零になる可能性があり、その場合、途中で計算が不可能になる。
【００３８】
以上の理由から、電力系統の瞬時値解析プログラムでは、これまでにコード生成手法が採用された例はない。このようにコード求解プログラムにおいても、ＬＵ分解の実装手法やデータ格納方法には、さらなる改善の余地がある。
【先行技術文献】
【非特許文献】
【００３９】
【非特許文献１】F. G. Gustavson, W. Liniger and R. Willoughby, “Symbolic Generation of an Optimal Crout Algorithm for Sparse Systems of Linear Equations,” Journal of the ACM, Vol. 17, No. 1, pp. 87-109, 1970.
【非特許文献２】I. S. Duff, A. M. Erisman and J. K. Reid, Direct Methods for Sparse Matrices, Oxford Univ. Press, 1986.
【発明の概要】
【発明が解決しようとする課題】
【００４０】
本発明は、上記従来技術に鑑み、疎行列を複数回ＬＵ分解する場合に適用して有用な、疎行列を係数行列とし、ＬＵ分解を伴う連立一次方程式の求解プロセスにおける処理時間を短縮することができる連立一次方程式の演算処理システムを提供することを目的とする。
【課題を解決するための手段】
【００４１】
上記目的を達成する本発明の第１の態様は、
非零構造が一定の疎行列を係数行列とし、前記疎行列の係数が変化する毎にＬＵ分解を行う連立一次方程式の演算処理システムであって、
前記疎行列の全ての非零要素データ、前記疎行列における前記各非零要素が格納された行列中の位置を示す情報を複数の配列に格納し、これら複数の配列を参照して前記疎行列のＬＵ分解を行い、
最初に前記疎行列のＬＵ分解を行うときに、
前記疎行列の全ての非零要素に対して計算に必要な非零要素の組み合わせを探索し、各非零要素に関してその非零要素のＬＵ分解に必要な非零要素との組み合わせの数と各組み合わせに含まれる二つの非零要素の格納位置を前記各非零要素に関してそれぞれ前記複数の配列とは別の配列に格納し、
その後前記疎行列のＬＵ分解を行って所定の計算を行う一方、
前記疎行列の前記係数のいずれかが変化したことが検出される毎に、前記複数の配列及び前記別の配列を参照して前記係数が変化した前記疎行列のＬＵ分解を行って所定の計算を行うことを特徴とする連立一次方程式の演算処理システムにある。
【００４２】
本発明の第２の態様は、
第１の態様に記載する連立一次方程式の演算処理システムにおいて、
前記複数の配列は少なくとも第１〜第２の配列を有するとともに、前記別の配列が第３の配列を有するとともに、
第１の配列は、番地に前記各非零要素を対応付けて格納する配列であり、
第２の配列は、前記疎行列における前記各非零要素が格納された行列中の位置を示す情報を格納する配列であり、
第３の配列は、前記最初のＬＵ分解の後に入力され、各非零要素に対し、その後のＬＵ分解を行わせるために必要な非零要素との組み合わせの数と各組み合わせに含まれる二つの非零要素の格納位置を格納する配列であることを特徴とする連立一次方程式の演算処理システムにある。
【００４３】
本発明の第３の態様は、
第２の態様に記載する連立一次方程式の演算処理システムにおいて、
前記第３の配列は、二種類の配列からなり、
一方の配列には、前記各非零要素に対応する番地に他方の配列に記録された前記各非零要素の非零組み合わせ情報の先頭番地が記録され、
他方の配列には、前記各非零要素に対応する非零要素の組み合わせの個数ｎが記録されるとともに、ｎ組の非零要素の組み合わせ要素の前記第１の配列の番地が記録されていることを特徴とする連立一次方程式の演算処理システムにある。
【００４４】
本態様によれば、第３の配列を用いて、ＬＵ分解を行うとき、前記個数ｎを読み込んだ後、続く２つの番地に示された非零要素の積を該当する第１の配列の値から差し引くという処理をｎ回繰り返すことにより、（８）式もしくは（９）式の分子を算出することができる。ちなみに、後述する表３の６番地の非零要素の場合は、ＩＲＯＷ＝２、ＪＣＯＬ＝３であるので、ｕ２３の計算に相当する。
【００４５】
本発明の第４の態様は、
第２または第３の態様に記載する連立一次方程式の演算処理システムにおいて、
前記第１の配列は、ＬＵ分解前の非零要素の配列と、ＬＵ分解後の非零要素の配列とを有するものであることを特徴とする連立一次方程式の演算処理システムにある。
【００４６】
本態様によれば、ＬＵ分解後の非零要素をＬＵ分解前の非零要素の配列に上書きしていくのではなく、ＬＵ分解後の非零要素の配列に書き込んでいくことにより、疎行列の一部の非零要素の値が変わった場合にはＬＵ分解前の非零要素の配列の対応する部分の値だけを変更して、ＬＵ分解を再実施することができる。
【００４７】
本発明の第５の態様は、
第２〜第４の態様の何れか一つに記載する連立一次方程式の演算処理システムにおいて、
前記第２の配列は、各非零要素の行番号を格納する一方の配列と、各非零要素の列番号を格納する他方の配列とを有することを特徴とする連立一次方程式の演算処理システムにある。
【００４８】
本発明の第６の態様は、
第２〜第５の態様の何れか一つに記載する連立一次方程式の演算処理システムにおいて、
前記複数の配列は、さらに第４および第５の配列を有し、
第４の配列は、各列方向に関する各非零要素の番地の情報を格納する配列であり、
第５の配列は、各行方向に関する各非零要素の番地の情報を格納する配列であることを特徴とする連立一次方程式の演算処理システムにある。
【００４９】
本態様によれば、特定の行列に存在する非零要素を、上記第４の態様の場合よりも、さらに迅速に検索し得る。
【００５０】
本発明の第７の態様は、
第６の態様に記載する連立一次方程式の演算処理システムにおいて、
前記第４の配列は、１〜Ｎ番地（前記疎行列がＮ×Ｎの行列である場合）までは各列で最も上に位置する非零要素の番地を格納し、（Ｎ＋１）番地目以降には、行列の列を上から下に見たとき、ある非零要素の次に存在する非零要素の番地を格納するとともに、下にデータが存在しない場合は、データを格納しない構造とし、
第５の配列は、前記第４の配列と同様の考え方で、行を左から右にみた場合の構造としたことを特徴とする連立一次方程式の演算処理システムにある。
【００５１】
本態様によれば、特定の行列に存在する非零要素を、上記第４の態様の場合よりも、さらに迅速に検索し得るばかりでなく、特定の行列に存在する非零要素配列を、上記第５の態様の場合よりも、さらに具体的な構成とすることができる。
【００５２】
本発明の第８の態様は、
第６または第７の態様に記載する連立一次方程式の演算処理システムにおいて、
前記複数の配列は、さらに第６および第７の配列を有し、
第６の配列は、各列を下から上に見たときに、ある非零要素の次に存在する非零要素の番地を格納するものであり、
第７の配列は、各行を右から左に見たときに、ある非零要素の次に存在する非零要素の番地を格納するものであることを特徴とする連立一次方程式の演算処理システムにある。
【００５３】
本態様によれば、特定の行列に存在する非零要素を、上記第５または第６の態様の場合よりも、さらに迅速に検索し得る場合がある。
【００５６】
本発明の第９の態様は、
第２〜第８の態様の何れか一つに記載する連立一次方程式の演算処理システムにおいて、
前記複数の配列は、さらに第８の配列を有し、
第８の配列は、前記疎行列の対角要素の番地を格納する配列であることを特徴とする連立一次方程式の演算処理システムにある。
【００５７】
本態様によれば、ＬＵ分解および後退代入で頻繁に参照される対角要素を専用の配列によって効率的に提供することができるので、前記参照処理を効率化することができる。
【００５８】
本発明の第１０の態様は、
第１〜第９の態様の何れか一つに記載する連立一次方程式の演算処理システムにおいて、
疎行列の係数の変化が検出された場合には、その部分に識別のためのフラグを立てておくことを特徴とする連立一次方程式の演算処理システムにある。
【発明の効果】
【００５９】
本発明によれば、疎行列のＬＵ分解を行うときに、疎行列の全ての非零要素に対して計算に必要な非零要素の組み合わせを探索し、特定の非零要素に紐付けされた組み合わせに関するデータを参照しつつＬＵ分解を行うようにしているので、積算結果が非零となる要素同士のみを抽出した演算を行えば良く、演算時間を飛躍的に短縮することができる。
【００６０】
また、疎行列の係数のいずれかが変化した場合には、同様の探索を行うとともに、特定の非零要素に紐付けされた組み合わせに関するデータを各非零要素に関してそれぞれ更新して疎行列のＬＵ分解を行って所定の計算を行うようにしたので、係数の変更回数が多ければ多いほど、演算時間の短縮効果は顕著になる。
【００６１】
さらに、本発明では、プログラムを生成しないためコンパイルが不要であり、手順の記憶は解析プログラムの実行中に行うため、非常に高速である。また、対角要素が零になった場合も、計算手順を変更することで対応可能である。手順の記録のために一定量のメモリ容量を必要とするが、これについては現在のＰＣ環境で十分対応可能な容量である。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施の形態に係る連立一次方程式の演算処理システムを示すブロック図である。
【図２】図１の演算処理システムをコンピュータで構築した場合のコンピュータのブロック図である。
【図３】本発明の実施の形態に係るＬＵ分解を概念的に示す説明図である。
【図４】本発明の実施の形態に係るＬＵ分解の対象となる行列の一例を示す図で、（ａ）が順序付け後の行列を示す説明図、（ｂ）がＬＵ分解後の行列を示す説明図である。
【図５】従来技術に係るＬＵ分解の手順を示すフローチャートである。
【図６】本発明の実施の形態に係るＬＵ分解の手順を示すフローチャートである。
【図７】行列（５×５）の一例を示す説明図である。
【図８】従来技術に係るＬＵ分解を概念的に示す説明図である。
【発明を実施するための形態】
【００６３】
以下、本発明の実施の形態を図面に基づき詳細に説明する。
【００６４】
図１は本発明の実施の形態に係る連立一次方程式の演算処理システムを示すブロック図である。同図に示すように、演算処理システムＩは、入力装置１および出力装置２とともに、回路方程式設定部３、非零要素組み合わせ探索部４、組み合わせデータ記憶部５、ＬＵ分解部６、係数変更検出部７、演算処理部８を有する。かかる演算処理システムＩは図２に示すようなコンピュータで好適に構築し得る。このコンピュータには、図２に示すように、ＣＰＵ１１、ＲＡＭ１２、ＲＯＭ１３、ハードディスク１４等の記憶手段を備え、キーボードや記憶媒体読み取り装置などの入力装置１と、ディスプレイ、プリンタ等の出力装置２が接続されている。
【００６５】
回路方程式設定部３には、解析対象となる回路の連立方程式が行列式の形態で設定されている。すなわち、当該回路の係数行列となる疎行列である（１）式の行列Ａおよびｂが設定されている。非零要素組み合わせ探索部４は、行列Ａの全ての非零要素に対して計算に必要な非零要素の組み合わせを探索し、特定の非零要素に紐付けされた前記組み合わせに関するデータを生成する。組み合わせデータ記憶部５には、各非零要素に関する紐付けデータが記憶してある。ＬＵ分解部６は、前記紐付けデータを参照しつつ、所定の手順（後に詳述する）でＬＵ分解を行う。係数変更検出部７は、行列Ａの係数の変更を検出するとともに、係数が変化したことを検出する毎に、同様の非零要素の組み合わせの探索を非零要素組み合わせ探索部４に行わせる。
【００６６】
ここで変更された組み合わせデータは組み合わせデータ記憶部５に記憶される。すなわち、特定の非零要素に紐付けされた組み合わせに関するデータが各非零要素に関してそれぞれ更新して記憶される。その後、ＬＵ分解部６では更新した疎行列のＬＵ分解を行って所定の計算を行う。演算処理部８は、ＬＵ分解のデータに基づき所定の連立方程式の求解演算を行う。
【００６７】
本形態では、特定の疎行列に対して最初にＬＵ分解を行うときに、データ探索の結果をメモリに記録しておき、次回以降のＬＵ分解では、この情報を用いることで、データ探索に要する計算コストを削減する。以下、その具体的な手順を説明する。
【００６８】
ある疎行列Ａを、（８）式、（９）式によりＬＵ分解し、ＬＵ分解した行列（ＡＬＵ）に変形する過程において、（８）式、（９）式ではｌｊｋｕｋｊの総和を計算している。このとき、ｌｊｋおよびｕｋｊの、どの組合せが非零であるかが事前に分かっていれば、その組合せに対してのみ乗算を行い、和を取ることで、必要最小限の手順で計算を行うことができる。
【００６９】
ここで、図８と同じ９×９行列のl76を求める計算を、本形態により行う場合、非零となる組合せは（ｌ７１，ｕ１６），（ｌ７４，ｕ４６）であるから、図３（ａ）中に示すように、３つの手順だけで計算を行うことができる。
【００７０】
これら３つの手順は全てＬＵ分解の本質的な計算である。一方、図８に示す従来のＬＵ分解の場合には、番号を二重丸で囲んだ本質的な計算以外に、非零要素の探索と、その要素が計算に必要かどうか判断する処理を伴う。その結果として合計１３手順が必要となる。
【００７１】
上記要素l76の計算の場合、本形態では従来のＬＵ分解と比べて１０手順少なく、計算コストを大幅に削減できることがわかる。これは、図３（ｂ）に示すように、本形態では、疎行列の全ての非零要素に対して計算に必要な非零要素の組み合わせを探索し、特定の非零要素に紐付けされた前記組み合わせに関するデータを前記各非零要素に関してそれぞれ格納し、この格納したデータをＬＵ分解の際に使用することができるからである。
【００７２】
前述の通り、瞬時値解析における回路方程式は（１）式の連立一次方程式で表され、回路に時変素子や非線形素子が含まれる場合には、行列Ａの要素の値が変化する。しかし、Ａの非零構造に着目すると、回路に時変素子や非線形素子が含まれていてもこれは不変である。したがって、瞬時値解析を行うにあたり、最初の計算時間ステップにおけるＬＵ分解で、likとukjの非零の組合せをメモリに記憶しておけば、これに続く計算時間ステップにおいては、記憶した情報を用いることにより必要最小限の手順でＬＵ分解を行うことができる。特に、回路に時変素子や非線形素子が含まれ、頻繁にＬＵ分解を必要とする瞬時値解析では、大幅な高速化が期待できる。
【００７３】
上述の如く本形態では、図３（ｂ）に示すように、特定の非零要素に紐付けされた非零要素の組み合わせに関するデータを各非零要素に関してそれぞれ格納しているので、データの格納方法も、従来のスレデッド・リスト法をベースにこれを改良・拡張した新規なデータ格納法を案出した。これを本明細書では、「拡張スレデッド・リスト法」と呼ぶ。
【００７４】
表１に基づき説明したスレデッド・リスト法は、従来のＬＵ分解の手順を効率よく実行できるよう行列の情報を格納したものである。そこで、本形態では、非零組合せ記録による非零要素の組合せ情報を効率よく記録、参照できるようスレデッド・リスト法を拡張するとともに、瞬時値解析を行う場合に有利となる拡張や、要素の参照をより高速に行うための拡張も行った。
【００７５】
拡張スレデッド・リスト法は、１１個の配列を用いて１つの行列を表現する。図７に示した行列を同法で格納したとき、ＬＵ分解前の各配列の内容を表２に、またＬＵ分解後の各配列の内容を表３に示す。
【００７６】
【表２】
0005888782.tif 000013
【００７７】
【表３】
0005888782.tif 000014
【００７８】
表２、表３における配列ＶＡＬ１およびＶＡＬ２は、スレデッド・リスト法のＶＡＬに相当する。ＶＡＬ１には行列Ａの非零要素を格納し、ＶＡＬ２にはＬＵ分解後の非零要素（ＬＵ分解後の行列（ＡＬＵ））を格納する。
【００７９】
上述の通り、瞬時値解析では時変素子の値や非線形素子の動作区間が変化した場合など、Ａの一部の要素の値が変わっただけの行列をＬＵ分解する必要が生じる。このような場合、ＬＵ分解後の非零要素をＶＡＬ１に上書きしていくのではなく、別の配列であるＶＡＬ２に書き込んでいくことにより、Ａの一部の要素の値が変わった場合にはＶＡＬ１の対応する部分の値だけを変更して、ＬＵ分解を再実施することができる。なお、表２は、ＬＵ分解前の状態を示しているため、ＶＡＬ２は初期状態のままである（データは格納されていない）。
【００８０】
表２、表３の配列ＩＲＯＷ、ＪＣＯＬの役割は、スレデッド・リスト法の場合と基本的に同じである。スレデッド・リスト法の場合と異なる点は、行列ＡのサイズがＮ×Ｎのとき、ＩＲＯＷの１〜Ｎ番地には各行に存在する非零要素の数Ｎｒｏｗ,ｉ(i=1,2,…,Ｎ)、ＪＣＯＬの１〜Ｎ番地には各列に存在する非零要素の数Ｎｃｏｌ,ｊ（j=1,2,…,Ｎ)を格納することである。
【００８１】
表２、表３の配列ＡＩＰＴ、ＡＪＰＴはそれぞれ、スレデッド・リスト法のＩＰＴ、ＪＰＴと同じである。配列ＤＩＰＴと、ＤＪＰＴは、ＡＩＰＴとＡＪＰＴのデータ探索方向を逆にしたものであり、ＤＩＰＴは各列を下から上に、ＤＪＰＴは各行を右から左に見たときに、ある非零要素の次に存在する非零要素の番地を格納している。かくして、配列ＤＩＰＴとＤＪＰＴを追加することで、必要なメモリ容量は増加するが、順序付けや最初のＬＵ分解で非零要素の組合せを記録する段階において、処理によってはＡＩＰＴを用いるよりも高速のデータ検索が可能となる。
【００８２】
配列ＤＰＴは、対角要素の番地を格納する。対角要素はＡＩＰＴやＡＪＰＴからも探索可能であるが、ＬＵ分解および後退代入で頻繁に参照されるため、このように専用の配列を用意しておくことで参照を効率化できる。
【００８３】
配列ＲＥＣＰＴおよび配列ＲＥＣは、非零要素の組合せ情報を格納する配列である。表２に示すＬＵ分解前の状態では、ＶＡＬ２同様、データは格納されていない。配列ＲＥＣＰＴ、ＲＥＣの役割については、表３に示すＬＵ分解後のスレデッド・リストを用いて説明する。
【００８４】
図７の行列に対して、TinneyのScheme２と呼ばれる順序付けを適用すると、図４（ａ）に示す行列Ａ′を得る。さらに、これをＬＵ分解すると、図４（ｂ）に示す行列ＡＬＵを得る。このＬＵ分解後の行列ＡＬＵを拡張スレデッド・リスト法で表したものが表３である。なお、図４（ｂ）のハッチング部分（５行３列）にフィル・インが生じたため、表３では表２に比べて配列の要素数が１つ増えている。
【００８５】
配列ＲＥＣＰＴには、配列ＲＥＣに記録された各要素の非零組合せ情報の先頭番地が記録されている。例えば、第６番地の配列ＲＥＣＰＴの要素は１であるから、この要素の非零組合せ情報はＲＥＣの１番地から記録されていることになる。なお。配列ＲＥＣＰＴに値が記録されていない場合（表２では「−」と表示）には、非零組合せが存在しない（likとukjの乗算が全て零となる）ことを意味する。配列ＲＥＣには、まず非零組合せの個数ｎが記録され、続いてｎ組の非零組合せ要素の番地が記録されている。この情報を用いてＬＵ分解を行うときには、ｎを読み込んだ後、続く２つの番地に示された要素の積を該当するＶＡＬ２の値から差し引くという処理をｎ回繰り返すことにより、（８）式もしくは（９）式の分子を算出することができる。表３の６番地の要素の例は、ＩＲＯＷ=２,ＪＣＯＬ=３よりu23の計算に相当する。まず、前述の如く、ＲＥＣＰＴが１であるから、ＲＥＣの１番地を読む。ここに「１」が記録されていることから非零組合せの数が「１」であることが判明し、続く２番地の値が「１５」、「８」であることから、ＶＡＬ２の１５番地の値と８番地の値の積をＶＡＬ２の６番地の値から差し引く。その結果がu23の値となる。以上の計算を式で書くと
【００８６】
【数１１】
0005888782.tif 000015
となる。Ｕを求める（４）式の計算は以上の通りであるが、Ｌを求める（５）式の計算では、結果を対角要素で割る必要がある。対角要素の値は、配列ＤＰＴに記録された番地から直ちに参照することができる。
【００８７】
以上で説明した拡張スレデッド・リスト法は、従来のスレデッド・リスト法に比べると、メモリ容量の節約よりも計算速度の向上を優先した手法になっている。
【００８８】
図５は従来技術に係るＬＵ分解手順を示すフローチャート、図６は本願発明の実施の形態に係るＬＵ分解手順を示すフローチャートである。両図を比較すれば、本形態が、解析準備の直後にＬＵ分解の解析・記録、すなわち疎行列の全ての非零要素に対して計算に必要な非零要素の組み合わせを探索し、特定の非零要素に紐付けされた前記組み合わせに関するデータを各非零要素に関してそれぞれ格納するという処理を行っているので、実際のＬＵ分解に際しては、前処理での内容を用いて必要最小限度の各要素の計算を行えば良い。この結果、可及的に計算の無駄をなくして全体的な演算速度を飛躍的に向上させることができる。
【００８９】
なお、上記実施の形態においては、回路の瞬時値解析を行う場合の連立一次方程式の演算処理システムとして説明したが、用途をこの種の瞬時値解析に限定する必要はない。大きな疎行列である係数行列を有する連立方程式の求解に一般に適用しても同様の効果を得る。この場合、非零構造が変化しないことが前提にはなるが、係数が変更され、都度ＬＵ分解をやり直す、変更回数が多いほど顕著な効果を発揮し得る。
【産業上の利用可能性】
【００９０】
本発明は係数行列が疎行列となる大規模な解析回路の瞬時解析を行うプログラムを作成する産業分野で有効に利用することができる。
【符号の説明】
【００９１】
Ｉ                演算処理システム
１                入力装置
２                出力装置
３                回路方程式設定部
４                非零要素組み合わせ探索部
５                組み合わせデータ記憶部
６                ＬＵ分解部
７                係数変更検出部
８                演算処理部
【図１】
0005888782.tif 000016
【図２】
0005888782.tif 000017
【図７】
0005888782.tif 000018
【図３】
0005888782.tif 000019
【図４】
0005888782.tif 000020
【図５】
0005888782.tif 000021
【図６】
0005888782.tif 000022
【図８】
0005888782.tif 000023