kapitel-06maple.mw

Mathematik

von T. Arens, F. Hettlich, Ch. Karpfinger, U. Kockelkorn, K. Lichtenegger,  H. Stachel

(zu Kapitel 6: Folgen)

> restart;

>

Folgen und Grenzwert

In Maple ist der Datentyp sequence vorgesehen, um mit Folgen zu arbeiten. Mit

> s:= 1,2,3,4,5; s[3];

s := 1, 2, 3, 4, 5

3

wird der Variablen s eine endliche Folge von Zahlen zugeordnet. Wie bei Listen und Mengen laesst sich auf einzelne Elemente zugreifen.  Haeufig ist der Befehl seq nuetzlich, um eine solche Folge zu definieren.

> r:= seq(j^2,j=1..10);

r := 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

Wir muessen diesen Datentyp von anderen unterscheiden. So kennen wir bereits den Typ list  (in eckigen Klammern)

> l:=[s,s];

l := [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

den wir schon beim plot Befehl kennengelernt haben, und den Typ set  (geschweifte Klammern), bei dem  Wiederholungen von Elementen rausfallen.

> m:={s,s};

m := {1, 2, 3, 4, 5}

Um den Datentyp  zu wechseln, gibt es den Befehl convert , zum Beispiel

> convert(l,set);

{1, 2, 3, 4, 5}

Die Anzahl der Elemente in einer Folge erhalten wir mit nops .  

> seq( [s[j],r[j]],j=1..nops([s]));

[1, 1], [2, 4], [3, 9], [4, 16], [5, 25]

(Beachte, wir haben nun eine  Folge von Listen konsturiert.)

Mit dem Befehl limit lassen sich  Grenzwerte bestimmen.

> limit( (1+1/n)^n, n=infinity);

exp(1)

Das zweite Argument ist notwendig, da der Befehl ach fuer andere Ausdruecke genutzt werden kann (siehe spaetere Abschnitte) .

> limit( (x^2-1)/(x-1),x=1);

2

Nun wenden wir uns den rekursiv definierten Folgen zu.  Nehmen wir unser Paradebeispiel, die Fibonacci-Zahlen, also

a[n+1] = a[n]+a[n-1] .

Wir lassen aber die Starwerte noch flexibel mit a[0]=n[1] und a[1]=n[2]. Im Buch haben wir den Fall n[1]=1 und n[2]=1  betrachtet und hatten gesehen, dass die Folge der Brueche

s[1] = a[1]/a[2] ,    s[2] = a[2]/a[3] ,   s[3] = a[3]/a[2] ,    . . .

gegen die Zahl  s = 1/2+sqrt(5)/2  konvergiert.  

Schreiben wir  ein kleines Programm, dass uns zu gegebenen zwei Zahlen n1,n2 die ersten  20  Eintraege dieser Folge  liefert.

> testen:= proc(n1,n2)
local a,b,j,tmp, seq:


a:=n1:

b:=n2:

seq := NULL:

for j from 1 by 1 to 20 do

  seq := seq, evalf(b/a);

  tmp := a + b:

  a   := b:

  b   := tmp:

od:

seq;

end:

> testen(1,1);

1., 2., 1.500000000, 1.666666667, 1.600000000, 1.625000000, 1.615384615, 1.619047619, 1.617647059, 1.618181818, 1.617977528, 1.618055556, 1.618025751, 1.618037135, 1.618032787, 1.618034448, 1.61803381...1., 2., 1.500000000, 1.666666667, 1.600000000, 1.625000000, 1.615384615, 1.619047619, 1.617647059, 1.618181818, 1.617977528, 1.618055556, 1.618025751, 1.618037135, 1.618032787, 1.618034448, 1.61803381...

> testen(123,456);
s:=evalf(1/2*(1+sqrt(5)));

3.707317073, 1.269736842, 1.787564767, 1.559420290, 1.641263941, 1.609286523, 1.621393385, 1.616753472, 1.618523490, 1.617847072, 1.618105393, 1.618006716, 1.618044406, 1.618030010, 1.618035509, 1.618...3.707317073, 1.269736842, 1.787564767, 1.559420290, 1.641263941, 1.609286523, 1.621393385, 1.616753472, 1.618523490, 1.617847072, 1.618105393, 1.618006716, 1.618044406, 1.618030010, 1.618035509, 1.618...

s := 1.618033988

Die beiden Zahlen n1,n2 scheinen keine Rolle zu spielen. Die Folge konvergiert anscheinend immer und besitzt stets denselben Grenzwert. Beweisen, dass dies richtig ist, kann Ihnen natuerlich kein Computer abmehmen !!!

Mit dem solve Befehl koennen wir Kandidaten fuer Grenzwerte bei rekursiv definierten Folgen aus der Fxpunktgleichung bestimme, zum Beispiel fuer

s[n+1] = 1+1/s[n] .

Wir erhalten moegliche Grenzwerte aus

> s:='s';
solve(s=1+1/s,s);

s := s

1/2+1/2*5^(1/2), 1/2-1/2*5^(1/2)

Kommentar: Da oben die Variable s belegt wurde, muessen wir diese Belegung hier erst durch s:='s' rueckgaengig machen, um keine Fehlermeldung zu bekommen.

In einigen Faellen gelingt es auch, aus der rekursiven Definition einer Folge eine explizite Darstellung zu gewinnen. Dies versucht der Befehl rsolve

> a[n]:=rsolve({a(n+1) = 2*a(n), a(0)=1}, a);

a[n] := 2^n

>

Aufgaben

(Um Aufgaben zu bearbeiten oeffnen Sie bitte ein neues Worksheet und probieren Sie dort ihre Befehle aus. Einen Loesungsvorschlag erhalten Sie, wenn sie die Loesung oeffnen. Dies sollten Sie aber erst nach eigenen Versuchen nutzen.)

1. Bestimmen Sie die Grenzwerte der Folgen

               a[n] = (1+n+n^2)/(n*(n+1)) ,        b[n] = (1+n+n^2)/(n+1) ,        c[n] = 1/(1+(-2)^n) .       

>

Loesung

2. Schreiben Sie ein Programm, dass die ersten n Elemente x[j] und die Betraege  

| x[j]-x[j-1] |    zu der rekursiven Folge      x[j+1] = x[j]^3/4+1/5      mit  x[0] = 0  ausgibt.

Bemerkung: Wenn Sie "shift" und "return" verwenden, koennen Sie einen Befehl in der naechsten Zeile weiterschreiben, ohne das dieser ausgewertet wird.

>

Loseung