この例のような行列があります (実際の行列はもっと大きくなる可能性があります)
A = [-1 -2 -0.5;
0 0.5 0;
0 0 -1];
線形独立固有値が 2 つしかない (固有値 -1 が繰り返される)。一般化された固有ベクトルを使用して完全な基底を取得したいと考えています。これを行う方法の 1 つjordan
は、Symbolic Math ツールボックスの Matlab の関数を使用することですが、数値入力用に設計されたものを好みます (実際、2 つの出力があるjordan
場合、大きな行列では失敗します:「MuPAD コマンドのエラー: 類似度行列が大きすぎます)」 .")。ジョルダンの正準形式は必要ありません。これは、数値コンテキストでは不安定であることで有名であり、一般化された固有ベクトルの行列だけです。これを数値的に安定した方法で自動化する関数または関数の組み合わせはありますか、または一般的な手動の方法を使用する必要がありますか (そのような手順はどれほど安定していますか)?
注: 「一般化された固有ベクトル」とは、いわゆる欠陥行列の不完全な基底を補強するために使用できるゼロ以外のベクトルを意味します。orを使用して一般化固有値問題を解くことで得られる固有値に対応する固有ベクトルを意味するわけではありません(この後者の使用法は非常に一般的ですが、避けるのが最善だと思います)。誰かが私を正してくれなければ、この 2 つが同じだとは思えません。eig
qz
更新 1 – 5 か月後:
82 行 82 列より大きい行列の一般化された固有ベクトルを記号的に取得する方法については、こちらの回答を参照してください (この質問のテスト行列の制限)。
私はまだ数値スキームに興味があります (または、それらがすべてヨルダン形式の計算に関連している場合、そのようなスキームがどのように不安定になる可能性があるか)。この質問の複製としてマークされている線形代数101メソッドをやみくもに実装したくはありません。これは数値アルゴリズムではなく、学生を評価するために使用される鉛筆と紙の方法です(実装できると思いますただし、象徴的に)。誰かがそのスキームの実装またはその数値解析のいずれかを教えてくれるなら、私はそれに興味があります.
更新 2 – 2015 年 2 月: R2014b でテストされているように、上記のすべてが依然として当てはまります。