固有値解析
固有値解析
一般化固有値問題
連続体の自由振動解析を行う場合、空間的離散化を行い、図2.3.1に示すような集中質点による多自由度系でモデル化さられる。 減衰のない自由振動問題の場合、支配方程式(運動方程式)は以下のとおりである。
ただし、 は一般化変位ベクトル、 は質量マトリックス、は剛性マトリックスである。 ところで、固有角振動数をとし、、、を任意定数、をベクトルとして、関数
を定義する。ここで、この式と、この2階の微分、すなわち、
を式に代入すれば、
となる。すなわち、
を得る。
つまり、方程式を満たす係数 およびベクトルを見つけられれば、関数は、方程式の解となっている。
係数を固有値、ベクトルを固有ベクトルと呼び、これらを式から求める問題を一般化固有値問題と呼ぶ。
図 2.3.1 減衰のない自由振動の多自由度系の例
問題設定
式は任意の次数に拡張でき、多くの場面で登場する。多くの物理問題を扱う上では行列はエルミート(対称)であることが多い。 即ち、複素行列においては、転置行列が共役複素数になっており、実行列においては対称行列である。つまり、行列の成分をとした時、の共役複素数をとおけば、
の関係にある。
このマニュアル内では、行列は対称で正定値を仮定する。正定値とは固有値がすべて正、言い換えれば下記の式を常に満足する行列である。
シフト付逆反復法
有限要素法による構造解析では、実用上、全ての固有値は必要とせず、高々数個の低次の固有値で十分な場合が多い。 ところで、HEC-MWでは大規模な問題を扱うことを想定しており、行列はサイズが大きく非常に疎(零要素が多い)である。 したがって、この事を念頭に低次のモードの固有値を効率よく求めることが重要である。
固有値の下限をとした時、式を次式のように変形する(数学的には等価な式である)。
この時、計算に当たっては次のような好都合な性質がある。
- モードが反転している。
- 周辺の固有値が最大化されている。
実際の計算では最大固有値が最初に求まることが多い。そのため主要な収束計算を式よりむしろ式に適用し、周辺の固有値から求めることを狙うものとする。この手法は、シフト付逆反復と呼ばれている。
固有値解法のための算法
古典的な方法ではJacobi法がよく知られている。
この方法は、行列サイズが小さく密行列である時、有効である。 しかしながら、HEC-MWで扱う行列は大規模で疎であるため、この方法は採用せずランチョス(Lanczos)反復解法を採用している。
ランチョス法
1950年台にC. Lanczosにより提案されたこの手法は、行列を3重対角化する計算算法であり、下記のような特徴を有している。
- 反復収束解法であり、行列を疎のまま計算を進めることができる。
- 算法は行列、ベクトル積が中心となっており並列化に適している。
- 有限要素メッシュに伴う幾何学的領域分割法に適している。
- 求める固有値の個数やモード範囲を限定して効率よい計算を行える。
ランチョス法は、初期ベクトルからスタートして順次直交ベクトルを作成し部分空間の基底を求める計算を行うものである。 この方法は、別の反復解法であるサブスペース法より高速であると言われ、有限要素法プログラムにて広く使われている。 しかしこの手法では、計算機の誤差の影響を受けやすく、ベクトルの直交性が損なわれ、途中で破綻する恐れを避けられない。 そのため誤差に対する対策は不可欠である。
ランチョス法が持つ幾何学的意味
式を次のように変数変換することにより
問題を書き直すと
を得る。
適当なベクトル に対して行列による一次変換を行う(図2.3.2参照)。
図 2.3.2 行列によるの一次変換
変換されたベクトルは、元のベクトルとつくる空間の中で直交化される。 すなわち、図2.3.2のようないわゆるグラム・シュミットの直交化を行う。 そうして得られたベクトルをとしてそれを正規化(長さ1に)してを得る(図2.3.3)。 同様な算法によりからを得る。 このときは, 両方に直交している(図2.3.4)。 同様の計算を続けると互いに直交するベクトルが最大行列の次数まで求まる。
図 2.3.3 に直交なベクトル
図 2.3.4 とに直交なベクトル
特にランチョス法の算法はベクトル列 , ,
言い換えて , , , ,
に対するグラム・シュミットの直交化である。 このベクトル列をKrylov列と呼び、それがつくる空間をKrylov部分空間とよぶ。 この空間においてグラム・シュミットの直交化を行うと、直近の2つのベクトルを用いることによりベクトルが求まる。 これをランチョスの原理と呼ぶ。
三重対角化
上記繰り返しの中でi+1番目の計算は
と表せる。ただし、
である。これを行列表記すると
となる。ここで、
である。すなわち、式で得られる3重対角行列について固有値計算を行うことにより固有値が得られる。