{D,B} = balance(A)
Matrix D,B;
Matrix A;
【詳細】
{D,B} = balance(A) は,対角成分が 2 のべき乗である対角行列 D
と,B = D ¥
A * D を満たすバランス化された行列 B を求める。
行列 B は,行列 A より対称行列に近く,各行のノルムが対応する
列のノルムに近い。
固有値を求める関数 eig(A) は,A の固有値を計算する前に,自動
的に A をバランス化する。
【算法】
balance はEispackのFortranサブルーチン balanc と balbak
をCの関数に変換したものを利用する。
【例題】
右上の成分に大きな値,左下に小さな値がある行列
>> A = [[ 1 100 10000]
[ 0.01 1 100]
[0.0001 0.01 1]
に対して,balance()を適用すると,
>> {D,B} = balance(A);
>> print D, B;
=== [D] : ( 3, 3) ===
( 1) ( 2) ( 3)
( 1) 2.0480000E+03 0.0000000E+00 0.0000000E+00
( 2) 0.0000000E+00 3.2000000E+01 0.0000000E+00
( 3) 0.0000000E+00 0.0000000E+00 2.5000000E-01
=== [B] : ( 3, 3) ===
( 1) ( 2) ( 3)
( 1) 1.0000000E+00 1.5625000E+00 1.2207031E+00
( 2) 6.4000000E-01 1.0000000E+00 7.8125000E-01
( 3) 8.1920000E-01 1.2800000E+00 1.0000000E+00
となり,行列 B が 行列 A より対称行列に近くなる。
【参照】