how can I calculate euler constant

25 次查看(过去 30 天)
hajer
hajer 2024-10-21,15:28
编辑: R 2024-10-21,18:58
colud you please help me to find the correct code to find eulers constant (20 digits after decimal) γ=0.57721 56649 01532 86061

回答(3 个)

Sam Chak
Sam Chak 2024-10-21,16:50
编辑:Sam Chak 2024-10-21,16:52
Three days ago, @John D'Errico and I discussed the Gamma function in this thread. I’m not sure how to perform the numerical integration shown in the image at first glance, but I do recognize the uppercase gamma as the Gamma function. Here’s the symbolic approach. I’m sure others will also share different approaches, including the limit of the infinite sum.
syms x
dG = diff(gamma(x))
EulerConstant = vpa(subs(-dG, x, 1))
Result:
  1 个评论
John D'Errico
John D'Errico 2024-10-21,17:26
编辑:John D'Errico 2024-10-21,17:38
Interesting, in that there are quite a few formulas to compute the Euler (or Euler-Mascheroni) constant shown here.
Though as I recall, not all of them will be easy to compute in any reasonable time, certainly not when 20 digits are needed. Your solution is correct of course, and does yield all correct digits.
The form I chose some years ago when I wanted to compute the Euler constant was one employing Harmonic numbers, which had the virtue of not needing a symbolic gamma function available.

请先登录,再进行评论。


Torsten
Torsten 2024-10-21,18:10
编辑:Torsten 2024-10-21,18:14
g = vpa(eulergamma())

R
R 2024-10-21,16:53
Hi @hajer,
If you’re looking to calculate Euler’s constant, there’s already a well-formed answer available on the forum that you can refer to: https://www.mathworks.com/matlabcentral/answers/267362-how-to-find-euler-s-constant?s_tid=answers_rc1-1_p1_MLT
Based on the information provided in that answer, here’s a MATLAB snippet that can help you achieve the same result:
% Set the number of terms for the series
n = 1e10;
% Initialize the sum
euler_sum = 0;
% Calculate the sum of the series
for k = 1:n
euler_sum = euler_sum + 1/k;
end
% Calculate Euler's constant
gamma = euler_sum - log(n);
% Display the result with high precision
fprintf('Euler''s constant (20 digits after decimal): %.20f\n', gamma);
Euler's constant (20 digits after decimal): 0.57721566505704302585
Increasing the number of terms will yield a more accurate result, but it will also significantly increase the computational time required. For even higher precision, you might want to explore more advanced methods, such as the Bessel function method mentioned in that answer.
Hope this helps!
  2 个评论
John D'Errico
John D'Errico 2024-10-21,17:08
编辑:John D'Errico 2024-10-21,17:15
That does NOT give you 20 correct digits after the decimal!!!!!!!
As performed in double precision, it can NEVER do so!!!!!!!
Why not? because double precision will not yield 20 correct decimal digits in such a computation. And even if it could, the simple sum will need to iterate at least more than 1e20 terms in the sum!
If your computer could process that loop at a rate of 1e9 loops per second, that still would then require 1e11 seconds to terminate. Since there are roughly 30e6 seconds in a year
number_of_years_until_termination = 1e11/30e6
number_of_years_until_termination = 3.3333e+03
So as a LOWER bound on the amount of time to terminate will be around 3333 years.
R
R 2024-10-21,17:48
编辑:R 2024-10-21,18:58
Thanks for your feedback @John D'Errico! I appreciate your insights about double precision limitations and the impracticality of summing n = 1e10 terms. Even after using the loop and vpa method, I found that I still got an inaccurate value for Euler's constant. It seems that the method suggested by @Sam Chak, which involves using the symbolic gamma function, is indeed the better approach for achieving the desired accuracy. I'll look into that for more reliable results. Thanks again!
Edit: Answer by Torsten is the best so far:
g = vpa(eulergamma(), 20)

请先登录,再进行评论。

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by