Summor i Maple, Mathematica och bc
Nu ett ord om två symbolbehandlande program, Maple och Mathematica. Att räkna ut det exakta värdet är möjligt (det är ju ett rationellt tal) men det tar mycket tid och minne. Maple ger ett exakt svar i en icke-evaluerad form. Jag kan sedan räkna ut en approximation med önskat antal decimaler. Psi är en specialfunktion, Digamma-funktionen, som är derivatan av logaritmen av gamma-funktionen.
> s := sum(1/k, k = 1..1000000); s := Psi(1000001) + gamma Exakt. > evalf(s, 50); Evaluera med 50 siffror 14.392726722865723631381127493188587676644800013744 evalf(s, 100); Eller med 100 siffror 14.39272672286572363138112749318858767664480001374431165341843304\ 581295850751799500356829817594721910
Detta tar försumbar tid i Maple (avsevärt mindre än en sekund).
I Mathematica kan motsvarande beräkning göras så här:
s := Sum[1 / k, {k, 1, 1000000}] N[s, 50]
men jag orkade inte vänta på svaret (Mathematica försöker nog räkna ut summan exakt först).
En enklare variant är att använda bc
(arbitrary precision
arithmetic language), som brukar finnas i de flesta unix-system. Så
här kan det se ut:
% bc bc 1.05 Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. scale = 20 ange antalet decimaler for(k = 1; k <= 1000000; k++) s += 1 / k s skriv ut 14.39272672286571864045
Notera att bc
saknar prompt. Det kan finnas två varianter
av bc
på vårt system, bc
och
gbc
(gnu-bc). Man kan få tillgång till några
elementära funktioner (se manualbladet, man bc
) med anropet:
bc -l
% gbc -l scale = 50 s(1) s står för sin .84147098480789650665250232163029899962256306079837