在matlab上集成一个函数

时间:2017-02-04 19:50:23

标签: matlab numerical-integration

我有一个密度函数f_N,其定义如下(K_nu(z)是修改后的贝塞尔函数):

enter image description here

我想为N的每个值计算以下积分:

enter image description here

以下是matlab中的上述实现。

for N=1:100
    syms z
    f =@(z) (1/(gamma(N)*sqrt(pi))*(z/2).^(N-0.5).*besselk(0.5-N,z));
    g = @(z) f(z).*log(f(z));
    val=integral(g,0,Inf);

但是当我运行上面的代码时,它总是为N的各种值返回NaN,并带有以下警告:

Warning: Infinite or Not-a-Number value encountered

有人可以建议一种简单的方法来避免这个问题吗?

1 个答案:

答案 0 :(得分:0)

我不认为你正在做你认为自己在做的事情。您作为符号的z声明将被函数句柄定义覆盖。这意味着积分不是象征性的,而是数字的。所以你只需要删除函数句柄符号" @(z)"并象征性地做积分......

我的猜测,如果没有彻底分析这个,你的整合域[0,inf]中的一个点会产生一个值f(x)= inf,它会破坏数字集成技术,但也许不是一个符号的技术