MATLAB也会出错?
写了个很简单的程序function =check()
ex=2;
F=[;;;...
;]; %
fanzahl=length(F(:,1)); % 5
X=abs(F(1:fanzahl,3)-F(1:fanzahl,1));% x-length of every F
Y=abs(F(1:fanzahl,2)-F(1:fanzahl,4));% y-length of every F
ey=abs(ex*Y./X);
for i=1:fanzahl
p(ey(i));
end
end
%%function []=p(ny)
ny
0:ny
end
运行以后结果是这样的
ny =
10
ans =
0 1 2 3 4 5 6 7 8 9 10
ny =
10
ans =
0 1 2 3 4 5 6 7 8 9 10
ny =
20
ans =
Columns 1 through 14
0 1 2 3 4 5 6 7 8 9 10 11 12 13
Columns 15 through 21
14 15 16 17 18 19 20
ny =
20
ans =
Columns 1 through 14
0 1 2 3 4 5 6 7 8 9 10 11 12 13
Columns 15 through
21 14 15 16 17 18 19 20
ny =
20.0000
ans =
Columns 1 through 14
0 1 2 3 4 5 6 7 8 9 10 11 12 13
Columns 15 through 20
14 15 16 17 18 19
看到没有, 最后一个ny=20.000, 不再是整数了, 后面的0:ny只到19, 而不是像前出的一样到20.
什么问题? MATLAB出错了?
看看如下的值, 不等於0.26
format long e; xx=2.66-2.4
还有matlab1本来就不是整数 哈哈,这不是matlab的问题,是计算机二进制产生的截断误差,你冤枉“好人”了 本帖最后由 cdstudio 于 2011-9-19 08:48 编辑
feynmand 发表于 2011-9-19 03:13 http://forum.simwe.com/static/image/common/back.gif
哈哈,这不是matlab的问题,是计算机二进制产生的截断误差,你冤枉“好人”了 ...
问题是这样的没错, 可是这个数组的3,4,5元素的值应该完全一样才对, 为什么却只是最后一个出这种误差, 而前面却不出现问题:)
而且最关键的是, 这种小误差会让编程的人防不胜防, 你不知道它什么时候就会出现这种情况, 而且还不能避免.
上面数组中的X(3)和X(5)是并不相等的。
>> a=0;
>> for n=1:10000
a=a+0.01;
end
>> a
a =
1.000000000000143e+002
楼上可以验证一下以上的程序,10000个0.01相加竟然不等于100。这就是截断误差。虽然数字一样,但是由于小数点的位置不同产生的结果误差大小也不同。楼上需要深入学习理解一下计算误差的相关知识,然后才能知道是为什么,知道如何避免这种错误。这不是一个帖子可以说清楚的 ..........這應該是疊代次數的關西= =...因為你所設定疊代關西並不是解析解,而是近似解的關西,這是我的理解,不知道我的觀念有沒有錯誤,請多給我指教^^
我覺得疊代次數多的話,理論上結果應該一樣= =
页:
[1]