cdstudio 发表于 2011-9-16 20:35:33

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出错了?



ChaChing 发表于 2011-9-17 00:42:51

看看如下的值, 不等於0.26
format long e; xx=2.66-2.4
还有matlab1本来就不是整数

feynmand 发表于 2011-9-19 10:13:20

哈哈,这不是matlab的问题,是计算机二进制产生的截断误差,你冤枉“好人”了

cdstudio 发表于 2011-9-19 15:44:20

本帖最后由 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元素的值应该完全一样才对, 为什么却只是最后一个出这种误差, 而前面却不出现问题:)

而且最关键的是, 这种小误差会让编程的人防不胜防, 你不知道它什么时候就会出现这种情况, 而且还不能避免.

feynmand 发表于 2011-9-21 09:32:39

上面数组中的X(3)和X(5)是并不相等的。

>> a=0;
>> for n=1:10000
a=a+0.01;
end
>> a

a =

    1.000000000000143e+002

楼上可以验证一下以上的程序,10000个0.01相加竟然不等于100。这就是截断误差。虽然数字一样,但是由于小数点的位置不同产生的结果误差大小也不同。楼上需要深入学习理解一下计算误差的相关知识,然后才能知道是为什么,知道如何避免这种错误。这不是一个帖子可以说清楚的

a762701 发表于 2012-10-14 01:32:37

..........這應該是疊代次數的關西= =...因為你所設定疊代關西並不是解析解,而是近似解的關西,這是我的理解,不知道我的觀念有沒有錯誤,請多給我指教^^

a762701 发表于 2012-10-14 01:34:17

我覺得疊代次數多的話,理論上結果應該一樣= =
页: [1]
查看完整版本: MATLAB也会出错?