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