TRandom3 *randomx = new TRandom3();
randomx->SetSeed(0);
cout<<randomx->Rndm()<<'\t'<<randomx->Rndm()<<'\t'<<randomx->Rndm();
TCanvas x;
TH1F *Unirndm = new TH1F("Unirndm","Unirndm",100,0,100);
for(Int_t i=0;i<10000;i++)
{
Unirndm->Fill(randomx->Uniform(0,100));//Uniform(x,y):x~y之间均匀抽样;
}
Unirndm->Draw();
Unirndm->SetMinimum(0);
x.Draw();
x.Clear();
TH1F *gaurndm=new TH1F("gaurndm","gaurndm",100,0,100);
for(int i=0;i<10000;i++)
{
gaurndm->Fill(randomx->Gaus(40,10));//Gawu(x,y):Mean:x;SIgma:y的高斯分布;注意是sigma,不是半高宽;
}
gaurndm->Draw();
gaurndm->SetMinimum(0);
x.Draw();
x.Clear();
TH1F *binorndm=new TH1F("binorndm","binorndm",20,0,20);
for(int i=0;i<10000;i++)
{
binorndm->Fill(randomx->Binomial(100,0.03));//Binomial(x,y):y为概率,x为mean/y,即mean=xy;
}
binorndm->Draw();
binorndm->SetMinimum(0);
x.Draw();
x.Clear();
TH1F *exprndm=new TH1F("exprndm","exprndm",100,0,100);
for(int i=0;i<10000;i++)
{
exprndm->Fill(randomx->Exp(10));
}
exprndm->Draw();
//exprndm->SetMinimum(0);
gPad->SetLogy();
x.Draw();
x.Clear();
TH1F *expdist=new TH1F("expdist","expdist",100,0,100);
TH1F *sum2=new TH1F("sum2","sum 1~2",4000,0,4000);
TH1F *sum5=new TH1F("sum5","sum 1~5",4000,0,4000);
TH1F *sum10=new TH1F("sum10","sum 1~10",4000,0,4000);
TH1F *sum20=new TH1F("sum20","sum 1~20",4000,0,4000);
TH1F *sum100=new TH1F("sum100","sum 1~100",4000,0,4000);
//sum2->SetLineColor(kBlack);
//sum5->SetLineColor(kGreen);
//sum10->SetLineColor(kBlue);
//sum20->SetLineColor(kRed);
//sum100->SetLineColor(kBlack);
TRandom3 *rndmx=new TRandom3();
for(int i=0;i<100000;i++)
{
double rx=0;
expdist->Fill(rndmx->Exp(10));
for(int j=0;j<100;j++)
{
rx=rx+rndmx->Exp(10);
if(j==1) sum2->Fill(rx*50);
if(j==4) sum5->Fill(rx*20);
if(j==9) sum10->Fill(rx*10);
if(j==19) sum20->Fill(rx*5);
if(j==99) sum100->Fill(rx*1);
}
}
x.Clear();
expdist->Draw();
x.Draw();
x.Clear();
gPad->SetLogy(0);
sum2->Draw();
x.Draw();
x.Clear();
gPad->SetLogy(0);
sum5->Draw();
x.Draw();
x.Clear();
gPad->SetLogy(0);
sum10->Draw();
x.Draw();
x.Clear();
gPad->SetLogy(0);
sum20->Draw();
x.Draw();
x.Clear();
gPad->SetLogy(0);
sum100->Draw();
x.Draw();
x.Clear();
TH1F *Landaudist=new TH1F("Landaudist","Landaudist",200,0,50);
TH1F *sum2_1=new TH1F("sum2_1","sum 1~2",4000,0,4000);
TH1F *sum5_1=new TH1F("sum5_1","sum 1~5",4000,0,4000);
TH1F *sum10_1=new TH1F("sum10_1","sum 1~10",4000,0,4000);
TH1F *sum20_1=new TH1F("sum20_1","sum 1~20",4000,0,4000);
TH1F *sum100_1=new TH1F("sum100_1","sum 1~100",4000,0,4000);
// sum2_1->SetLineColor(kBlack);
//sum5_1->SetLineColor(kGreen);
//sum10_1->SetLineColor(kBlue);
//sum20_1->SetLineColor(kRed);
//sum100_1->SetLineColor(kBlack);
TRandom3 *rndmx1=new TRandom3();
for(int i=0;i<100000;i++)
{
double rx=0;
Landaudist->Fill(rndmx1->Landau(10,1));//Landau(x,y):mean:x;sigma:y;
for(int j=0;j<100;j++)
{
double x=rndmx1->Landau(10,1);
// while(x>50) x=rndmx1->Landau(10,1);
rx=rx+x;
if(j==1) sum2_1->Fill(rx*50);
if(j==4) sum5_1->Fill(rx*20);
if(j==9) sum10_1->Fill(rx*10);
if(j==19) sum20_1->Fill(rx*5);
if(j==99) sum100_1->Fill(rx*1);
}
}
%jsroot on
x.Clear();
Landaudist->Draw();
gPad->SetLogy(0);
x.Draw();
%jsroot on
x.Clear();
sum2_1->SetLineColor(kBlack);
sum5_1->SetLineColor(kGreen);
sum10_1->SetLineColor(kBlue);
sum20_1->SetLineColor(kRed);
sum100_1->SetLineColor(kBlack);
gPad->SetLogy(0);
sum2_1->Draw();
sum5_1->Draw("same");
sum10_1->Draw("same");
sum20_1->Draw("same");
sum100_1->Draw("same");
x.Draw();
%jsroot on
//TH1F *Landaudist=new TH1F("Landaudist","Landaudist",200,0,50);
TH1F *sum2_2=new TH1F("sum2_2","sum 1~2",4000,0,4000);
TH1F *sum5_2=new TH1F("sum5_2","sum 1~5",4000,0,4000);
TH1F *sum10_2=new TH1F("sum10_2","sum 1~10",4000,0,4000);
TH1F *sum20_2=new TH1F("sum20_2","sum 1~20",4000,0,4000);
TH1F *sum100_2=new TH1F("sum100_2","sum 1~100",4000,0,4000);
sum2_2->SetLineColor(kBlack);
sum5_2->SetLineColor(kGreen);
sum10_2->SetLineColor(kBlue);
sum20_2->SetLineColor(kRed);
sum100_2->SetLineColor(kBlack);
TRandom3 *rndmx2=new TRandom3();
for(int i=0;i<100000;i++)
{
double rx=0;
Landaudist->Fill(rndmx2->Landau(10,1));//Landau(x,y):mean:x;sigma:y;
for(int j=0;j<100;j++)
{
double x=rndmx2->Landau(10,1);
while(x>50) x=rndmx2->Landau(10,1);
rx=rx+x;
if(j==1) sum2_2->Fill(rx*50);
if(j==4) sum5_2->Fill(rx*20);
if(j==9) sum10_2->Fill(rx*10);
if(j==19) sum20_2->Fill(rx*5);
if(j==99) sum100_2->Fill(rx*1);
}
}
x.Clear();
sum2_1->SetLineColor(kBlack);
sum5_1->SetLineColor(kGreen);
sum10_1->SetLineColor(kBlue);
sum20_1->SetLineColor(kRed);
sum100_1->SetLineColor(kBlack);
gPad->SetLogy(0);
sum2_2->Draw();
sum2_2->GetYaxis()->SetRangeUser(0,800);
sum5_2->Draw("same");
sum10_2->Draw("same");
sum20_2->Draw("same");
sum100_2->Draw("same");
x.Draw();
总结: 朗道分布的拖尾会影响对中心极限定理的验证;因为中心极限定理的前提是元素分布要有有限的均值和方差;
!jupyter nbconvert checkCLT.ipynb --to html