【问题标题】:numerical computation problems in matlabmatlab中的数值计算问题
【发布时间】:2014-01-26 06:13:29
【问题描述】:

在这个问题中,我正在解决 matlab 中的数值计算问题,并希望获得经验如何在未来避免这些问题/错误

例如让我们考虑以下简单代码

t = 0.4 + 0.1 - 0.5

t =

     0

效果很好,但是

u = 0.4 - 0.5 + 0.1

u =

   2.7756e-17

当然记住它也是0,但是为什么不是第一次计算得到相同的结果?或者有什么不同?也请看

v = (sin(2*pi) = = sin(4*pi)) 

v = (sin(2*pi)==sin(4*pi))

v =

     0

它表明正弦函数不是周期性的,那么在这种情况下,一般建议是什么?引入一些 epsilon?like

V=((sin(2*pi)-sin(4*pi))<eps)

V =

     0

EPS=0.000000000000001

EPS =

   1.0000e-15

>> V=((sin(2*pi)-sin(4*pi))<EPS)

V =

     1

请帮帮我

【问题讨论】:

    标签: matlab numerical floating-point-precision


    【解决方案1】:

    得到这些结果是正常的,因为 Matlab 中的浮点相对精度是

    eps('double')
    
    ans =
    
       2.2204e-16
    

    对于V=((sin(2*pi)-sin(4*pi))&lt;eps),因为

    sin(2*pi)-sin(4*pi)
    
    ans =
    
       2.4493e-16
    

    大于eps('double'),所以结果为V=0


    对于V=((sin(2*pi)-sin(4*pi))&lt;EPS),因为EPS&gt;2.4493e-16,所以其结果将是V=1

    【讨论】:

    • 这是否意味着我已经按照自己的意愿选择了epsilon?
    • @datodatuashvili 是的,有时您必须根据自己想要的准确度来决定。
    • 再次非常感谢,在这种情况下,我将始终选择 0.000000000000001 之类的:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2015-09-18
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多