Matlab eig函数中的nobalance选项究竟是什么?

时间:2014-07-24 04:23:19

标签: matlab eigenvector eigenvalue

在Matlab中,您可以使用'nobalance'选项发出eig函数。它与默认的有什么不同?

2 个答案:

答案 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的调节以产生更准确的结果。 "
  • 然而,平衡病态(意味着非常大规模)矩阵会扩大舍入误差,因为Matlab正在尝试制作小值(例如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.mmscale.m例程,它们提供更精确的控制(借口双关语)。