有没有用MATLAB计算β分布的平均值



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

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)

我假设beta是指

β(z,w)=从0到1的t.^(z-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上)计算的,但应作为指导。)

Beta分布的平均值为1/(1+b/a)。例如,请参阅此处的

Wolfram alpha能够做到这一点。

计算定积分直接超过最大标准计算时间,但可以求出不定积分。将该表达式限制为0和1之间的x,意味着简单地将x等同于1。这就产生了这个表达式,它的替代形式是β分布平均值的标准形式。

WolframMathematica(&Alpha)比MuPad更擅长符号数学。我建议只在数学上使用MATLAB:数值。除了一些边缘案例之外,我不认为MuPad会接近Wolfram所取得的成就。

如果需要某些特定参数alpha和beta的结果,可以使用betastat。这个函数也可以与向量一起使用,比如:

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

这将为m(均值)和v(方差)提供一个3元素向量。对于这个例子,m将是β(4,5)、β(4,6)和β(4,7)的平均值。(注意,这里的"贝塔"表示分布,而不是贝塔函数,就像Matlab上的beta函数一样)。

如果你需要一个通用的(数学)解决方案,请参阅罗迪的答案。Wolfram非常适合这一点。

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

相关内容

最新更新