楼主:
amy2005 (FamilyAlwaysFirst)
2017-07-20 01:27:39各位高手晚安~
小妹我刚刚在做一个矩阵乘法时,发现乘出的结果好难理解...
过程是这样的:
H = 1e-14 * ones(4) (一个4*4, 每个元素皆为1e-14的方阵)
R = 1e-100 * eye(4) (一个对角矩阵,对角元素皆为1e-100)
t = H * H * transpose(H) + R
t = inv(t)
最后t的结果长这样:(一个4*4矩阵, 以下结果为求干净只显示到小数点后第3位)
row1: 5.629e+56 , -6.938e+24 , -6.25e+40 , -5.629e+56
row2: -6.938e+24 , 5.070e+72 , -5.629e+56 , -5.070e+72
row3: -6.25e+40 , -5.629e+56 , 4.567e+88 , -4.567e+88
row4: -5.629e+56 , -5.070e+72 , -4.567e+88 , 4.567e+88
之后我计算 H*t,
结果居然是个元素全都是0的4*4矩阵...
全都是0耶...好奇怪...看起来就不对阿
然后我尝试只算第一项,
也就是 H(1,1)*t(1,1) + H(1,2)*t(2,1) + H(1,3)*t(3,1) + H(1,4)*t(4,1)
正解应该是 (5.629e+56 -6.938e+24 -6.25e+40 -5.629e+56) * 1e-14 ,约为-6.25e+26
但matlab跑出结果 = 0
然后我还是不死心,改变加法顺序,
变成 H(1,1)*t(1,1) + H(1,4)*t(4,1) + H(1,2)*t(2,1) + H(1,3)*t(3,1)
跑出结果 = 6.1294e+26
疴.......交换加法顺序结果居然不一样! 而且都是错的!
后来再用java算 , 结果也是错的....
请问各位matlab高手有碰过类似的状况吗~~
p.s. 这些算术都没有overflow或underflow喔~
谢谢大家!
楼主: amy2005 (FamilyAlwaysFirst) 2017-07-20 09:37:00
原来如此! 那请问为什么之后改变加法顺序答案居然不一样呢?我后来用java测试加法的部分居然和matlab结果一样...感谢楼上高手回答!!!
作者: BrianCashman (最强⑨番-さるの) 2017-07-20 16:38:00
绝对overflow,4x4算det(R)时 1e-100就已经1e-400了
楼主: amy2005 (FamilyAlwaysFirst) 2017-07-20 17:29:00
喔喔!但算行列式时,应该只有算到 (1e-100)^4 和 (1e-100)^3 时才会overflow吧?其他项不会~然后overflow(归0) +某数 = 某数 ? 所以行列式值不会为0? 谢谢!