[問題] 想請問一個問題 有關POISSON分配抽值 먠…

看板C_and_CPP (C/C++)作者 (awei)時間16年前 (2009/04/14 18:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
(1)poisson(10)抽100萬筆 計算樣本平均數 (跟母體期望值10 差距很小 差距是用手算的) 以上重複做了5次 每次差距小於0.01或者0.001以下 (2)poisson(100)抽100萬筆 計算樣本平均數 (母體期望值100) 重複作5次 但是每次差距有0.1到0.2 照理說樣本數夠多 樣本平均數應該很靠近母體期望值 但是感覺2怪怪的(1就不錯) 可以看看 是哪邊出問題嗎? (3)剛剛又跑了一次從 poison(1000)抽出500萬筆 樣本平均數998.XXX 樣本變異數10530.XXX (母體E[X]=1000 Var(X)=1000) 有很大的差距 樣本變異數完全走樣= =" (4)跑抽樣個數500萬 分配參數10 結果:樣本平均數9.999791 變異數10.009554 同樣4比3好很多(指跟母體期望值 變異數的差距) ------------------------------------------------ #include<iostream> #include<cstdlib> #include<ctime> #include<cmath> #include<vector> #include<string> #include<unistd.h> using namespace std; vector<double> rand_poi( const int &N,const double &lambda); int main(){ int n,d; double a,b,sum=0,std=0; clock_t T1, T2; cout<<"選擇分配:"<<endl; cout<<"(5)poisson "<<endl; cin>>d; cout<<"抽樣個數:\n"; cin>>n; vector<double> X(n); cout<<"分配所需參數:"<<endl; srand(getpid()); switch(d){ //其他case是其他分配 沒問題 所以就沒放上來 case 5 : cin>>a; cout<<endl; T1 = clock(); X=rand_poi(n,a); break; } //計算樣本平均 for(int i=0;i<n;++i) sum+=X[i]; printf("sample_mean=%f\n",sum/n); //計算樣本變異數 for(int i=0;i<n;++i) std+=pow((X[i]-sum/n),2); printf("sample_var=%f\n",std/(n-1.)); T2 = clock(); cout << "Running time = " << (T2-T1)/1000.0 << "(s)"<<endl; system("pause"); return 0; } vector<double> rand_poi( const int &N,const double &lambda){ vector<double> X(N); double t,u; for(int i=0;i<N;++i){ t=0; while(t<=1){ u=rand()*1./(RAND_MAX+1.); t=t-log(u)/lambda; if(t>1) break; else X[i]+=1; } } return X; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.120.43.190 ※ 編輯: usttsu 來自: 122.120.43.190 (04/14 18:23) ※ 編輯: usttsu 來自: 122.120.43.190 (04/14 18:28)
文章代碼(AID): #19v6CYsC (C_and_CPP)
文章代碼(AID): #19v6CYsC (C_and_CPP)