balance
对角线缩放以提高特征值准确性
语法
[T,B] = balance(A)
[S,P,B] = balance(A)
B = balance(A)
B = balance(A,'noperm')
说明
[T,B] = balance(A)
返回相似变换矩阵 T
以使 B = T\A*T
和 B
具有尽可能接近的、近似相等的行列范数。T
是对角矩阵的置换矩阵,其元素是 2 的整数次幂,可防止引入舍入误差。如果 A
是对称的,则 B == A
和 T
是单位矩阵。
[S,P,B] = balance(A)
单独返回缩放向量 S
和置换向量 P
。变换矩阵 T
和平衡矩阵 B
是使用 T(:,P) = diag(S)
和 B(P,P) = diag(1./S)*A*diag(S)
从 A
、S
和 P
求得的。
B = balance(A)
仅返回平衡矩阵 B
。
B = balance(A,'noperm')
缩放 A
,而不会置换其行和列。
示例
此示例说明基本思路。矩阵 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
(比 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
要查看特征向量的作用,请先计算 A
的特征向量,如此处的 V
的列所示。
[V,E] = eig(A); V V = 0.9999 -0.9999 -0.9999 0.0100 0.0059 + 0.0085i 0.0059 - 0.0085i 0.0001 0.0000 - 0.0001i 0.0000 + 0.0001i
请注意,所有三个向量的第一个分量都是最大的。这说明 V
的条件不当;实际上 cond(V)
为 8.7766e+003
。然后,查看 B
的特征向量。
[V,E] = eig(B); V V = 0.6933 -0.6993 -0.6993 0.4437 0.2619 + 0.3825i 0.2619 - 0.3825i 0.5679 0.2376 - 0.4896i 0.2376 + 0.4896i
现在,特征向量将正常运行,并且 cond(V)
为 1.4421
。条件不当数在缩放矩阵中进行了压缩;cond(T)
为 8192
。
本示例较小且并未进行大幅缩放,因此,计算的 A
和 B
的特征值在舍入误差界限内一致;平衡几乎不会对计算结果产生任何影响。
局限性
平衡可能会破坏某些矩阵的属性;请谨慎使用。如果矩阵含有由于舍入误差产生的小元素,平衡可能对其放大,使其与原矩阵中的其他元素一样有效。
提示
非对称矩阵可包含条件不当的特征值。矩阵中的细微扰动(例如,舍入误差)可导致特征值发生巨大扰动。特征向量矩阵的条件数,
cond(V) = norm(V)*norm(inv(V))
其中
[V,T] = eig(A)
将矩阵扰动大小与特征值扰动大小相关联。请注意,
A
自身的条件数与特征值问题不相关。平衡是尝试将任何条件设置错误的特征向量矩阵集中到对角线缩放。平衡处理通常无法将非对称矩阵转换为对称矩阵;它仅尝试使各行的范数等于相应列的范数。
注意
MATLAB® 特征值函数
eig(A)
在计算特征值之前自动平衡A
。使用eig(A,'nobalance')
关闭平衡。