MATLAB Function Reference | ![]() ![]() |
表示
[T,
B] = balance(A)
B = balance(A)
詳細
[T,B] = balance(A)
は、対角要素が 2 の整数ベキ乗である対角行列 T
とバランス化された行列 B
を出力します。このとき、 B = D\A
*T
の関係が成り立ちます。A
が対称ならば、B == A
で、T
は単位行列になります。
B = balance(A)
は、バランス化された行列 B
を出力します。
注意
非対称行列は、条件数の悪い固有値をもつ可能性があります。丸め誤差のような行列の中の小さな摂動が、固有値の中で大きな摂動を生じる可能性があります。行列摂動の大きさと固有値摂動の大きさの関係を表す量が、固有ベクトルの条件数です。
cond(V) = norm(V)*norm(inv(V))
[V,T] = eig(A)
バランス化は、固有ベクトル行列の中で悪い条件数の部分を対角スケーリングに割り当てます。通常、バランス化により、非対称行列を対称行列にすることはできません。すなわち、各行のノルムを対応する列のノルムと等価にするだけです。さらに、対角スケールファクタは、丸め誤差を取り込まないように 2 のベキ乗であるように制約を付けます。
MATLAB の固有値を求める関数 eig(A)
は、固有値を計算する前に、自動的にバランス化を行います。バランス化を適用しないためには、eig(A,'nobalance')
と設定してください。
例題
つぎの例題は、基本的な考えを示しています。行列 A
は、右上に大きな要素を、左下に小さな要素をもつ行列です。そして、対称行列とは、ほど遠いものです。
A = [1 100 10000; .01 1 100; .0001 .01 1] A = 1.0e+04 * 0.0001 0.0100 1.0000 0.0000 0.0001 0.0100 0.0000 0.0000 0.0001
バランス化は、2 のベキ乗を要素とする対角 T
行列と行列 A
よりは、より対称に近いバランス化された行列 B
を出力します。
[T,
B] = balance(A)
T =
1.0e+03 *
2.0480 0 0
0 0.0320 0
0 0 0.0003
B =
1.0000 1.5625 1.2207
0.6400 1.0000 0.7812
0.8192 1.2800 1.0000
固有ベクトルへの影響を調べるために、A
の固有ベクトルをまず計算します。
[V,E] = eig(A); V V = -1.0000 0.9999 -1.0000 0.0050 0.0100 0.0034 0.0000 0.0001 0.0001
3 つのベクトルは、すべて最初の要素が最も大きくなっていることに注目してください。これは、 V
が悪い条件数であることを示しています。実際に、 cond(v)
は、1.7484e+05
になります。つぎに、B
の固有ベクトルを調べましょう。
[V,
E] = eig(B); V
V =
-0.8873 0.6933 0.8919
0.2839 0.4437 -0.3264
0.3634 0.5679 -0.3129
固有ベクトルは、条件数が良くなって、cond(V)
は 31.9814
です。この悪い条件は、スケーリングされた行列に集中しています。cond(T)
は 8192
です。
この例題は、小さなモデルで、A
と B
の計算された固有値が、丸め誤差の中に入るもので、実際上は、あまり悪いスケールの例ではありません。それで、バランス化は、計算される結果に影響を与えていません。
アルゴリズム
関数eig
は、自動的に、入力行列にバランス化を行います。 balance
は、LAPACKルーチン DGEBAL
(実数)とZGEBAL
(複素数)を使います。出力 T
を必要とする場合、LAPACKルーチンDGEBAK
(実数) と ZGEBAK
(複素数)を使います。
制限
バランス化は、行列の特性を壊すことがあります。この関数を使うときは、注意してください。ある行列が、丸め誤差による小さな要素を含んでいる場合、バランス化は、オリジナルの行列の他の要素と同じ程度の意味をもたせるようにスケーリングします。
参考
参考文献
Anderson, E., Z. Bai, C. Bischof, S. Blackford, J. Demmel, J. Dongarra, J. Du Croz, A. Greenbaum, S. Hammarling, A. McKenney, and D. Sorensen, LAPACK User's Guide, Third Edition, SIAM, Philadelphia, 1999.
![]() | axis | bar, barh | ![]() |