MATLAB Function Reference |
Syntax
[T,
B] = balance(A)
B = balance(A)
Description
[T,B] = balance(A)
傳回對角矩陣 T
(其元素為2的整數次方),和一個平衡矩陣 B
使得 B = T\A
*T
。若 A
是對稱矩陣, 則 B == A
且 T
是單位矩陣。
Remarks
非對稱的矩陣會有 poorly conditioned 的特徵值。像是捨位誤差,會導致產生錯誤的特徵值。我們可以參考其條件數(condition number)的值來判定這個問題
cond(V) = norm(V)*norm(inv(V))
[V,T] = eig(A)
平衡(balancing)會試著去使任何 ill conditioning 的特徵向量矩陣轉化成 diagonal scaling。平衡通常不會使非對稱的矩陣轉為對稱的矩陣,它只會試著使每一列的 norm 等於對應的每一行的 norm。更進一步的來看, diagonal scale factors 會侷限在2的次方所以不會受到捨位誤差的影響。
eig(A)
在計算特徵值前會自動去平衡 A
,可以用 eig(A,'nobalance')
使它不要先平衡。
Examples
矩陣 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
平衡會產生一個對角矩陣 T
(其元素為2的次方) 和一個平衡矩陣 B
, B
會比 A
來的對稱。
[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.7813
0.8192 1.2800 1.0000
[V,E] = eig(A); V V = -1.0000 0.9999 0.9937 0.0050 0.0100 -0.1120 0.0000 0.0001 0.0010
這三個向量的第一個 component 都是最大的,這表示 V
是 badly conditioned ,事實上 cond(V)
等於 8.7766e+003
。接下來我們看 B
的特徵向量。
[V,
E] = eig(B); V
V =
-0.8873 0.6933 0.0898
0.2839 0.4437 -0.6482
0.3634 0.5679 -0.7561
而現在這些特徵向量已調整過了且 cond(V)
的條件數等於 1.4421
。Ill conditioning 會集中在 scaling matrix, cond(T)
等於 8192
。
這個例子不是屬於非常明顯變化的,所以算出來 A
和 B
的特徵值會蠻近似的,平衡對結果只產生些微的影響。
Algorithm
eig
函式會自動的去平衡輸入的矩陣。 balance
會用 LAPACK 程序 DGEBAL
(實數) 和 ZGEBAL
(複數)。 若需要 T
, 也可以用 LAPACK 程序 DGEBAK
(實數) 和 ZGEBAK
(複數)。
Limitations
平衡會改變特定矩陣中的一些性質,使用時要多留意。若一個矩陣包含值很小的元素(由捨位誤差所造成的), balancing 會把它們標準化,就像矩陣中其他元素標準化一樣。
See Also
References
[1] 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 |