全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1371
推到 Plurk!
推到 Facebook!

我的求正態分佈曲線最高點的值的代碼錯在那裏?

答題得分者是:fusung
jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-01 16:19:44 IP:222.135.xxx.xxx 未訂閱
各位高手,我要求出正態分佈曲線中y軸的值,計算公式如下:     x----正態分佈曲線橫坐標,即質量特性取值。 y----正態分佈曲線的縱坐標,即質量特性取某個值的概率(可能性大小) μ----正態分佈的平均值,也即構成正態分佈曲線的部體平均值。 σ----正態分佈的標準偏差 π-----圓周率,3.14159….. e------自然指數,2.7183….. 我求其最高點的代碼如下:
  #include "math.h"
  float iAverage = 7.235294;//平均值μ
  float iStandard = 1.300452;//標準差σ
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Edit1->Text=pow(2.7183,(-pow(iAverage-iAverage,2)/2*pow(iStandard,2)))/2.506628*iStandard;
}
算出y的值為0.518805531087748,但是實際的值不是這樣的,正確的值應該是標準偏差越大,y的值越小,這個是標準偏差越大,y的值越大,我怎麼看我的公式怎麼對,但計算結果是錯誤的,不知道我上面的代碼錯在那裏,請各位大大指點一下
發表人 - jean2004 於 2005/07/01 17:55:05
fusung
中階會員


發表:26
回覆:169
積分:99
註冊:2003-11-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-01 18:04:31 IP:211.23.xxx.xxx 未訂閱
哈囉,jean2004:    我把你的程式稍微修改一下,你參考看。    另外 (1) PI建議你用 4.0*atan(1); (2) exponential有對應的函式可以呼叫exp()。    關於你寫的部分:
 
Edit1->Text=pow(2.7183,(-pow(iAverage-iAverage,2)/2*pow(iStandard,2)))/2.506628*iStandard;
由於你的x選擇在平均值的位置上,所以理論上會影響y值的大小只有exp前面的項。 你可以試試看如果只印exp前面項運算出的結果對不對,或是其中哪一項出錯了,請你再花點時間debug吧。 下面是我寫的部分: < class="code"> float iAverage; //平均值μ float iStandard; //標準差σ float PI = 4.0*atan(1); float y; void __fastcall TForm1::Button1Click(TObject *Sender) { iAverage = StrToFloat(Edit1->Text); iStandard = StrToFloat(Edit2->Text); y = 1.0/(iStandard*sqrt(2.0*PI)) * exp( -pow(iAverage-iAverage,2)/2.0*pow(iStandard,2) ); Edit3->Text = FloatToStr(y); } /* The first step toward proving things for yourself is to understand how others have done it before! */ 發表人 - fusung 於 2005/07/01 18:20:16
------


The first step toward proving things for yourself is to understand how others have done it before!

jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-02 17:33:30 IP:222.135.xxx.xxx 未訂閱
在我的理解裏,標準差σ決定了曲線的形狀,平均值μ決定了圖形在X軸的位置,平均值μ應該和曲線的高度無關才對,為什麼公式裏會出現平均值μ?
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-02 22:11:01 IP:219.84.xxx.xxx 未訂閱
jean2004你好: y的最大值是1/sqrt(2*PI)/std。(把x用mean代入就是了..)
fusung
中階會員


發表:26
回覆:169
積分:99
註冊:2003-11-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-02 22:34:56 IP:211.23.xxx.xxx 未訂閱
引言: 在我的理解裏,標準差σ決定了曲線的形狀,平均值μ決定了圖形在X軸的位置,平均值μ應該和曲線的高度無關才對,為什麼公式裏會出現平均值μ?
哈囉,jean2004 平均值μ和曲線的高度無關這是正確: 當我更動程式裡面"平均值"時並不會影響y的輸出結果, 只有當我更動程式裡面的"標準差"時,才會影響y的輸出結果。 (1)根據你程式中得知在x=μ時,則 y = f(x) = 1/(σ (2π)^0.5 ) 所以當σ →∞ 則f(σ)→0 (高度僅僅受σ的影響,且當σ越大,則高度越小) (2)你所提到為什麼公式會出現μ,我舉個例子 假設今天量測某一個儀器兩次,分別得到兩組相同normal distribution的資料(即兩組資料的σ值相等) 一種情況是如果兩組資料的平均值也相等,那麼你畫出他們的pdf圖,f(x),會發現 這兩曲線一模一樣。 另一種情況是σ值相等,但μ值不相等,很有可能有一組資料是因為儀器沒有歸零(reset to zero) 或是其他原因所產生的偏移量(bias),造成這組資料和另一組資料的pdf圖在x軸上平移了, 也就是兩組資料μ值不相等卻有相同的資料分佈特性(因為量的是相同儀器)。 (3) 關於Normal Distribution可參考 http://mathworld.wolfram.com/NormalDistribution.html 以上如有誤,請予以指正,謝謝~ /*
------


The first step toward proving things for yourself is to understand how others have done it before!

jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-04 12:44:18 IP:222.135.xxx.xxx 未訂閱
明白了,真是高手呀,非常感謝兩位大蝦的回復,謝謝!!!
系統時間:2024-11-25 11:32:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!