[問題] EM-顯隱性對偶基因頻率估計

看板C_and_CPP作者時間11年前 (2012/11/22 16:42), 編輯推噓0(009)
留言9則, 3人參與, 最新討論串1/2 (看更多)
開發平台(Platform):DevC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 1.原本我想要讓n1(AA基因型):n2(Aa基因型):n3(aa基因型)個數隨機服從multinomial distrbution,但是我只google到均勻分配的,所以只好假設n=6000,p=0.6 >>n1=2160 n2=2880,n3=960,請問有神可以告訴我怎麼隨機生成多項分配嗎?? 2.我產生出來的隨機機率p想要固定住,所以寫p0==p;之後想看遞迴後和p0絕對值差10的 -8次,但是好像有問題,因為結果出來一堆0,我在想是不是因為p0==p;那如果想要讓產 生出來的亂數值固定要怎麼設? 餵入的資料(Input): 預期的正確結果(Expected Output): 一個收斂的p值 錯誤結果(Wrong Output): 0 0 0 . . . 0 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> #include <cstdlib> #include <ctime> #include <cmath> using namespace std; int main(void) { double p,p0; int n1=2160,n2=2880,n3=960,n=6000,i=1; srand(time(NULL)); p=rand()/(RAND_MAX + 1.0); p0==p; while(i<1000) { p=((n1+n2)/6000)*(1/2-p); if(abs(p0-p)<=10^-8) cout << p << endl; i++; } system("pause"); return 0; } 補充說明(Supplement): ※ 編輯: romotting 來自: 111.248.74.196 (11/22 16:49)

11/22 17:07, , 1F
你可以產生兩個範圍 [0, 1) 的亂數,< 0.6 就是大 A
11/22 17:07, 1F

11/22 17:08, , 2F
BTW,十的負八次方可以用 pow(10.0, -8)。
11/22 17:08, 2F

11/22 17:10, , 3F
p0==p; 這行沒有意義。如果你要 assign 的話用 p0 = p;
11/22 17:10, 3F
我將p0==p;改成P0=P 10^-8改成pow(10.0, -8) 結果run出來沒有東西 請問還有哪裡有 錯嗎? ※ 編輯: romotting 來自: 111.248.74.196 (11/22 17:33)

11/22 17:45, , 4F
你確定這樣跑 p 會收斂到 p0 嗎?
11/22 17:45, 4F

11/22 17:47, , 5F
而且 p 一開始的值和 p0 相等,為什麼還需要收斂?
11/22 17:47, 5F

11/23 01:44, , 6F
((n1+n2)/6000)*(1/2-p) 應該(n1+n2)/6000跟1/2都不會
11/23 01:44, 6F

11/23 01:44, , 7F
promote to double吧@@?
11/23 01:44, 7F

11/23 01:55, , 8F
Q1 : 查一下#include <tr1/random> ,不能用的話再談
11/23 01:55, 8F

11/23 01:56, , 9F
Q2 我看不懂什麼意思說 @@ (應是我悟性不高)
11/23 01:56, 9F
文章代碼(AID): #1GhUM0mu (C_and_CPP)
文章代碼(AID): #1GhUM0mu (C_and_CPP)