C#中使用MathNet求解Ax=B时QR.Solve报维度不匹配错误如何解决
问题解决方法
报错原因
你遇到的维度报错是MathNet.Numerics的QR分解默认配置导致的,和原始矩阵、向量的维度兼容性无关:
- 无参调用
A.QR()时默认使用QRMethod.Full模式,会生成n×n的完整正交矩阵Q、n×m的上三角矩阵R,该模式下的Solve方法仅支持求解方阵的适定方程组,处理超定/欠定方程组时内部因子维度不匹配就会抛出异常。 - 你之前用伪逆计算的是矩阵方程的最小二乘/最小范数解,默认Full模式的QR分解不支持这类场景的直接求解。
修复方案
如果你的场景是n≥m的超定方程组/方阵(绝大多数需要替代伪逆提升效率的场景都符合这个条件),只需要指定使用薄QR分解模式即可:
var qr = A.QR(QRMethod.Thin); var x = qr.Solve(B);
该模式下会生成n×m的精简正交矩阵Q、m×m的上三角矩阵R,调用Solve方法可以直接得到和伪逆结果一致的最小二乘解,计算效率远高于伪逆实现。
如果你的场景是n<m的欠定方程组,QR分解无法直接求解最小范数解,建议继续使用伪逆或者改用SVD分解实现。
内容的提问来源于stack exchange,提问作者David Holdaway
相关产品推荐
相关产品推荐

