2010-09-11 43 views
3

我有2個未知數的方程組,我想用MATLAB解決,但不知道如何編程。我已經給出了關於伽馬分佈的一些信息(平均值1.86,在1.61和2.11之間的90%間隔),並且最終想要得到平均值和方差。我知道我可以使用正態近似,但我寧願求解A和B,伽馬分佈的形狀和尺度參數,然後找到平均值和方差。在僞MATLAB代碼,我想解決這個問題:MATLAB |根據平均值和概率區間計算gamma dist的參數

gamcdf(2.11, A, B) - gamcdf(1.61, A, B) = 0.90; 
A*B = 1.86; 

你將如何去解決這個問題?如果有幫助,我有符號數學工具箱。

回答

5

平均值是A * B。那麼你是否可以用平均值(μ)和B來解答A?

A = mu/B 

當然,除非你知道B,否則這沒有好處。

看看你的第一個表情。你可以替代嗎?

gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) = 0.90 

這會讓你更接近嗎?也許。除了不完整的伽馬函數本身,將沒有可用的有用符號解決方案。你如何在一個未知的matlab中以數值方式求解單個方程?使用fzero。

當然,fzero會查找零值。但通過減去0.90,這已經解決了。

我們可以定義一個fzero可以使用的函數嗎?使用功能句柄。

>> mu = 1.86; 
>> gamfun = @(B) gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) - 0.90; 

所以試試吧。在我們這樣做之前,我總是建議密謀。

>> ezplot(gamfun) 

嗯。該情節表明,可能很難找到你的函數的零。如果你確實嘗試過,你會發現在這裏需要fzero的良好起始值。

對不起,我第一次嘗試。更好的起始值爲fzero,再加上一些更多的繪圖確實給出了產生所需形狀的伽瑪分佈。

>> B = fzero(gamfun,[.0000001,.1]) 
B = 
     0.0124760672290871 
>> A = mu/B 
A = 
      149.085442218805 
>> ezplot(@(x) gampdf(x,A,B)) 

事實上,這是一個非常「正常的」,即高斯曲線。

+0

太棒了,謝謝你的詳細解答。 fzero功能非常棒!不過,我有點沮喪,沒有解決方案,因爲我試圖複製的一篇論文的作者說,他使用了具有這些特徵的分佈作爲MCMC模擬的先驗分佈。我不認爲你對MCMC很熟悉,是嗎?如果你是,你會介意快速看一下本文的第11頁,並讓我知道我是否誤解了某些東西?以下是該論文的網址:http://bit.ly/9uWlLN。 – jefflovejapan 2010-09-11 12:22:54

+0

我之前給出的細節是圖表tau中的第一個細節。 – jefflovejapan 2010-09-11 13:58:13

+0

我通讀報紙,然後做了更多的演奏。我需要爲fzero使用更好的起始值,再加上一個區間來包含解決方案以獲得收斂。 – 2010-09-11 14:09:25