sleepinglion 发表于 2013-8-24 11:52

如何让MATLAB中sin(pi)=0?

    请教各位大神一个问题:如何让MATLAB中sin(pi)=0?
    我在MATLAB中输入sin(pi)后的结果为1.224646799147353e-016,请问如何令其在MATLAB中计算的结果为0呢?
    说明:我不是没事找事问这个问题,我是必须让其为0。因为我在编程计算的时候矩阵中有km*sin(pi),其中km的数量级为10^8,这样计算的结果数量级为10^9,在计算矩阵特征值的时候会出现问题。所以我希望令sin(pi)为0。
    还望各位大神给予指点。在此先谢过各位!

ChaChing 发表于 2013-8-25 00:36

sind(180) ???

sleepinglion 发表于 2013-8-25 12:05

ChaChing 发表于 2013-8-25 00:36 static/image/common/back.gif
sind(180) ???

非常感谢!

ChaChing 发表于 2013-8-25 23:49

sleepinglion 发表于 2013-8-25 12:05 static/image/common/back.gif
非常感谢!

真正的圆周率是无理数, 所以pi(数值)本就是近似值!
其实个人比较不解且好奇的是原问题, 为何10^-16还不够小???

zswseu 发表于 2013-8-26 00:20

我好奇的试了一下,还真是的。
这科研这么精确啊。

sleepinglion 发表于 2013-8-26 11:36

ChaChing 发表于 2013-8-25 23:49 static/image/common/back.gif
真正的圆周率是无理数, 所以pi(数值)本就是近似值!
其实个人比较不解且好奇的是原问题, 为何10^-16还不够 ...

因为我后面还得用10^-16乘以一个10^9的数。

sleepinglion 发表于 2013-8-26 11:38

zswseu 发表于 2013-8-26 00:20 static/image/common/back.gif
我好奇的试了一下,还真是的。
这科研这么精确啊。

我只是不想因为这一点的数值误差影响我后面的运算。呵呵……

zswseu 发表于 2013-8-26 23:05

sleepinglion 发表于 2013-8-26 11:38 static/image/common/back.gif
我只是不想因为这一点的数值误差影响我后面的运算。呵呵……

我很好奇,如果你还用到e,g,c等等常数,那得取多少位啊。
像你pi的取值,到最后结果再代入不好么。中间过程截断误差会不断累积的。

米斯兰达 发表于 2013-8-27 07:50

我想到了两种方法:
(1)楼主直接把式子里的sin(pi)换成0
(2)在sin(pi)外面再加一个fix,即fix(sin(pi)),让sin(pi)的结果向0取整,自然就是0了。

不知道这两种方法是否可行?{:{03}:}

ChaChing 发表于 2013-8-28 13:14

米斯兰达 发表于 2013-8-27 07:50 static/image/common/back.gif
我想到了两种方法:
(1)楼主直接把式子里的sin(pi)换成0
(2)在sin(pi)外面再加一个fix,即fix(sin(pi ...

好奇问下! 怎麼利用fix函数?
个人以为不够完善, 因为fix(sin(pi/6))亦会向0取整

sleepinglion 发表于 2013-8-28 15:31

米斯兰达 发表于 2013-8-27 07:50 static/image/common/back.gif
我想到了两种方法:
(1)楼主直接把式子里的sin(pi)换成0
(2)在sin(pi)外面再加一个fix,即fix(sin(pi ...

谢谢你的回复!不过,fix是直接去掉小数点的,那么0.5也会变成0的。这个不是我所希望看到的。

米斯兰达 发表于 2013-8-28 16:31

sleepinglion 发表于 2013-8-28 15:31 static/image/common/back.gif
谢谢你的回复!不过,fix是直接去掉小数点的,那么0.5也会变成0的。这个不是我所希望看到的。

这种方法仅针对sin(pi)不等于0有用
matlab里面 实际上是用eps来代表无穷小的 这个值似乎是可以自行设置的
你可以查一查 把它设置的更小一些

sleepinglion 发表于 2013-8-29 10:16

米斯兰达 发表于 2013-8-28 16:31 static/image/common/back.gif
这种方法仅针对sin(pi)不等于0有用
matlab里面 实际上是用eps来代表无穷小的 这个值似乎是可以自行设置的 ...

好的。非常感谢!

ChaChing 发表于 2013-8-30 00:03

本帖最后由 ChaChing 于 2013-8-30 00:04 编辑

matlab里面 实际上是用eps来代表无穷小的 这个值似乎是可以自行设置的
你可以查一查 把它设置的更小一些汗! 个人水平有限, 不甚了解大侠的意思

无穷小好像realmin比较像些!?
另自行设置, 有何目的及用途!?
好奇学习下, 再看下help说明, 还未能解惑

米斯兰达 发表于 2013-8-30 07:43

ChaChing 发表于 2013-8-30 00:03 static/image/common/back.gif
汗! 个人水平有限, 不甚了解大侠的意思

无穷小好像realmin比较像些!?


不好意思 可能是我信口开河了 只是为了给楼主提供一个思路

大概记得原来看过 matlab里面用eps代表计算精度 eps是一个很小的数 但不是0

原来计算的时候 为了防止分母为0 就给每个数都加上一个eps

PS:元老 我错了 我再去查查
页: [1] 2
查看完整版本: 如何让MATLAB中sin(pi)=0?