3

MATLAB を使用して解決したい 2 つの未知数の 2 つの方程式系がありますが、正確なプログラミング方法がわかりません。ガンマ分布 (1.86 の平均、1.61 と 2.11 の間の 90% 間隔) に関するいくつかの情報が与えられており、最終的に平均と分散を取得したいと考えています。正規近似を使用できることはわかっていますが、ガンマ分布の形状とスケールのパラメーターである A と B を解き、その方法で平均と分散を見つけたいと思います。疑似 MATLAB コードでは、これを解決したいと思います。

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

これを解決するにはどうすればよいでしょうか?それが役立つ場合、私は記号数学ツールボックスを持っています。

4

1 に答える 1

5

平均は A*B です。では、おそらく A を平均 (mu) と B の観点から解くことができますか?

A = mu/B

もちろん、これは B を知らなければ意味がありません。

最初の表情を見てください。代用できますか?

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

これで近づきますか?多分。不完全なガンマ関数自体を除いて、有用なシンボリック ソリューションはありません。matlabで不明な1つの方程式を数値的に解くにはどうすればよいですか? 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))

実際、これは非常に「通常の」、つまりガウス曲線です。

于 2010-09-11T11:32:27.357 に答える