数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 19941|回复: 20

[原创]MatLab中的数值陷阱

[复制链接]
发表于 2003-8-4 21:38:09 | 显示全部楼层 |阅读模式
  MatLab中,1:1.4/0.1与1:14不等价,你相信吗?

  原因如下:
  t1=1.5/0.1-15;         --> t1= 0
  t2=1.4/0.1-14;         --> t2= -1.7764e-015
  t3=(-21+22.4)/0.1-14; --> t3= -1.4211e-014

  可见,1:1.5/0.1与1:15等价;1:1.4/0.1与1:14不等价,反而等价于1:13。

  其更深层次的原因,在于数值除法带来的误差,所以不要轻信MatLab计算的结果。

  也许很少有人应用“1:1.4/0.1”之类的语句,但当某些变量代替1.4、0.1们隐藏在程序某个角落时,数值计算的不精确性很可能会将程序引向错误。

  所以,当你确信算法正确、变量无误却得不到理想的结果时,很可能程序已掉入了数值陷阱。

  MatLab中的数值陷阱似乎还有很多,还望高手多多补充




发表于 2003-8-5 23:16:23 | 显示全部楼层
以下是引用阿剑在2003-8-4 20:24:35的发言:
菜鸟

好好解释
没必要这么说吧
这两个字也解决不了问题吧
发表于 2003-8-4 21:45:43 | 显示全部楼层
经典!
发表于 2003-8-4 22:19:56 | 显示全部楼层
所以,当你确信算法正确、变量无误却得不到理想的结果时,很可能程序已掉入了数值陷阱。


还有可能出现了逻辑错误!
还有有时候确实会出现你说的数值陷阱情况,但是你说的例子中
1:1.4/0.1与1:14不等价,反而等价于1:13。
好象有点问题。
a=1/(1.4/0.1)   a =0.07142857142857;
b=1/14            b =0.07142857142857;
c=1/13            c =0.07692307692308;
a-c=-0.00549450549451;
a-b=1.387778780781446e-017;
 楼主| 发表于 2003-8-5 03:48:40 | 显示全部楼层
请toby同志在MatLab工作区输入:
1:1.4/0.1

会得到结果:
ans =

     1     2     3     4     5     6     7     8     9    10    11    12    13

故而,1:1.4/0.1等价于1:13
发表于 2003-8-5 04:24:35 | 显示全部楼层
菜鸟
 楼主| 发表于 2003-8-5 17:42:25 | 显示全部楼层
  强烈抗议阿剑同志的攻击性言论!这样会打击别人发言积极性的

  也许是我没写清楚,造成了toby兄的误解:
  “1:1.4/0.1”中的冒号表示MatLab中的等间隔向量生成符,不是数学意义上的比值符号,特此说明并致歉。

  ////////\\\\\\\\  
  学问是讨论出来的
  \\\\\\\\////////










[此贴子已经被作者于2003-8-5 11:50:33编辑过]

发表于 2003-8-5 23:00:22 | 显示全部楼层
嗯,果然是个黑暗 的陷阱啊~恐怖
发表于 2003-8-6 03:33:05 | 显示全部楼层
恩!
现在我明白了!
请多指教!
还有就算我是菜鸟,
不也有笨鸟先飞吗!
我不会有事的!
发表于 2003-8-6 09:34:54 | 显示全部楼层
强烈支持楼上。
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2019-12-8 00:30 , Processed in 0.066265 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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