gamma function for N>100
5 次查看(过去 30 天)
显示 更早的评论
Hi, everyone.
I have written a simple code by using a gamma function. when I choose N>98, the answer is Nan. What should I do to fix this problem?
function sii = diagonals(n, al, alp, bet)
ssi = zeros(1,n+1);
for i = 1:n+1
sii(i) = (2^(al+1)*(gamma(i-1+alp+1))*(gamma(i-1+bet+1)))/((2*(i-1)+al+1)*(factorial(i-1))^2);
end
end
2 个评论
John D'Errico
2018-10-8
编辑:John D'Errico
2018-10-8
Is there a good reason why you have not just used gamma itself? Why would you write your own poor code to compute something that is computed well already for you? I'm not going to try to decrypt what you are doing based on undocumented, poorly written code. Perhaps you are trying to write your own incomplete gamma. Oops, also exists already, part of MATLAB.
采纳的回答
Walter Roberson
2018-10-9
If gammaln cannot be made to suit your purpose then you should use the symbolic toolbox or equivalent
更多回答(1 个)
John D'Errico
2018-10-8
No. You will not make it work for large values, when they exceed the limits of gamma itself. Your code is not better than what you will find inside gamma itself. Sorry, but NOT.
Instead, consider using the function gammaln, the natural log of the gamma function. In essentially all cases when gamma produces an overflow, gammaln will be the solution, by re-writing what you are doing to accommodate logs. Only consider exponentiating at the end.
gammaln(10000)
ans =
82099.7174964424
Those big numbers are meaningless in a double precision context, because they would vastly overflow the dynamic range of a double precision number.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Gamma Functions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!