声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1738|回复: 10

[综合讨论] 数值运算超过matlab限制的问题

[复制链接]
发表于 2009-2-27 22:04 | 显示全部楼层 |阅读模式

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

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

x
最近在用matlab进行数值计算的时候,需要计算像1000的阶乘这样大的数,发现已经超过了matlab对数值运算的限制,原来matlab里面连200的阶乘都没办法运算。不知道对这个问题高手们有什么好的办法解决?
回复
分享到:

使用道具 举报

发表于 2009-2-27 22:53 | 显示全部楼层

回复 楼主 realyw 的帖子

可否告知原始问题是什麽? 为何需要算1000阶乘!
Since double pricision numbers only have about 15 digits, the answer is only accurate for n <= 21. For larger n, the answer will have the right magnitute, and is accurate for the first 15 digits.
 楼主| 发表于 2009-2-27 23:50 | 显示全部楼层
感谢ChaChing的关心,因为我要估计一个泊松分布,输入的数据比较大,涉及到1000以上的阶乘,不知道有没有什么办法化简?
发表于 2009-2-27 23:57 | 显示全部楼层
如果不能化简的话,那么大的阶乘一般的计算机是达不到要求的。
发表于 2009-2-28 01:12 | 显示全部楼层

  1. a = sym(1001);
  2. b = vpa(gamma(a),100)
复制代码

评分

1

查看全部评分

 楼主| 发表于 2009-2-28 14:50 | 显示全部楼层
我想问一下rocwoods,这样算出来的结果等于1000的阶乘吗?如果是的话,这倒是个不错的办法。
发表于 2009-2-28 21:09 | 显示全部楼层
gamma(n+1) = n!
以上用的是符号计算,保留100位有效数字
你可以

  1. a = sym(1001);
  2. b = vpa(gamma(a),2568)
复制代码
算出精确值

评分

1

查看全部评分

发表于 2009-2-28 21:48 | 显示全部楼层

回复 7楼 rocwoods 的帖子

这个方法挺好,一旦转化为数值,就变为Inf了。:@)

[ 本帖最后由 friendchj 于 2009-2-28 21:49 编辑 ]
 楼主| 发表于 2009-2-28 22:18 | 显示全部楼层
那请问rocwoods,这样还能不能进行数值运算呢?因为除了阶乘之外,还涉及到其他加减乘除的运算。
发表于 2009-3-1 01:50 | 显示全部楼层
把你所有需要的加减乘除计算都用符号计算就可以了啊。
想不明白你为什么要用这么大的数
 楼主| 发表于 2009-3-1 13:29 | 显示全部楼层
因为实际数据有这么大,呵呵。我试试看哈,如果有问题再向各位高手请教!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-22 19:23 , Processed in 0.061371 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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