找回密码
 注册
Simdroid-非首页
查看: 167|回复: 6

MATLAB也会出错?

[复制链接]
发表于 2011-9-16 20:35:33 | 显示全部楼层 |阅读模式 来自 德国
写了个很简单的程序
function [ey]=check()
  ex=2;
  F=[[0 0 0.26 1.3];[0.6 0 0.86 1.3];[1.2 0 1.46 2.6];...
     [1.8 0 2.06 2.6];[2.4 0 2.66 2.6]];    % [x1 y1 x2 y2 Mat q]  
  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出错了?



发表于 2011-9-17 00:42:51 | 显示全部楼层 来自 台湾
Simdroid开发平台
看看如下的值, 不等於0.26
format long e; xx=2.66-2.4
还有matlab1本来就不是整数

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-9-19 10:13:20 | 显示全部楼层 来自 河北廊坊
哈哈,这不是matlab的问题,是计算机二进制产生的截断误差,你冤枉“好人”了
回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-19 15:44:20 | 显示全部楼层 来自 德国
本帖最后由 cdstudio 于 2011-9-19 08:48 编辑
feynmand 发表于 2011-9-19 03:13
哈哈,这不是matlab的问题,是计算机二进制产生的截断误差,你冤枉“好人”了 ...


问题是这样的没错, 可是这个数组的3,4,5元素的值应该完全一样才对, 为什么却只是最后一个出这种误差, 而前面却不出现问题:)

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

使用道具 举报

发表于 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。这就是截断误差。虽然数字一样,但是由于小数点的位置不同产生的结果误差大小也不同。楼上需要深入学习理解一下计算误差的相关知识,然后才能知道是为什么,知道如何避免这种错误。这不是一个帖子可以说清楚的

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2012-10-14 01:32:37 | 显示全部楼层 来自 台湾
..........這應該是疊代次數的關西= =...因為你所設定疊代關西並不是解析解,而是近似解的關西,這是我的理解,不知道我的觀念有沒有錯誤,請多給我指教^^
回复 不支持

使用道具 举报

发表于 2012-10-14 01:34:17 | 显示全部楼层 来自 台湾
我覺得疊代次數多的話,理論上結果應該一樣= =
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 08:27 , Processed in 0.029471 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表