Fortran で非対称複素行列の (複素) 固有値と固有ベクトルを取得するために、Lapack ルーチンzgeevを使用しています。結果として得られる固有ベクトルの配列は、任意の順序になります。固有値の配列と固有ベクトルの行列の対応する列の両方を並べ替えて、固有値が各固有値の実部に対して昇順になるようにしたいと思います。もちろん、独自のソート ルーチンを展開することもできますが、これを実行できる Fortran ルーチンがすでにどこかにあるのではないかと考えていました。
1730 次
2 に答える
0
zsteqr.f (エルミート三重極法ソルバー) の最後を見て、それを一般化することができます。関連するコードは
* Use Selection Sort to minimize swaps of eigenvectors
*
DO 180 II = 2, N
I = II - 1
K = I
P = D( I )
DO 170 J = II, N
IF( D( J ).LT.P ) THEN
K = J
P = D( J )
END IF
170 CONTINUE
IF( K.NE.I ) THEN
D( K ) = D( I )
D( I ) = P
CALL ZSWAP( N, Z( 1, I ), 1, Z( 1, K ), 1 )
END IF
180 CONTINUE
したがって、比較行を変更する必要があると思います(ただし、テストされていません)
イアン
于 2012-01-13T12:01:36.460 に答える