next up previous contents
Next: bell Up: リファレンスマニュアル Previous: atanh

  
balance

【目的】
balance - 非対称行列のバランス化
【形式】
{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 より対称行列に近くなる。
【参照】
eig(2.53), schur(2.204), hess(2.91)


Masanobu KOGA 平成11年10月2日