为什么在MATLAB中sin(Pi)不是精确的,而sin(pi/2)是精确的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (558)

我在计算时遇到了问题matlab。我知道“ pi”是一个浮动数字,并不准确。所以,在matlab sin(pi)中并不完全是零。我的问题是如果“ pi”不是确切的,那么为什么sin(pi/2)完全等于1。

sin(pi)- >并不完全是因为pi。但 sin(pi/2)完全相等1

提问于
用户回答回答于

我不知道Matlab计算的确切方式sin(x)- 但你可以通过使用幂级数来计算它,例如

sin x = x - (x^3)/3! + (x^5)/5! - (x^7)/7! + (x^9)/9! ...

把它变成一些Matlab代码,我们用下面的代码表示它:

clc
x = pi;     %  or x = pi/2
res = x;
factor = -1;
for ii=3:2:19
  res = res + factor*power(x,ii)/factorial(ii);
  factor = factor*-1;  
  fprintf ( 'iteration %2i  sin(x)=%1.16f\n', (ii-1)/2, res );
end
res

运行这两个代码x=pix=pi/2你可以看到x=pi/2很快(9次迭代)收敛于正确的结果(eps错误内) - 而x=pi案例不会在相同的时间范围内收敛。

有用的是要注意,在9次迭代中,最后阶乘(19)中正在计算的阶乘。在这个序列中计算的下一个因子是21.这是由于双精度而可以用100%精度表示的最后一个因子(参见参考资料help factorial)。

所以我认为最近发生的事情是,对于pi / 2,数学解决方案收敛于1,在pi情况下以更快的双精度收敛。事实上,由于数学的局限性和可以以双精度结果存储的精度,pi情况完全不能完全收敛。

说了这么多的sin(pi)距离eps,所以你应该使用这个事实为你的目的。

我已经复制了我得到的结果(R2015b):

Results for PI/2
iteration  1  sin(x)=0.9248322292886504
iteration  2  sin(x)=1.0045248555348174
iteration  3  sin(x)=0.9998431013994987
iteration  4  sin(x)=1.0000035425842861
iteration  5  sin(x)=0.9999999437410510
iteration  6  sin(x)=1.0000000006627803
iteration  7  sin(x)=0.9999999999939768
iteration  8  sin(x)=1.0000000000000437
iteration  9  sin(x)=1.0000000000000000
Final Result: 1.0000000000000000


Results for PI
iteration  1  sin(x)=-2.0261201264601763
iteration  2  sin(x)=0.5240439134171688
iteration  3  sin(x)=-0.0752206159036231
iteration  4  sin(x)=0.0069252707075051
iteration  5  sin(x)=-0.0004451602382092
iteration  6  sin(x)=0.0000211425675584
iteration  7  sin(x)=-0.0000007727858894
iteration  8  sin(x)=0.0000000224195107
iteration  9  sin(x)=-0.0000000005289183
Final Result: -0.0000000005289183

热门问答

Tencent Cloud API 3.0 SDK for PHP 没有文件夹 vendor?

推荐

为了防止和composer冲突,所以github上特意设置了不导出这个目录。如需要获取源码,请使用git clone的方式获取,不要用github上的下载源码方式。

lora接入腾讯物联网是只能在深圳地区吗?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐

深圳的南山及龙岗全区,可以租用腾讯运营的网络,支持CLAA协议,其它区域需要客户购买网关接入LPWA物联网络管理平台,支持LoRaWAN协议,我们也有网关、模组及传感器产品售卖。

ckafka是否支持kafka-connect-jdbc?

您好, 现在CKafka支持 kafka-connect-kafka(内侧功能),暂时还不能支持 jdbc的connector。如果这是您的需求,请提交工单,联系腾讯云工程师描述您的需求,我们会尽快规划并实现。

沙龙活动报名通知什么时候会收到通知呢?

Richel码农
推荐已采纳

沙龙报名之后会收到报名成功的短信,活动前一天会发送签到二维码短信和邮件,请留意.

请问有创建项目的sdk吗?

推荐

这是api2.0的接口,使用对应的sdk,代码托管在http://github.com/qcloudapi

云通信 uuid换取下载url 返回的文件地址无法访问?

推荐

您好,这个接口“v4/rich_media/query_file_url”目前新版本已经不支持了,想获取的话,建议升级SDK版本到最新版,最新版用的是cos。新版的拿到URL后直接在浏览器中打开。

所属标签

扫码关注云+社区

领取腾讯云代金券