首页 文章

MATLAB中学生密度的符号整合

提问于
浏览
0

我想在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

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

    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)所以答案是它无法解决!

  • 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来说,这只是一个小的解决方法 .

  • 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中大写 .

相关问题