Matlab与Octave中mldivide运算符优先级疑问及Bug咨询
这个问题问得很到位!我来帮你理清楚Matlab和Octave里\(也就是mldivide运算符)的优先级问题,以及要不要提交Bug。
1. Matlab中的行为和Octave一致吗?
完全一致!
在Matlab的运算符优先级规则里,矩阵乘法*、左除\、右除/属于同一优先级,而且遵循左结合的计算顺序——简单说就是表达式从左到右依次运算。所以你写的d*FT\N会被解析成(d*FT)\N,而不是你预期的d*(FT\N),这和你在Octave里观察到的结果完全一样。
举个实际测试的例子就明白了:
假设d=2(标量),FT=[1 2; 3 4](2x2矩阵),N=[5;6](2x1向量):
- 先算
(d*FT)\N:得到d*FT = [2 4;6 8],再左除N,结果是[-0.25; 1.375] - 再算
d*(FT\N):先得到FT\N = [-4; 4.5],乘以d后结果是[-8;9]
在Matlab里直接运行d*FT\N,得到的是[-0.25; 1.375],和前者完全一致,说明解析顺序确实是左结合。
2. 需要提交Bug报告吗?
完全不需要!这个现象不是Bug,而是严格遵守了Matlab和Octave共同的运算符优先级规范。
如果想要得到你预期的d*(FT\N)结果,只需要给运算加个括号明确顺序就行:d*(FT\N),这样就能得到你想要的计算结果了。
内容的提问来源于stack exchange,提问作者Lorin
相关产品推荐
相关产品推荐

