Gro*_*oot 1 math matlab largenumber numbers
我正在尝试使用MATLAB计算一个相当丑陋的积分.我遇到的问题虽然是我将一个非常大的数字(> 10 ^ 300)与一个非常小的数字(<10 ^ -300)相乘的部分.MATLAB为此返回'inf',即使它应该在0-0.0005的范围内.这就是我所拥有的
besselFunction = @(u)besseli(qb,2*sqrt(lambda*(theta + mu)).*u);
exponentFuncion = @(u)exp(-u.*(lambda + theta + mu));
Run Code Online (Sandbox Code Playgroud)
其中qb = 5,lambda = 12,theta = 10,mu = 3.我想要找到的是
besselFunction(u)*exponentFunction(u)
Run Code Online (Sandbox Code Playgroud)
对于你的所有真实价值观.问题是,只要你> 28,它将被评估为'inf'.我已经听过并试过使用MATLAB函数'vpa',但是当我想使用函数时它似乎不能正常工作......
任何提示将在这一点上受到赞赏!
我用对数.
设x = Bessel function of u
和y = x*exp(-u)
(比你的等式简单,但相似).
从那时log(v*w) = log(v) + log(w)
起log(y) = log(x) + log(exp(-u))
这简化为
log(y) = log(x) - u
Run Code Online (Sandbox Code Playgroud)
这将在数字上更好地表现.
另一个关键是不评估贝塞尔函数变成一个大数并将其传递给数学函数来获取日志.最好自己编写,直接返回贝塞尔函数的对数.看看Abramowitz和Stegun这样的参考资料,试着找一个.