通常の行列を並べ替えて対角形をブロックする


8

マトリックスが本来ブロック対角であるが、無作為に基底を選択してランダム化されている場合、マトリックスをブロック対角形式に再配置するアルゴリズムはありますか?

特に、このためのPythonモジュールはありますか?


2
置換または基底の変更によってマトリックスを「再配置」しますか?
クリスチャンクラソン2013年

1
私はもともと、実行しやすいと思う基礎を並べ替えることを意図していました。基底が変化する場合は、行列がハミルトニアンである場合、いくつかの物理的な引数を取ることで実行できますが、いくつかの一般的な行列では、それは非常に困難です。
機械

回答:


7

行列は疎ですか、密ですか?対称ですか?

n×nAijAij0

行列が(並べ替えまで)ブロックの対角線であるという事実は、グラフが接続されていないことを意味し、ブロック内のどの頂点を一緒にする必要があるかを見つけることは、グラフの接続されたコンポーネントを見つけることと同じです。これを行うには、幅優先検索を使用します。マトリックスの逆Cuthill-McKee順序付けは基本的に幅優先検索であるため、RCM順序付け用の誰かのPythonコードを見つけ、それを直接使用するか、目的に合わせて変更することができます。


ありがとう!行列がスパースで対称(エルミート)であると仮定します。
マシン

3

すべての行列は基底の賢い選択でブロック対角です-これはJordan正規形と呼ばれ、基底はその一般化された固有ベクトルで構成されます。行列が対称である場合、この基底は固有ベクトルで構成され、QRアルゴリズムなどを使用して計算できます。SciPyは、linalg.qr必要なQR分解を計算するモジュールを提供します。それ以外の場合は、を使用して計算できる特異値分解を使用できますlinalg.svd


2
数値的に不安定であるため、ジョーダン正規形を使用することは非常に悪い考えです。より良い選択は、行列を上三角の行列に再配置することを犠牲にして、数値的に安定しているSchur分解です。
Geoff Oxberry 2013年

もちろん、対称行列を除いて計算することはお勧めしませんでした。対称行列はシューア分解と一致します(QRアルゴリズムを使用して安定して計算できます)。一般的な非対称行列の場合、SVDよりも行列を対角化するためのより良いアプローチを知りません。
クリスチャンクラソン2013年

2
そして、それは良い点です。SVDがマトリックスを「対角化」するとは言いません。対角行列を含む分解を生成しますが、対角化は伝統的に、結果として対角(またはブロック対角)行列をもたらす相似変換(またはそのような変換/基底変化に基づく分解)を指すために使用されます。SVDは類似性変換ではありませんが、非常に有用な分解です。
Geoff Oxberry 2013年

ポイントを取る(そしてその意味ですべての行列が対角化できるわけではない)。非ユニティ相似変換による対角化は非常に不安定になる可能性があることも指摘しておきます。
クリスチャンクラソン2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.