[~/ANA00/03.txt] 2) Verwendung von Listen zum Plotten einer in rationalen Punkten unstetigen Funktion ============================================================== In Analysis I, Uebung 13, Aufgabe 2 war verlangt: Man zeige: Die Funktion f(x), definiert durch f(x) = 0, falls x reell und nicht rational ist, f(x) = 1/q, falls x = p/q rational ist mit teilerfremden ganzen Zahlen p, q, und q > 0, ist stetig x, falls x reell und nicht rational ist, und unstetig in x, fass x rational ist. -------------------------------------------------------------- Wir schreiben ein Programm "beisp", das eine Liste von Koordinatenpaaren der Form [x, f(x)] = [p/q, 1/q] erzeugt fuer q=2, ... , n und p=1, ... , q mit n >=3. Solch eine Liste ist fuer den "plot"-Befehl geeignet. Wir beschraenken uns dabei auf das Intervall (0,1) und stellen nur die Werte in den rationalen Punkten dar, weil alle anderen Werte =0 sind. Der Graph der Funktion besteht fuer die rationalen x in (0,1) aus den Punkten (hier als Listen geschrieben): [1/2,1/2], falls q=2 [1/3,1/3], [2/3,1/3], falls q=3, [1/4,1/4], [3/4, 1/4], falls q=4, [1/5,1/5], [2/5,1/5], [3/5,1/5], [4/5,1/5], falls q=5, u.s.w., und fuer die irrationalen x aus den Punkten [x,0]. Die Punkte werden hier also nicht nach wachsender Groesse von x geordnet sondern nach wachsendem Nenner q. Fuer n=q=2 haben wir also nur einen einzigen Punkt. Wir lassen deshalb nue Werte n>=3 zu. Das folgende Programm hat eine lokale Variable "result", die als Speicher fuer Zwischenergebnisse dient. Dort wird zu Beginn der erste Punkt [1/2,1/2] in Form einer einelementigen Liste [[1/2,1/2]] gespeichert. Dann wird diese Liste schrittweise erweitert durch neue Werte B mittels des Befehls result:=[op(result),B]. Dabei verwenden wir den Befehl "gcd(p,q)>1" zum Eliminieren der Paare p,q, deren groesster gemeinsamer Teiler (gcd, greatest common divisor) groesser als 1 ist, d. h. die NICHT teilerfremd sind. > beisp:=proc(n) local p, q, result, B; if n <3 then FAIL else result:=[[1/2, 1/2]]; > for q from 3 to n do for p from 1 to q do if gcd(p,q) > 1 then FAIL else B:=[ p/q, 1/q]; > result:=[op(result),B]; fi; od; od; fi; result; end; Probe mit n=5: > beisp(5); Der "plot"-Befehl akzeptiert solch eine Liste von Koordinatenpaaren und druckt sie als Punkte, wenn die Option "style=point" gesetzt wird. Als Symbol fuer den einzelnen Punkt kann gewaehlt werden: BOX, CROSS, CIRCLE, POINT, oder DIAMOND, vgl.: > ?plot[options] > plot(beisp(10), style=point, symbol=DIAMOND); > plot(beisp(100), style=point, symbol=POINT); 30 Sekunden auf Daphne. Anzahl der Punkte fuer n=100: > nops(beisp(100)); Dieses Bild ist durch die Funktionswerte [x,f(x)] mit 0 <= f(x); < 1/100 zu ergaenzen.