形式陈述
求解 Sylvester 方程公理库Sylvester 方程与谱分离Sylvester equation刻画 AX−XB=C 对所有右端唯一可解的充要条件,并用非正规矩阵说明特征值间距不能代替 sep 敏感性。 时,若把 的所有元素排成向量, 的未知矩阵就会变成 阶线性系统。Bartels–Stewart 算法保留两侧乘法的结构,把任务变成两个较小的分解和一次有序回代。
设 、 且两谱不交。算法如下:
- 计算Schur 分解公理库Schur 分解Schur decomposition · Schur triangularization · Real Schur form用酉或正交相似变换把一般矩阵化为上三角或实准上三角形,作为浮点全谱计算的稳定结构目标。 、。
- 变换右端 。
- 解三角矩阵方程 。
- 恢复 ,并在原坐标中检查 。
复 Schur 形的 为上三角矩阵。设 的第 列为 ,则
因此列号 从小到大推进;每列内部使用上三角回代公理库三角线性方程求解Triangular solve · Forward substitution · Backward substitution按依赖顺序用前代或回代求解三角系统,作为 LU、Cholesky 与 QR 分解后的共同计算底层。,行号 从大到小推进。标量更新为
右端来自 移项,已知列的和应取加号。
回代不变量
开始计算第 列时,所有更早的列都已满足方程。计算本列第 行时,本列更低的各行也已满足方程。上三角结构保证当前方程不再依赖其他未知量,谱不交保证分母非零。更新后不变量向上扩展;整列完成后再向右扩展。
实数据可使用实 Schur 形。这时对角线上有 或 块,后者表示复共轭特征值。仍按块列从左到右、块行从下到上处理,但当前未知量是至多 的矩阵 ,要解
这是至多四个未知数的小系统,不能拆成互不相关的标量除法。
直觉
Schur 变换把两侧的耦合都整理成有方向的依赖。右乘 只把以前的列送进当前列;左乘 只把当前列下面的元素送进上面。于是计算从左下角开始,沿每列向上,再转向下一列。
图中蓝色是当前未知量,绿色是已经完成的量。单向箭头表示公式真正读取的已知数据。酉变换还有一项数值好处:它不放大 Frobenius 范数下的误差;但原方程的 sep 很小时,解本身仍可能敏感。
例子与边界
三列逐一算完
给定
第一列解 。从底部开始: 得 ; 得 ;最后 得 。
第二列右端要先加上 :
解 ,依次得到 、、。
第三列右端为
解 ,依次得到 、、。最终
这九个值不仅给出答案,也逐项展示了“已经完成的列怎样修改下一列右端”。若原问题还有非平凡的 ,必须进一步计算 ;把 直接当作 会混淆坐标。
二阶实块为什么要联立
取
方程为 ,即 、,所以 。只看两个零对角元并逐项除以 ,会错误地得到 。对角二阶块内部的旋转耦合不能丢掉。
缩放输出也是接口的一部分
即使原始数据有限,解也可能大到溢出。LAPACK 的 DTRSYL 允许返回 ,使计算结果满足
此时应按缩放后的方程核验残差,或在确认不会溢出后再除以 scale。把缩放后的 与未缩放的 直接比较,会把正常的防溢出处理误判为算法失败。例程也会报告相同或过近特征值导致的小系统近奇异情形;这种状态应传递给调用者。
推论与应用
两个 Schur 分解需 工作,右端变换和恢复需 ,三角回代也需 。总成本为
存储为 。当 时是立方级工作;对显式 阶稠密向量化系统做一般消元则是六次方级工作。这里的收益来自保留矩阵方程结构。
原方程残差可以使用归一化指标
零分母的全零情形单独处理。这个指标适合检查执行,但要把它转成解误差仍需 sep。矩阵函数的块递推、平方根的方向导数以及控制中的 Lyapunov 方程,都可以复用这个求解核心。
参考资料
- Richard H. Bartels and G. W. Stewart, “Solution of the Matrix Equation ,” Communications of the ACM 15(9), 1972, pp. 820–826:算法的原始出处。论文记录
- LAPACK,
DTRSYL,参数说明及非转置分支:实准三角块回代、scale 输出和近奇异标志。官方文档与源代码
- Nicholas J. Higham, “What Is the Sylvester Equation?”, 2020:Schur 变换与矩阵方程可解性。作者文章