无论如何用MATLAB计算β分布的平均值?

时间:2013-09-03 08:11:10

标签: matlab math

这是我计算平均值的代码:

syms a b x

f=1/(beta(a,b))*x^(a-1)*(1-x)^(b-1);

int(x*f,x,0,1)

Warning: Explicit integral could not be found. 

ans =


int((x*x^(a - 1)*(1 - x)^(b - 1))/beta(a, b), x == 0..1)

我该如何解决这个问题?

这是TryHArd的结果:

syms x a b

f=int(x^(a-1)*(1-x)^(b-1),x,0,1)

警告:找不到显式积分。

f =

piecewise([0 < real(a) and 0 < real(b), beta(a, b)], [real(a) <= 0 or real(b) <= 0, int(x^(a - 1)*(1 - x)^(b - 1), x == 0..1)])

我的结果与TryHard没有显示相同的gamma(a)*gamma(b)/gamma(a+b)

4 个答案:

答案 0 :(得分:2)

我假设beta你的意思是

  

beta(z,w)= t。^(z-1)的0到1的积分。*(1-t)。^(w-1)dt。

然后解决问题:

>> int((x^(a-1))*((1-x)^(b-1)),x,0,1)

ans =

gamma(b)*gamma(a)/gamma(a+b)

所需的积分相当于:

>> bint=int((x^(a-1))*((1-x)^(b-1)),x,0,1);
>> int( x*((x^(a-1))*((1-x)^(b-1)))/bint,x,0,1)

ans =

a/(a+b)

(这是使用早期版本的Matlab SMT(在R14上)计算的,但应作为指导。)

答案 1 :(得分:1)

Beta版本的平均值为1/(1+b/a)。请参阅示例here

答案 2 :(得分:1)

Wolfram alpha能够胜任。

直接计算定积分超过最大标准计算时间,但它可以找到indefinite integral。将该表达式限制在0到1之间的x,意味着只需将x等同于1。这导致this expression,其替代形式是beta分布均值的标准形式。

Wolfram Mathematica(&amp; Alpha)在符号数学方面比MuPad更好。我建议只使用MATLAB来实现它的基础:数值数学。除了一些边缘情况之外,我不认为MuPad会接近Wolfram所取得的成就。

答案 3 :(得分:1)

如果您需要某些特定参数alpha和beta的结果,可以使用betastat。此函数也可以用于向量,如:

A=[4 4 4];
B=[5 6 7];
[m,v]=betastat(A,B)

这将为m(平均值)和v(方差)提供3元素向量。对于此示例,m将是beta(4,5),beta(4,6)和beta(4,7)的均值。 (注意,这里的“beta”表示分布,而不是beta函数,如Matlab上的beta函数)。

如果您需要一般(数学)解决方案,请参阅Rody的答案。 Wolfram非常适合这个。

编辑:您可以通过函数betapdf定义f(在您的代码中),而不是您在那里写的整个公式。