作者amy2005 (FamilyAlwaysFirst)
看板MATLAB
标题[运算] 求助 简单的矩阵乘法结果怪怪的
时间Thu Jul 20 01:27:39 2017
各位高手晚安~
小妹我刚刚在做一个矩阵乘法时,发现乘出的结果好难理解...
过程是这样的:
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喔~
谢谢大家!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.141.232
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1500485262.A.F65.html
1F:推 sunev: 基本上取inverse 时就爆了 07/20 03:24
2F:→ amy2005: 原来如此! 那请问为甚麽之後改变加法顺序答案居然不一样 07/20 09:37
3F:→ amy2005: 呢?我後来用java测试加法的部分居然和matlab结果一样... 07/20 09:39
4F:→ amy2005: 感谢楼上高手回答!!! 07/20 09:39
5F:推 BrianCashman: 怎麽可能会没有overflow? 容器仅能够装10^308指数 07/20 12:23
6F:推 sunev: 应该在t=H^3+R 就出问题了,有效数字没这麽多 07/20 13:22
9F:→ amy2005: 不好意思~我觉得不会overflow or underflow耶... 07/20 16:21
10F:→ amy2005: 请参考图片, 因最小值为 16*e-42 , 最大值为 16*e-42 + 07/20 16:23
11F:→ amy2005: 1e-100 07/20 16:23
12F:推 BrianCashman: 绝对overflow,4x4算det(R)时 1e-100就已经1e-400了 07/20 16:38
13F:→ amy2005: 嗯嗯!所以是在算inv的时候~ 07/20 16:40
14F:→ BrianCashman: 1e-100对角矩阵不见 你的矩阵行列式就直接变成0 07/20 16:41
15F:→ amy2005: 喔喔!但算行列式时,应该只有算到 (1e-100)^4 和 (1e-10 07/20 17:29
16F:→ amy2005: 0)^3 时才会overflow吧?其他项不会~然後overflow(归0) + 07/20 17:29
17F:→ amy2005: 某数 = 某数 ? 所以行列式值不会为0? 谢谢! 07/20 17:29