Re: [VBA ]Application.NormSDist函數

看板Visual_Basic作者 (breakaway美夢成真)時間16年前 (2009/06/10 14:25), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《weast (kuan)》之銘言: : 平常是使用C語言的 : 可是今天找資料找到一個VBA的code 看到裡面有用到這個函數 : 所以上來問問看各位 這個函數的內容是做怎樣的運算呢? : 可否解釋一下其數學內容 方便我應用到C裡面 : 謝謝個位 標準常態分配機率密度函數(PDF) f(z) = [1/sqrt(2*PI)] * exp (-z^2/2) 其中 z = (z-mean)/sigma NORMSDIST回傳標準常態分配的累積機率 ex:考試成績服從常態分配,考生1000人,平均分數70,標準差10,想知道分數超過80人 數 先標準化 z = ( 80 - 70 ) / 10 P(Score < 80 ) => 分數小於80的累積機率,用NORMSDIST(1)可求出 標準常態累積密度函數(CDF) N(z) = [ (1/sqrt(2*PI) ] * [ 積分(負無窮到z) exp(-z^2/2)dz 只能用近似公式求出N(z)值 if z>= 0 N(z) = 1-n(z) * (a1*k+a2*k^2+a3*k^3+a4*k^4+a5*k^5) if z<0 N(z) = 1-N(-z) 其中n(z) 為f(z) k = 1 / ( 1 + 0.2316419 * z ) a1=0.31938153 a2=-0.356563782 a3=1.781477937 a4=-1.821255978 a5=1.330274429 現成code #include <math.h> //#include <windows.h> double Standard_Normal_Distribution(double d) { int flag=0; //Flag =1 if d<0 if(d<0) { flag=1; d=fabs(d); } double rr=0.2316419; double a1=0.31938153; double a2=-0.356563782; double a3=1.781477937; double a4=-1.821255978; double a5=1.330274429; double k=1/(1+d*rr); double M_PI=3.14159265359; double value=1-exp(d*d/(-2))*(a1*k+a2*pow(k,2)+a3*pow(k,3)+a4*pow(k,4) +a5*pow(k,5))/sqrt(2*M_PI); if(flag) return 1-value; else return value; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.167.60.247

06/10 14:49, , 1F
了解 謝謝哩!!
06/10 14:49, 1F
文章代碼(AID): #1ABr7oxJ (Visual_Basic)
文章代碼(AID): #1ABr7oxJ (Visual_Basic)