精度Matlab的斜杠矩阵运算符

时间:2014-10-10 16:27:25

标签: matlab matrix

假设我们有这3个矩阵:

A=[1 3; 2 2];    B=[4 5; 1 3];     C=[0 2; 2 1]

通常,我尝试避免使用inv()或A ^( - 1)并尝试使用正向和反斜杠运算符。但是,如果我想计算以下内容:

A*B^(-1)*C

哪种方式最好:

A/B*C

A*(B\C)

虽然两者都使用斜杠运算符而没有"显式反转"正在计算,结果是一个不同的有趣的,A *(B \ C)计算与我试图避免的那个相同,这是

A*inv(B)*C

作为

isequal(A*(B\C),A*inv(B)*C)

节目。任何人都可以解释这里发生了什么以及我应该走哪条路?谢谢!

1 个答案:

答案 0 :(得分:0)

MATLAB在mldivide背后有一些严肃的策略:参见documentation的算法部分。我可以想象它决定大小为2×2的反转矩阵是求解的最快方式,因此它调用inv并因此明确地计算B的逆。对于较大的矩阵,情况并非如此,如果我选择大小为4×4的随机矩阵,执行isequal - 句子将返回false。

无论如何,“最佳”方法在很大程度上取决于您的矩阵ABC


经过一些测试,我发现A*inv(B)*C总是比A*(B\C)花费更多的时间,这意味着它也可以只是机器精度的东西(参见Dang Khoa的有用评论)。尽管如此,mldividemrdivide没有单一的“最佳”方法。