Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-04-10, 09:25   #1
austinlu
初级会员
 
注册日期: 2008-03-27
年龄: 42
帖子: 3
声望力: 0
austinlu 正向着好的方向发展
警告 [讨论]matlab取整不整的一个问题

在下面的程序中,第八行通过round或fix语句进行取整,但是发现在计算后,所得结果却并没有取整,减一个同大小的数字后也不是0,而是一个极小的数字.

clear %1
clc
p(1,=[6.84,125000]; %3
p(2,=[4.56,125000];
L=11.4; %5
l=0.57;
for j=1:length(p);
qoele=round(p(j,1)/l)+1 %8;
b=qoele*l-p(j,1)
a=l-(qoele*l-p(j,1))
end

运行结果为:
qoele =
13
b =
0.569999999999999
a =
5.55111512312578e-016
qoele =
9
b =
0.57
a =
-3.33066907387547e-016

其实这个程序用手算结果进行比较很明显的可以看出不是显示倍数的问题,我也用format等显示格式的函数进行了设置,但是还是找不到问题的所在.最后只能怀疑是round函数的问题.
我也用过fix函数取整,但是同样的问题还是存在.
austinlu 当前离线   回复时引用此帖
旧 2008-04-10, 09:57   #2
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认

这个不是round函数的问题,matlab做数值运算,a之所以不等于零是由于舍入误差引起的。简单的讲,matlab计算1/9*9得到的是个实数,而不是整数。
科学计算中恰当的误差是可以接受的,matlab有自己的误差控制方法,所以除非特殊的计算要求,否则不必过分注意舍入误差。

但是有些情况还是会带来困惑。比如,用matlab绘制一个带有奇点的函数,这时获得的结果往往和程序中使用的离散步长有关,即不同的离散距离对应不同的图形,这不是matlab计算有错,而是因为离散过程往往会遗漏奇点信息(事实上如果你强制计算奇点处的函数值,matlab会报错)。一种可选的解决方案是减小离散步长,但是不能从根本上解决问题。当我遇到这类问题时,通常是选择使用maple来得到函数图形。
watcher 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[求助]求matlab优化工具箱 endless MATLAB论坛 1 2008-11-10 15:28
[求助]quad求积分 wtlove876 MATLAB论坛 1 2008-05-16 19:55
求CDMA通信系统的仿真程序 na2008 MATLAB论坛 0 2008-05-05 19:31
[求助]plot()函数的周期怎么算? yinxuan2348 MATLAB论坛 2 2008-04-13 10:18
【求助】关于动态控件的一个小问题~ daidaishou MATLAB论坛 0 2007-09-03 11:05


所有时间均为北京时间。现在的时间是 02:25


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.