poster
2019-12-10, 20:48
我有一个由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; 您将如何解决这个问题?我有符号数学工具箱,如果有帮助的话。
回答:
平均值是A * B。那么,您能否用均值(mu)和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)) 实际上,这是一个非常“正常”的曲线,即高斯曲线。
更多&回答... (https://stackoverflow.com/questions/3690361)
gamcdf(2.11, A, B) - gamcdf(1.61, A, B) = 0.90; A*B = 1.86; 您将如何解决这个问题?我有符号数学工具箱,如果有帮助的话。
回答:
平均值是A * B。那么,您能否用均值(mu)和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)) 实际上,这是一个非常“正常”的曲线,即高斯曲线。
更多&回答... (https://stackoverflow.com/questions/3690361)