我想在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)
答案 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中大写。