Matlab与R语言运算结果不一致的原因咨询
Matlab与R语言运算结果不一致的原因咨询
Hey there! 我来帮你拆解下为啥这两段代码跑出来结果不一样哈~
首先最直观的原因就是初始数值精度的差异:你提到Matlab里的Y、C、U只保留了四位小数,而R用的是精确值计算。矩阵乘法这类运算对初始的数值误差其实挺敏感的,尤其是当运算涉及多次累加、矩阵相乘时,哪怕是0.0001级别的误差,经过运算放大后,最终结果的差异就会变得很明显。
然后再仔细看两段代码的计算逻辑,可能藏着细微差别:
- R里计算
Fxy时,是把U[[1]](246×1的向量)和转置后的C(1×2的行向量)做矩阵乘法,得到一个246×2的矩阵,再和同维度的Y相减,这个逻辑是通顺的。 - 但你写的Matlab代码里
Fxy=Y-Us{1}*C,按照你说的C是2×1向量、Us{1}是246×1向量的话,Matlab里这行代码应该会报“矩阵维度不匹配”的错误才对,但你说能运行,这说明要么是你在Matlab里的C实际是行向量(1×2),要么是代码里不小心写错了(比如应该是Us{1}*C'来转置C)。如果是前者,那逻辑和R一致,但架不住初始精度差导致结果不同;如果是后者,那计算逻辑本身就不一样,结果自然会有大差异。
最后还有个容易忽略的点:Matlab和R的底层数值实现差异。哪怕初始数值完全一样,这两个语言在矩阵运算的底层库、浮点数舍入规则、计算顺序优化上都可能有细微差别,这些差异也会让最终结果出现微小偏差,再加上你这里初始数值本身就有精度差,偏差自然会更显著。
备注:内容来源于stack exchange,提问作者ann
相关产品推荐
相关产品推荐

