在Matlab中,您可以使用'nobalance'
选项发出eig
函数。它与默认的有什么不同?
答案 0 :(得分:3)
来自mathworks文档:
平衡选项,指定为一个两个字符串:
'balance'
,启用初步平衡步骤,或'nobalance'
禁用它。在大多数情况下,平衡步骤可以改善A
的条件,从而产生更准确的结果。但是,有些情况下平衡会产生不正确的结果。 当'nobalance'
包含其比例显着不同的值时指定A
。例如,如果A
包含非零整数,以及非常小(接近零)的值,那么平衡步骤可能会缩小小值,使它们与整数一样重要,并产生不准确的结果。
编辑:相关函数balance
被认为是eig
中的默认前一步。
注意documentation中的几行 - "病态调节集中在缩放矩阵中#34; ...."如果矩阵包含由于舍入误差引起的小元素,则平衡可能会将它们缩放以使它们与原始矩阵的其他元素一样重要。"
所以,我对@ Isopycnal的问题的回答是" nobalance
在处理病态矩阵时抑制了舍入误差的放大"。以下几点可能会有所帮助 -
A
基本上执行相似性变换B = T\A*T
,其中B
被称为"平衡矩阵"。 T
中。根据{{1}}的{{3}},"在大多数情况下,平衡步骤改善了A的调节以产生更准确的结果。 " eig
)与大的一样重要(比如1e-9
)。 没有仔细思考已经知道结果不太精确。 我知道它与Matlab在执行1e10
时选择的矩阵分解算法有关,例如"铅笔分解LU分解等",正如@ EJG89指出的那样。但是,我记忆深刻地埋没了:(任何知道Matlab如何执行eig
等命令的人请考虑扩大这个答案!谢谢!
答案 1 :(得分:1)
为了完整起见,平衡方法与LAPACK的'01'.upto('10').to_a
#=> ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10"]
和?GEBAL
例程一致,但是一些测试表明存在一些修改,因为结果偶尔会有所不同。
平衡有助于通过相似性转换改善条件。但是,在某些情况下,平衡实际上会使问题变得更糟。记录的案例包括Hessenberg矩阵和具有数值噪声的矩阵,该算法通过缩放放大,算法试图与实际数据平衡。根据问题,数据矩阵也被置换,以使矩阵尽可能地呈现上三角形。
平衡算法也可以通过?GEBAK
使用
工具箱深处的其他相关平衡例程是来自控制系统工具箱的balance.m
和mscale.m
例程,它们提供更精确的控制(借口双关语)。