假设我们有这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)
节目。任何人都可以解释这里发生了什么以及我应该走哪条路?谢谢!
答案 0 :(得分:0)
MATLAB在mldivide
背后有一些严肃的策略:参见documentation的算法部分。我可以想象它决定大小为2×2的反转矩阵是求解的最快方式,因此它调用inv
并因此明确地计算B
的逆。对于较大的矩阵,情况并非如此,如果我选择大小为4×4的随机矩阵,执行isequal
- 句子将返回false。
无论如何,“最佳”方法在很大程度上取决于您的矩阵A
,B
和C
。
经过一些测试,我发现A*inv(B)*C
总是比A*(B\C)
花费更多的时间,这意味着它也可以只是机器精度的东西(参见Dang Khoa的有用评论)。尽管如此,mldivide
与mrdivide
没有单一的“最佳”方法。