Lanczos法による固有値解析
理論と物理
概要
先生、モーダル解析をするとき「Lanczos法で固有値を解いています」ってよく表示されますよね? これって何をやってるんですか?
構造解析のモーダル解析では「構造の固有振動数とモード形状」を求める必要がある。これは数学的に $n \times n$ 行列の固有値問題になるんだが、大規模FEMモデルでは $n$ が100万を超えることもある。Lanczos法はKrylov部分空間という巧みなアルゴリズムで「低次の固有値(低周波モード)」だけを非常に効率的に求める反復法だよ。1950年にCornélius Lanczosが提案した古典的な手法だが、大規模問題への有効性が再評価されて現代のFEMソルバーの標準アルゴリズムになっている。
「低次の固有値だけ」というのは、なぜそれで十分なんですか? 高次のモードも必要じゃないですか?
構造の動的応答は通常、低次のモード(基本振動数に近い)が支配的だよ。例えば自動車のNV(騒音振動)解析では20〜200Hzの範囲のモードが重要で、それ以上の高次モードは全体応答への寄与が小さい。有効質量比(Modal Effective Mass Ratio)が90%以上になるまで低次モードを取れば、多くの実務問題で十分な精度が得られる。
「Krylov部分空間」というのが出てきましたが、これって直感的にどういう意味ですか?
ざっくり言うと「ある行列 $A$ に初期ベクトル $v$ を繰り返し掛けていったときに張られる部分空間」だ。$\{v, Av, A^2v, A^3v, \ldots, A^{m-1}v\}$ の組み合わせで作られる $m$ 次元の空間で、$m \ll n$ でも $A$ の低次固有ベクトルをよく近似できる性質がある。LU分解のように$n^3$に比例するのでなく、$m$ 回の行列-ベクトル積($O(n)$相当)で済むから大規模問題に圧倒的に有利なんだ。
一般化固有値問題
モーダル解析の固有値問題ってどんな形ですか?
FEMの運動方程式(非減衰系):
$\{u\} = \{\phi\}e^{j\omega t}$ を代入すると一般化固有値問題になる:
$[K]$ は剛性マトリクス(対称正定値)、$[M]$ は質量マトリクス(正定値)、$\omega$ は角固有振動数、$\{\phi\}$ はモード形状ベクトル(固有ベクトル)。$n$ 個の固有対 $(\lambda_i, \phi_i)$ が存在するが、最低次の $m$ 個($m \ll n$)だけを求めるのがLanczos法の役割だ。
$M$-直交性(質量マトリクスで直交)って普通の直交とは違うんですか?
異なるよ。通常の直交は $\phi_i^T \phi_j = 0$($i \neq j$)だが、FEMの一般化固有値問題では $M$-直交性 $\phi_i^T M \phi_j = 0$($i \neq j$)と $K$-直交性 $\phi_i^T K \phi_j = 0$ が成り立つ。Lanczos法でのベクトル直交化も $M$-内積を使う。これがモーダル解析の応答分解(モーダルスーパーポジション)を可能にする数学的根拠だ——各モードが独立した1自由度系として振る舞えるのはこの直交性のおかげだ。
Lanczosアルゴリズム
Lanczosのアルゴリズムってどんな流れですか?
Lanczosアルゴリズムは繰り返し行列-ベクトル積を使って Krylov 部分空間 $\mathcal{K}_m(A, v_1) = \text{span}\{v_1, Av_1, A^2v_1, \ldots, A^{m-1}v_1\}$ を構築する。$A = K^{-1}M$(スペクトル変換後)として:
- ステップ1:初期ベクトル $v_1$ を選択(乱数またはユーザー指定)
- ステップ2:$A v_j$ を計算($K$ の因数分解が必要)
- ステップ3:$v_{j+1}$ を前ステップのベクトルと直交化(Gram-Schmidt法)
- ステップ4:$m \times m$ の三対角行列 $T_m$ を組み立て、その固有値を求める
- ステップ5:$T_m$ の固有値が収束したら、元の空間に変換して固有ベクトルを回収
重要なのはステップ2で $K$ の連立方程式 $Kx = Mv_j$ を解く必要があること。直接法(LU分解)か反復法(PCG)を使う。
最終的に $m \times m$ の三対角行列 $T_m$ を解くのはなぜ三対角なんですか?
それがLanczos法の美しいところだ。直交化の結果として、$A$ の Krylov 基底 $\{v_1, \ldots, v_m\}$ に関する行列表現が自然に三対角になる:
対角要素 $\alpha_j$ と副対角要素 $\beta_j$ だけ保存すれば済む。$m \times m$の三対角行列の固有値問題はQR法で $O(m^2)$ で解けるから非常に高速だ。$m$ は通常50〜300程度で、元の $n$(数百万)と比べて圧倒的に小さい。
数値解法と実装
再直交化と数値安定性
Lanczos法は「丸め誤差で数値的に不安定になる」って聞いたんですが、本当ですか?
その通り。浮動小数点演算の丸め誤差で直交性が失われ、同じ固有値が複数(ゴースト固有値)として現れる問題が知られている。対策:
- 完全再直交化(Full Reorthogonalization):各ステップで全ての Lanczos ベクトルと再直交化。安全だがメモリと計算量が増える。
- 選択的再直交化(Selective Reorthogonalization):収束した固有ベクトルとだけ再直交化。効率的。NastranやAbaqusはこの方式が多い。
- ブロックLanczos法:複数の初期ベクトルを使ってブロック単位で操作。重複固有値の問題に対処。
ゴースト固有値を見分けるにはどうすればいいですか?
幾つかの診断方法がある:
- Sturm数チェック:$K - \lambda M$ の負の対角ピボット数がそのシフト点以下の固有値数と一致するか確認。Nastranは自動的に実行する。
- 残差ノルム:$\|K\phi - \lambda M\phi\| / \|\phi\|$ が機械精度($10^{-10}$ 程度)以下かチェック。ゴーストは残差が大きい。
- モード形状の物理的検証:同一の固有値で2つのモード形状が出たら一方はゴースト(物理的に意味のない振動形状)。
スペクトル変換(シフトインバース法)
高い周波数域の固有値だけを求めたい場合、どうすればいいですか?
スペクトル変換(Shift-and-Invert)を使う。シフト値 $\sigma$(目的周波数の近傍に設定)を導入して:
$\sigma$ に近い固有値 $\lambda$ に対応する $\mu$ が最も大きくなるため、Lanczos法が $\sigma$ 周辺の固有値から優先的に収束する。FEASEやNastranのブロックLanczosではシフト点の自動選択機能を持ち、指定した周波数帯の全固有値を取りこぼしなく求めることができる。
実践ガイド
NV解析のモード数設定
エンジンのNV解析でモーダル解析をやっています。何次まで固有値を求めればいいですか?
有効質量比(Effective Mass Ratio)を基準にするのが実務標準だよ。
- 対象周波数帯の設定:解析したい最高周波数の2〜2.5倍まで固有値を求める。例えば1kHzまでなら2〜2.5kHzまで。
- 有効質量比確認:各方向(X, Y, Z)の累積有効質量比が90%以上になるまで固有値を増やす。
- 適切なモード数:実務的には50〜200モード程度で十分なことが多い。フルモデルの場合は300以上必要なこともある。
- 拘束条件の確認:剛体モード(固有振動数 ≈ 0)が正しく6個(3並進+3回転)現れているか確認。多い場合は境界条件の設定が不完全。
有効質量比は各ソフトウェアのどの出力で確認できますか?
主要ソルバーでの確認方法を示そう:
- Nastran(SOL 103):.f06ファイルの「MODAL EFFECTIVE MASS TABLE」。各モードのX/Y/Z/RX/RY/RZ方向の寄与と累積値を出力。
- Ansys Mechanical:Solution > Frequency Response > Participation Factorの出力。
- Abaqus:.datファイルの「MODAL EFFECTIVE MASS」出力(*FREQUENCY解析のPRINT=YES)。
- OptiStruct:.outファイルのGEFF(Generalized Effective Fraction)テーブル。
実務では累積値が90%未満の場合はモード数を増やし、モード追加しても数%未満の場合はそこで打ち切るのが合理的な判断基準だ。
実践チェックリスト
- 拘束条件を確認:剛体モード数が6個(完全自由)または0個(完全拘束)かチェック
- 対象周波数帯の上限×2.5倍まで固有値を計算
- 各方向の累積有効質量比が90%以上になるまでモード数を増加
- Sturm数チェックまたは同等の固有値カウント検証を実行
- ゴースト固有値の疑いがあれば残差ノルムを確認
- 重複または近接固有値が予想される場合はブロックLanczos法を使用
- メモリ不足の場合はHDDへの中間ベクトルのスワップを許可(速度低下覚悟)
- 結果の物理的検証:第1モード形状が設計の直感と整合するか確認
ソフトウェア比較
主要FEMツールでのLanczos法の実装を比較してください。
主要ツールの比較を見てみよう。
| ツール | 固有値ソルバー | デフォルト手法 | 特徴 |
|---|---|---|---|
| MSC Nastran | LANCZOS(SOL 103) | Block Lanczos | 業界標準、Automated Component Mode Synthesis、Sturm自動チェック |
| Ansys Mechanical | Block Lanczos, QRDAMP | Block Lanczos | 減衰系はQRDAMP推奨、AMG前処理で大規模対応 |
| Abaqus | Lanczos(*FREQUENCY) | Lanczos | SIM架構で大規模問題に対応、非線形前荷重後のモーダル可能 |
| OptiStruct | AMSES(AMG Lanczos) | AMG+Lanczos | 超大規模問題に特化(1億DOF以上対応) |
| Code_Aster | Lanczos / LOBPCG | Lanczos | オープンソース、並列計算対応 |
先端技術
Lanczos法の最新発展はどんなものですか?
大規模問題への対応が最大のテーマだよ。
- FEAST固有値ソルバー:スペクトル投影法(コンター積分)を使って指定周波数帯の固有値だけを並列に求める。Lanczosより大規模・高周波問題に強い。Ansys 2022R2以降に搭載。
- ランダム化SVD + Lanczos:ランダム化行列を用いた高速Lanczos変種。GPUとの相性が良く、RTX A6000で100万DOFを数分で解析できる事例が報告されている。
- 量子固有値解法:VQE(変分量子固有値ソルバー)はまだ研究段階だが将来有望。
- 自動化サブストラクチャリング:Craig-Bampton法との組み合わせで超大規模モーダル解析。部品ごとにLanczosを実行して最後にシステム合成する並列化戦略。
FEAST固有値ソルバーはLanczosより優れているんですか? どこが違うんでしょう?
目的によって違う。FEAST の最大の利点は「指定した周波数区間 $[\lambda_a, \lambda_b]$ の全固有値を漏れなく求める」ことが保証される点——Lanczosはシフトを適切に設定しないと固有値の見落としが起きる可能性がある。ただしFEASTはコンター積分のために複数の線形解を解く必要があり(通常16〜32回)、少数の固有値を求めるだけならLanczosの方が効率的。幅広い周波数帯で高密度の固有値分布がある場合はFEASTが有利だ。
Lanczosと数値線形代数の歴史
Cornélius Lanczosは1950年にこのアルゴリズムを提案したが、当時のコンピュータでは数値不安定性の問題が解決できず「失敗した手法」として長年忘れられていた。1970年代にParlett・Scottが再直交化の重要性を発見してから再評価が始まり、1980〜90年代のワークステーションの普及とともに大規模FEMの標準手法として復活した。科学の歴史は「時代が追いつくのを待つ」ことの連続だと言える。
トラブルシューティング
固有値解析でよくあるエラーを教えてください。
ゴースト固有値、負の固有値、剛体モードの不整合、収束しないなど様々なトラブルがある。
| 症状 | 主な原因 | 対策 |
|---|---|---|
| 剛体モードが7個以上出る | 境界条件の設定不足(拘束点が足りない) | 多点拘束(RBE2等)の設定を確認、全6自由度の拘束を確保 |
| 負の固有値が出る | 剛性マトリクスが非正定値(接触・座屈前処理の不正) | 非線形前荷重ステップの収束確認、接触条件の見直し |
| ゴースト固有値が出現 | 完全再直交化の非実行、丸め誤差蓄積 | 再直交化オプションをON、Sturm数チェックで検証 |
| 固有値が収束しない | Lanczos部分空間次元数mが小さすぎる | mを要求モード数の2〜3倍に設定(例:100モード要求→m=250) |
| 近接固有値が1つしか出ない | 対称形状の重複固有値、スカラーLanczosの限界 | ブロックLanczosに変更(ブロック幅≥2) |
ゴースト固有値、負の固有値、収束失敗、剛体モード数の不整合など詳細解説