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


Back