Blatt 4 (Computer-Algebra)

155 days ago by saraedum

[This worksheet contains sample solutions for a computer algebra class in the winter semester 2011/12 at Leibniz Universität Hannover]

1.b) Rekursive Implementierung der Fibonacci-Folge:

def fib(n): if n==1: return 1 if n==2: return 1 return fib(n-1)+fib(n-2) 
       

1.c) Die Implementierung ist korrekt für n zwischen 1 und 20:

for n in range(1,21): if fib(n)!=fibonacci(n): print "Fehler" 
       

2.b) Eine Folge, die gegen \sqrt{a} konvergiert:

a=9 def folge(n): if n==0: return 1 return 1/2*(folge(n-1)+a/folge(n-1)) 
       

2.c) Für x_5 weicht der Wert erstmals um weniger als 1/100 vom tatsächlichen Wert \sqrt{a}=3 ab:

for i in range(5): print folge(i)-sqrt(a) 
       
-2
2
2/5
2/85
2/21845
-2
2
2/5
2/85
2/21845

3.a) Die harmonische Reihe (iterativ):

def harmonisch(n): summe = 0 for i in range(1,n+1): summe = summe+1/i return summe 
       

3.b) Die harmonische Reihe divergiert:

n=0 # Suche zuerst in Schritten der Größe 100 while harmonisch(n+100)<=10: n=n+100 # Dann in Schritten der Größe 1 (besser wäre natürlich _eine_ Binäre Suche) while harmonisch(n)<=10: n=n+1 print n 
       
12367
12367

4.a) Taylor-Entwicklung von e^x:

def taylor(x,n): summe = 0 for k in range(n+1): summe = summe + x^k/factorial(k) return summe 
       

4.b) Güte der Taylor-Entwicklung:

print N(e^1-taylor(1,0),digits=3) print N(e^1-taylor(1,1),digits=3) print N(e^1-taylor(1,2),digits=3) print N(e^1-taylor(1,3),digits=3) 
       
1.72
0.718
0.218
0.0515
1.72
0.718
0.218
0.0515

5.a) Eine Reihe die \pi approximiert:

def pi1(n): summe = 0 for k in range(n+1): summe += (-1)^k/(2*k+1) return 4*summe print N(pi1(10000),digits=10),N(pi,digits=10) 
       
3.141692644 3.141592654
3.141692644 3.141592654

5.b) Alternativ:

def pi2(n): summe = 0 for k in range(n+1): summe += 16^(-k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6)) return summe 
       

5.c) Güte der Approximationen:

print N(pi1(10000),digits=10) print N(pi2(0),digits=10) print N(pi2(1),digits=10) print N(pi2(2),digits=10) 
       
3.141692644
3.133333333
3.141422466
3.141587390
3.141692644
3.133333333
3.141422466
3.141587390

5.d) Korrekte Nachkommastellen der Approximation:

x = str(N(pi,digits=100000)) y = str(N(pi2(10000),digits=100000)) correct_digits=-2 # "3." ergibt keine Nachkommastellen for (a,b) in zip(x,y):# durchlaufe die Zeichenketten simultan if a==b: correct_digits+=1 else: break print correct_digits 
       
12050
12050