主题:fortran中如何产生poisson分布的随机数
fridaywu
[专家分:0] 发布于 2012-05-16 16:53:00
我查了相关命令,
RNPOI
Generates pseudorandom numbers from a Poisson distribution
部分程序:
use imsl
.....
....
theta = 2.0d0
call random_seed()
do i=1,n
call dRNPOI(theta, RandN(i))
end do
但是 只能compile通过, build 的时候显示错误
Experiment-Try.obj : error LNK2001: unresolved external symbol _DRNPOI@8
Debug/Experiment-Try.exe : fatal error LNK1120: 1 unresolved externals
就是没有那个函数。。。。
问一下, 大家产生随机数的函数,一般是用什么库里的函数???
谢谢....
回复列表 (共8个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2012-05-17 10:18:00
你调用RNPOI时干嘛前面加“D”?文档里有说得加D么?还有:Theata和RandN的类型是Real(8)么?
板凳
fridaywu [专家分:0] 发布于 2012-05-17 10:41:00
real(8) :: RandN(n), theta
是的 我定义的都是 双精度
所以调用时必须加 d
3 楼
cgl_lgs [专家分:21040] 发布于 2012-05-17 10:46:00
把D去了试试吧。说明书里有说需要加D?
4 楼
cgl_lgs [专家分:21040] 发布于 2012-05-17 10:47:00
还有,初始化随机种子不是这么用的,毕竟这是FORTRAN,随机算法是比较好的,故初始化种子也会比较麻烦点儿:)
5 楼
fridaywu [专家分:0] 发布于 2012-05-17 11:03:00
我调用随机正态分布的随机数的时候 就这么用过
不管是 随机种子 还是 double双精度的 都可以
我这里双精度的
real(8) :: RandN(n), theta
call DRNPOI(theta, RandN(i))
但是还是错误:
--------------------Configuration: Experiment-Try - Win32 Debug--------------------
Linking...
Experiment-Try.obj : error LNK2001: unresolved external symbol _DRNPOI@8
Debug/Experiment-Try.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Experiment-Try.exe - 2 error(s), 0 warning(s)
说明还是没有那个生成随机数的函数....DRNPOI() ???
你能试一下你机子上能不能 产生? 是不是我用错了?
6 楼
fridaywu [专家分:0] 发布于 2012-05-17 11:03:00
我调用随机正态分布的随机数的时候 就这么用过
不管是 随机种子 还是 double双精度的 都可以
我这里双精度的
real(8) :: RandN(n), theta
call DRNPOI(theta, RandN(i))
但是还是错误:
--------------------Configuration: Experiment-Try - Win32 Debug--------------------
Linking...
Experiment-Try.obj : error LNK2001: unresolved external symbol _DRNPOI@8
Debug/Experiment-Try.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Experiment-Try.exe - 2 error(s), 0 warning(s)
说明还是没有那个生成随机数的函数....DRNPOI() ???
你能试一下你机子上能不能 产生? 是不是我用错了?
7 楼
fridaywu [专家分:0] 发布于 2012-05-17 11:51:00
是我弄错了
以下这么做是可以的:
integer :: RandN
real :: theta
theta = 2.0d0
call random_seed()
call RNPOI(1, theta, RandN )
write(*,*)"RandN=",RandN
就是说 必须是 theta 是 单精度的
另外产生的poisson随机数必须是 整型的(由poisson分布的定义)
就可以的
谢谢你
8 楼
cgl_lgs [专家分:21040] 发布于 2012-05-17 20:33:00
你試試吧,,如果imsl依賴於fortran的隨機種子,那你每次執行程序生成的隨機序列都將是一樣的
我来回复