声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5727|回复: 16

[编程技巧] 如何让MATLAB中sin(pi)=0?

  [复制链接]
发表于 2013-8-24 11:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

发表于 2013-8-25 00:36 | 显示全部楼层
sind(180) ???

评分

1

查看全部评分

 楼主| 发表于 2013-8-25 12:05 | 显示全部楼层
发表于 2013-8-25 23:49 | 显示全部楼层
sleepinglion 发表于 2013-8-25 12:05
非常感谢!

真正的圆周率是无理数, 所以pi(数值)本就是近似值!
其实个人比较不解且好奇的是原问题, 为何10^-16还不够小???
发表于 2013-8-26 00:20 | 显示全部楼层
我好奇的试了一下,还真是的。
这科研这么精确啊。
 楼主| 发表于 2013-8-26 11:36 | 显示全部楼层
ChaChing 发表于 2013-8-25 23:49
真正的圆周率是无理数, 所以pi(数值)本就是近似值!
其实个人比较不解且好奇的是原问题, 为何10^-16还不够 ...

因为我后面还得用10^-16乘以一个10^9的数。
 楼主| 发表于 2013-8-26 11:38 | 显示全部楼层
zswseu 发表于 2013-8-26 00:20
我好奇的试了一下,还真是的。
这科研这么精确啊。

我只是不想因为这一点的数值误差影响我后面的运算。呵呵……
发表于 2013-8-26 23:05 | 显示全部楼层
sleepinglion 发表于 2013-8-26 11:38
我只是不想因为这一点的数值误差影响我后面的运算。呵呵……

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

评分

1

查看全部评分

发表于 2013-8-27 07:50 | 显示全部楼层
我想到了两种方法:
(1)楼主直接把式子里的sin(pi)换成0
(2)在sin(pi)外面再加一个fix,即fix(sin(pi)),让sin(pi)的结果向0取整,自然就是0了。

不知道这两种方法是否可行?

点评

赞成: 4.0
赞成: 4
10^(-16)*10^9那也是10^(-7),也够小了。这样还不行的话,只能说你要求的精度高,而且这样的精度还是不仅仅对大的数,对小的数也同样的要求,这就难办了。 所以,赞成本楼的做法,或者是做判断   发表于 2013-8-27 11:33

评分

1

查看全部评分

发表于 2013-8-28 13:14 | 显示全部楼层
米斯兰达 发表于 2013-8-27 07:50
我想到了两种方法:
(1)楼主直接把式子里的sin(pi)换成0
(2)在sin(pi)外面再加一个fix,即fix(sin(pi ...

好奇问下! 怎麼利用fix函数?
个人以为不够完善, 因为fix(sin(pi/6))亦会向0取整
 楼主| 发表于 2013-8-28 15:31 | 显示全部楼层
米斯兰达 发表于 2013-8-27 07:50
我想到了两种方法:
(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
谢谢你的回复!不过,fix是直接去掉小数点的,那么0.5也会变成0的。这个不是我所希望看到的。

这种方法仅针对sin(pi)不等于0有用
matlab里面 实际上是用eps来代表无穷小的 这个值似乎是可以自行设置的
你可以查一查 把它设置的更小一些
 楼主| 发表于 2013-8-29 10:16 | 显示全部楼层
米斯兰达 发表于 2013-8-28 16:31
这种方法仅针对sin(pi)不等于0有用
matlab里面 实际上是用eps来代表无穷小的 这个值似乎是可以自行设置的 ...

好的。非常感谢!
发表于 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
汗! 个人水平有限, 不甚了解大侠的意思

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

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

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

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

PS:元老 我错了 我再去查查

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-8 22:45 , Processed in 0.091854 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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