Chinaunix

标题: 数据模拟问题 [打印本页]

作者: 我收点倦    时间: 2014-09-07 00:31
标题: 数据模拟问题
亲们,如何模拟一个来自正态总体N(20,100)的含量为50的简单随机样本比较简洁呢。需要用到Monte Carlo吗,如果用该怎么写呢?如果不用怎么写比较方便点。

求大侠们指点啊
作者: huang6894    时间: 2014-09-07 20:46
本帖最后由 huang6894 于 2014-09-07 20:50 编辑

回复 1# 我收点倦


    不是很理解你的意思。。。没怎么学过统计~如果只是要产生随机数的话,perl自带的rand函数是不能直接用来代替生成正态分布的,你可以试试Math::Random;
  1. #!/usr/bin/perl -w
  2. use Math::Random::OO::UniformInt;
  3. open OUT,"> out.txt" || die "$!";
  4. my $rnd =  Math::Random::OO::UniformInt->new(20,100);
  5. $rnd->seed( 0.123 );
  6. for( my $i =1 ; $i<=50; $i++){
  7.   print OUT $rnd->next()." ";
  8. }
  9. close OUT;
复制代码
  1. 20 39 72 26 41 49 40 99 45 95 34 89 22 20 70 59 42 84 27 56 71 98 73 84 65 23 91 25 44 99 26 21 22 65 61 72 78 51 50 22 93 37 89 64 98 70 50 96 38 62
复制代码

作者: pitonas    时间: 2014-09-09 23:19
Math::Random::OO::UniformInt
Uniform => 不是正态的 ~ {:2_172:}

回复 2# huang6894


   
作者: huang6894    时间: 2014-09-09 23:42
回复 3# pitonas


    嘻嘻,我只是隐约记得这个包。。。
作者: pitonas    时间: 2014-09-10 12:49
几年我做开发,动辄一个项目代码也要超过百万行规模了。
你知道吗?没怎么正态分布过
  1. my @N = ( 20, 100 );
  2. my $count = 50;

  3. sub randn {
  4.     my ( $W, $G2, $c ) = @_;
  5.     my $G  = sqrt $G2;
  6.     my $P2 = 6.28318530;    # 2 * 3.141593;
  7.     map { sqrt( -2 * log rand ) * cos( $P2 * rand ) * $G + $W } 1 .. $c;
  8. }

  9. my @norm = randn @N, $count;
复制代码

作者: 我收点倦    时间: 2014-09-10 21:15
回复 2# huang6894

恩,uniform是均匀分布,normal是正态分布。
还是要谢谢大侠提供了这么一个思路。多谢呀
   
作者: 我收点倦    时间: 2014-09-10 21:16
回复 5# pitonas
哈哈,所以来模拟一个
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2