验证中心极值定理

In [1]:
//%jsroot on
In [2]:
double aRandom(TRandom3 *rn)
{   double rx=rn->Rndm();
    if(rx<0.5) return rx*0.6;//0-0.3
    else return (rx-0.5)*0.6+0.7;//0.7-1
}
In [3]:
TRandom3 *rn=new TRandom3();
rn->SetSeed(0);
TCanvas c;

Rndm表示0-1之间随机均匀抽样。

In [4]:
cout<<rn->Rndm()<<'\t'<<rn->Rndm()<<'\t'<<rn->Rndm();
0.169949	0.865277	0.280835

各种随机分布抽样函数

Uniform

In [5]:
TH1F *hrndm=new TH1F("hrndm","hrndm",100,0,100);
for(int i=0;i<10000;i++)
    hrndm->Fill(rn->Rndm()*100);
hrndm->Draw();
hrndm->SetMinimum(0);
c.Draw();

Guass

In [6]:
c.Clear();
TH1F *hgaus=new TH1F("hgaus","hgaus",100,0,100);
for(int i=0;i<100000;i++)
    hgaus->Fill(rn->Gaus(40,10));
hgaus->Draw();
c.Draw();

Binomial

In [7]:
c.Clear();
TH1F *hbinomial=new TH1F("hbinomial","hbinomial",20,0,20);
for(int i=0;i<1000;i++)
    hbinomial->Fill(rn->Binomial(100,0.03));//N is binomially distributed between 0 and ntot inclusive with mean prob*ntot and prob is between 0 and 1.
hbinomial->Draw();
c.Draw();

Exponential

In [8]:
c.Clear();
TH1F *hexp=new TH1F("hexp","hexp",100,0,100);
for(int i=0;i<10000;i++)
    hexp->Fill(rn->Exp(10));
gPad->SetLogy();
hexp->Draw();
c.Draw();

验证中心极限定理

aRandom

In [9]:
c.Clear();
TH1F *h0=new TH1F("h0","subrange uniform distribution",100,0,100);
for(int i=0;i<10000;i++) {
    h0->Fill(aRandom(rn)*100);
}
gPad->SetLogy(0);
h0->Draw();
c.Draw();

生成$\sum_{i=1}^2{r_i}$, $\sum_{i=1}^5{r_i}$, $\sum_{i=1}^{10}{r_i}$, $\sum_{i=1}^{20}{r_i}$, $\sum_{i=1}^{100}{r_i}$分布

In [10]:
c.Clear();
TH1F *h2=new TH1F("h2","sum1-2",200,0,100);
TH1F *h5=new TH1F("h5","sum1-5",200,0,100);
TH1F *h10=new TH1F("h10","sum1-10",200,0,100);
TH1F *h20=new TH1F("h20","sum1-20",200,0,100);
TH1F *h50=new TH1F("h100","sum1-100",200,0,100);
h2->SetLineColor(kBlack);
h5->SetLineColor(kGreen);
h10->SetLineColor(kBlue);
h20->SetLineColor(kRed);
for(int i=0;i<100000;i++) {
    double rx=0;
    for(int j=0;j<100;j++) {
        rx += aRandom(rn);
        if(j==1) h2->Fill(rx*50);
        if(j==4) h5->Fill(rx*20);
        if(j==9) h10->Fill(rx*10);
        if(j==19) h20->Fill(rx*5);
        if(j==99) h50->Fill(rx);
    }
}
  • $\sum_{i=1}^2{r_i}$
In [11]:
gPad->SetLogy(0);
h2->Draw();
c.Draw();
  • $\sum_{i=1}^5{r_i}$
In [12]:
h5->Draw();
c.Draw();
  • $\sum_{i=1}^{10}{r_i}$
In [13]:
h10->Draw();
c.Draw();
  • $\sum_{i=1}^{20}{r_i}$
In [14]:
h20->Draw();
c.Draw();
  • $\sum_{i=1}^{100}{r_i}$
In [15]:
h100->Draw();
c.Draw();
In [ ]:
!jupyter nbconvert centerlimit.ipynb --to html