MATLAB中学生密度的符号整合

时间:2015-07-14 13:46:51

标签: matlab symbolic-math

我想在MATLAB中整合学生的t密度,但MATLAB似乎失败了,只是在没有计算的情况下返回相同的表达式。关于如何进行的任何想法。我知道它应该评估为1但是强制MATLAB执行它的技巧是什么。

syms x s mu nu  

g = @(x) gamma(1/2*(nu+1))/(gamma(nu/2)*sqrt(pi*nu*s^2))*(1 + 1/nu*(x-mu)^2/s^2)^(-1/2*(nu+1));

int(g(x), x, -inf, inf)

3 个答案:

答案 0 :(得分:0)

我只是以这种方式尝试过:

syms x nu mu s
f = gamma(1/2*(nu+1))/(gamma(nu/2)*sqrt(pi*nu*s^2))*(1 + 1/nu*(x-mu)^2/s^2)^(-1/2*(nu+1))
int(f)

它有效!我得到了一些答案:

-(gamma(nu/2 + 1/2)*(mu - x)*hypergeom([1/2, nu/2 + 1/2], 3/2, -(mu - x)^2/(nu*s^2)))/(pi^(1/2)*gamma(nu/2)*(nu*s^2)^(1/2))

但如果我尝试明确的整合,它就不起作用了:

int(f, 0, 1)
ans =
int(gamma(nu/2 + 1/2)/(pi^(1/2)*gamma(nu/2)*((mu - x)^2/(nu*s^2) + 1)^(nu/2 + 1/2)*(nu*s^2)^(1/2)), x, 0, 1)

所以我去了帮助并阅读了这篇文章: 如果MATLAB无法找到函数f的积分的答案,它只返回int(f)。 (http://www.mathworks.com/help/symbolic/integration.html) 所以答案是它无法解决!

答案 1 :(得分:0)

我相信你的表达对于分析整合来说很复杂。但是,如果您正在使用数值积分,那么您的表达式似乎是正确的并且恰好为1:

nu = 60.2; % random number
mu = 1.3; % random number
s = 1e6; % random number

g = @(x) gamma(1/2*(nu+1))/(gamma(nu/2)*sqrt(pi*nu*s^2))*(1 + 1/nu.*(x-mu).^2/s^2).^(-1/2*(nu+1));
integral(g, -inf, inf)

给出

ans = 1.000

当然,对于某些nu,mu和s来说,这只是一个小的解决方法。

答案 2 :(得分:0)

我没有Matlab,但我可以在Maple中做到这一点,我知道Matlab的符号计算与Maple非常相似。你需要假设s> 0,然后进行替换z =(x-mu)/ s,然后假设nu> 0.在Maple代码中:

f:= GAMMA(1/2*(nu+1))/(GAMMA(nu/2)*sqrt(Pi*nu*s^2))*(1 + 1/nu*(x-mu)^2/s^2)^(-1/2*(nu+1)):
J:= Int(f, x= -infinity..infinity):
J1:= IntegrationTools:-Change(J, z= (x-mu)/s, [z]) assuming s > 0:
value(J1) assuming nu > 0;

如果你这样做,那么答案1几乎立即返回。请注意,GAMMA是大写的,Pi在Maple中大写。