小弟是新手 想运用矩阵相加的方式来计算
但不知道为什麽矩阵相加後应该为零 但却出现很小很小的数字
首先 我用了回圈的方式 以下是我的写法
Q1=[6.65 5.05 4.5; 5.05 6.65 0; 4.5 0 5.15];
Q2=[6.65 5.05 -4.5; 5.05 6.65 0; -4.5 0 5.15];
Q=[Q1;Q2;Q2;Q1];
h=[-0.3 -0.15 0 0.15 0.3];
B=zeros(3,3);
for i=1:4;
B=1/2.*Q(1+3*(i-1):3+3*(i-1),1:3).*((h(i+1)).^2.-(h(i)).^2.)+B;
end
照理来说 B矩阵应该会为零 可是出现了很小的数字
所以我就把回圈拆开 一个一个相加如下
F=Q(1+(3*(1-1)):3+(3*(1-1)),:)*((h(1+1)).^2.-(h(1)).^2.);
G=Q(1+(3*(2-1)):3+(3*(2-1)),:)*((h(2+1)).^2.-(h(2)).^2.);
H=Q(1+(3*(3-1)):3+(3*(3-1)),:)*((h(3+1)).^2.-(h(3)).^2.);
I=Q(1+(3*(4-1)):3+(3*(4-1)),:)*((h(4+1)).^2.-(h(4)).^2.);
P=F+G+H+I
SS=F+H+G+I
但却发现SS为零矩阵 但P不是
P =
1.0e-16 *
0.555111512312578 0 0
0 0.555111512312578 0
0 0 0
非常诡异的问题
请问一下这要如何解决 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 165.91.12.56
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1424288984.A.821.html
1F:推 JamesChen: 看不懂 你要不要把数学的算式写出来 02/19 07:10
2F:→ JamesChen: 你说的第一种状况纯粹交换顺序不可能会那样 02/19 07:10
3F:→ JamesChen: 应该是你回圈出的问题 尽量避免使用回圈 02/19 07:10
※ 编辑: abudurahim (165.91.12.56), 02/19/2015 07:21:59
4F:→ abudurahim: 抱歉,我多打了一些细节,谢谢你 02/19 07:22
5F:推 sunev: 电脑只能处理有限位的小数 02/19 08:56
6F:推 JamesChen: 我意思是手写的计算是什麽,因为你这样写有点难看懂。 02/20 03:25
7F:→ JamesChen: 我猜是中间有一个互消正负所以为零,另一个相加非常小 02/20 03:25
8F:→ JamesChen: ,被当作0,然後又加上一个正的小数。 02/20 03:25
9F:推 xniux: 我刚刚测试了一下,-0.0675*6.65会多出一点点 02/22 12:53
10F:→ xniux: 造成F有些地方并不是真的理论值 02/22 12:54
11F:推 xniux: 以下是我的猜测: F+H的有效位数比较多(5位数),需要的空间 02/22 12:58
12F:→ xniux: 也比较多,所以刚好把那个微小的错误省略掉了,而F+G则少一 02/22 12:59
13F:→ xniux: 位数,所以一直保留到最後 02/22 12:59
14F:→ xniux: 而为什麽-0.0675*6.65会多,就要请别的大师解释了orz 02/22 13:00