jef*_*pan 3 matlab probability gamma-distribution
我有一个2个未知数的2个方程组,我想用MATLAB解决,但不知道如何编程.我已经获得了一些有关伽玛分布的信息(平均值为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;
Run Code Online (Sandbox Code Playgroud)
你会怎么解决这个问题?如果有帮助,我有符号数学工具箱.
小智 5
平均值是A*B. 所以你可以用平均值(mu)和B来解决A的问题吗?
A = mu/B
Run Code Online (Sandbox Code Playgroud)
当然,除非你知道B.否则这没有用,或者是吗?
看看你的第一个表达.你能替代吗?
gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) = 0.90
Run Code Online (Sandbox Code Playgroud)
这会让你更近吗?也许.除了不完整的伽玛函数本身之外,没有有用的符号解决方案可用.你如何用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;
Run Code Online (Sandbox Code Playgroud)
试试吧.在我们这样做之前,我总是建议你绘制一些东西.
>> ezplot(gamfun)
Run Code Online (Sandbox Code Playgroud)
嗯.该图表明可能很难找到函数的零.如果您尝试了它,您会发现fzero的良好起始值在这里是必要的.
对不起我的第一次尝试.fzero的更好的起始值,加上一些更多的绘图确实给出了产生所需形状的伽马分布.
>> B = fzero(gamfun,[.0000001,.1])
B =
0.0124760672290871
>> A = mu/B
A =
149.085442218805
>> ezplot(@(x) gampdf(x,A,B))
Run Code Online (Sandbox Code Playgroud)
实际上,这是一个非常"正常"的曲线,即高斯曲线.