这是我计算平均值的代码:
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(在代码中),而不是您在那里编写的整个公式。