Eine Methode zur schnellen Darstellung der Mandelbrotmenge fuer Maple. Trick 1) Die Variablen der Plotfunktion werden als Zaehlschleifen missbraucht. Maple muss Schleifen bilden um die Funktion Punkt fuer Punkt zu erstellen. Trick 2) Die Farbe in der Plotfunktion wird einer Funktion zugeordnet. Der Funktion mandelbrot. Hier lauft die eigentliche Berechnung. Trick 3) Es wird in der Funktion komplex gerechnet # The Mandelbrot set # # 2D display coding by John Oprea, oprea@math.csuohio.edu > restart: with(plots): > mandelbrot := proc(x, y) > local c, z, m; > c := evalf(x+y*I); > z := c; > for m to 30 while abs(z) < 2 do > z := z^2+c > od; > m > end: > plot3d(0, -2 .. 0.7, -1.2 .. 1.2, orientation=[-90,0], > grid=[250, 250], style=patchnogrid, > scaling=constrained, color=mandelbrot); *************************************************** Im Einzelnen: > restart: # loescht alle Speicherinhalte > with(plots): # bindet plot Bibliothek ein fuer 3 D Plot > mandelbrot := proc(x, y) # KOPF der FUNKTION # input x,y werden uebergeben # output ist letzter Wert daher m > local c, z, m; # Variablen gelten nur in dieser Funktion > c := evalf(x+y*I); # wieder sehr Tricky, # c wird als eine komplexe Variable aus x,y gebildet > z := c; # ANFANGSWERTE DER ITERATION > for m to 30 while abs(z) < 2 do > z := z^2+c A) FUEHRE DIE ITERATION SO LANGE DURCH SO LANGE BETRAG Z KLEINER 2 2 IST WILLKUERLICHE SCHRANKE. Wegen BETRAG ALSO SOLANGE INNERHALB KREIS MIT RADIUS 2. B) ABER MAXIMAL 30 mal. (Dies wird mit der m Schleife 30 mal getestet) Ist BEDINGUNG A VERLETZT WIRD DIE M SCHLEIFE ABGEBROCHEN IN M BLEIBT DER AKTUELLE SCHLEIFENWERTWERT ERHALTEN. Dieser ist der OUTPUT der Funktion. Gibt dann die Farbe an. Das ist sehr elegant programmiert. DAS HAUPTPROGRAMM > plot3d(0, -2 .. 0.7, -1.2 .. 1.2, orientation=[-90,0], > grid=[250, 250], style=patchnogrid, > scaling=constrained, color=mandelbrot); ENDE 0, -2 .. 0.7, -1.2 .. 1.2 ist der x/y Wertebereich innerhalb der Funktion plot3D, quasi die zwei Gratisschleifen. color=mandelbrot ruft mandelbrot auf ************************************************************** ALTERNATIVE: plot von 2D, 3D Arrays Ausdruck eines Feldes p[i] druck:=[seq([(i),(b[i])],i=1..N )] : plot(druck); Ausdruck eines Feldes p[i][j]; Die plot3d Funktion funktioniert hier nicht ! data:=[seq([ seq([i,j, p(i,j)], i=1..20)], j=1..20)]: surfdata(data, axes=frame);