Julia- / Mandelbrotmenge Verständnissfrage

darkeye2

Bekanntes Mitglied
Hallo,

in den letzten zwei Tagen hab ich mich viel über das Thema Komplexe Zahlen informiert und viel über die Tollen zeichnungen ("Apfelmänchen", ...) gelesen.

Die komplexen Zahlen hab ich zwar nicht 100% verstanden, aber gut genug, um damit rechnen zu können. Wer denkt, dass er mir auf einfache weiße erklären kann, was das i genau zu bedeuten hat (außer i² = -1), darf es gerne versuchen :).

Nun habe ich aber ein verständnissproblem bei den Juliamengen, ich weiß, dass eine komplexe zahl c konstant bleibt, während zN sich verändert. Nun verstehe ich leider nicht ganz, wie sich das genau verändert. Was ich schon habe, ist eine funktion, die mir eben bis zu einer bestimmten "tiefe" werte in die funktion zn²+c einsetzt:

Java:
		CZahl zN = com;
		
		for(int i= 0; i<deep; i++){
			zN = (zN.qdr.add(c));

		}

doch einfach jeden wert, der bei der schleife rauskommt einzuzeichnen bringt ja anscheinend nicht das gewünschte ergebniss.

Nach dem ich mir ein paar Quellcodes angeschaut hab war ich nicht schlaufer, hier ist der Quellcode eines applets, wenn den jemand mal erklären könnte wäre es toll, (es geht nur um die logischen / mathematischen abläufe). Besonderes würde mich interessieren, wofür die zahl "47" hier steht und was check Zo genau prüft.
Java:
import java.awt.*;
import java.applet.*;

public class Julia extends Applet {

    double reC, imC;

    public void init() {
        setBackground(new Color(255,255,255));
    }

    // Zo-Werte checken nach Zn+1 = Zn^2 + C, C = const.
    public int checkZo(double reZ_minus1,double imZ_minus1) {
        double reZ,imZ;
        int i;
        for (i=0;i<47;i++) {
            imZ=2*reZ_minus1*imZ_minus1+imC;
            reZ=reZ_minus1*reZ_minus1-imZ_minus1*imZ_minus1+reC;
            if (reZ*reZ+imZ*imZ>4) return i;
            reZ_minus1=reZ;
            imZ_minus1=imZ;
        }
        return i;
    }

    // Punkte berechnen und setzen
    public void paint (Graphics g) {
        double reZo, imZo, zelle=0.0065; // Ein Pixel = 0.0065
        int x,y,iterationenZo;
        Color colJulia = new Color(0,0,200); // Farbe Juliamenge
        reC = -0.65175;
        imC = 0.41850;

        imZo=-0.96; // oberer Rand
        for (y=0;y<300;y++) {
            reZo=-1.5; // linker Rand
            for (x=0;x<400;x++) {
                if (checkZo(reZo,imZo)==47) {
                    g.setColor(colJulia);
                    g.drawLine(x,y,x,y);
                }
                reZo=reZo+zelle; // nächste Spalte
            }
            imZo=imZo+zelle; // nächste Zeile
        }
    }
}
 

kay73

Bekanntes Mitglied
Den Wikipedia-Artikel über das Apfelmännchen hast Du bestimmt gelesen... ;-)

Nehmen wir mal an, wir wollten die Rekursionsbeziehung mit ganzen Zahlen nachbauen und nicht mit Komplexen. Dann wären wir auf einem Zahlenstrahl und nicht auf einer Ebene. Hier wären die ersten 3 Glieder mit dem Startwert C=-3:

1.) Z1 = Z0²+C = 0 + (-3) = -3
2.) Z2 = Z1² + C = (-3)² + (-3) = 6
3.) Z3 = Z2² + C = 6² + (-3) = 33

Getestet wird der Betrag der Zahlen Zn, der ist hier nicht sonderlich spannend. Die Rechenregeln für komplexe Zahlen sind aber gänzlich anders(Addition,Multiplikation, Betrag) und das ergibt für bestimme Zahlen eben dieses lustige Verhalten unter der Rekursion.

Code:
checkZo
testet, ob der Betrag des Punktes C in der komplexen Ebene chaotisch variiert oder nicht. Man kann zeigen(?), dass für einen Betrag kleiner gleich 4 für komplexe Zahlen unter dieser Rekursion wohl zur Julia-Menge gehören.

Die 47 ist die maximale Rekursionstiefe und ich kann nur vermuten, dass der Autor in einer anderen Applet-Version herausgefunden hat, dass für Tiefen kleiner 47 das Bild nicht mehr stimmt.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Es waren einmal eine handvoll Mathematiker, die munter Formeln hingeschrieben und Sachen ausgerechnet haben...
x^2 - 25 = 0 -> x=+/-4
x^2 - 4x + 4 = 0 -> x=2
... und alle waren froh. Irgendwann hat jemand geschrieben
x^2 + 1 = 0
und versucht eine Lösung dafür zu finden. Kurz bevor er angefangen hat vor Verzweiflung loszuflennen wie ein kleines Mädchen hat er sich gesagt: Menno...wenn's keine Lösung gibt, dann bilde ich mir eben einfach eine ein! Irgendeine imaginäre Einheit, die mit sich selbst malgenommen -1 ergibt. Ich nenne sie 'i'.

Viel mehr steckt da wirklich nicht dahinter. Es war halt praktisch, weil man damit alle diese Gleichungen lösen konnte, und es hat sich rausgestellt, dass man damit einen Haufen interessanter Sachen machen konnte. Dass es diese Zahlen nicht gibt, spielt ja keine Rolle, solange man damit rum-rechnen kann. Und schöne Bildchen auf den Monitor bringt.
Das auch zum Thema:
Zu sagen, dass "...für Tiefen kleiner 47 das Bild nicht mehr stimmt" ist so eine Sache. Das Bild stimmt nie. Erstens, weil es aus Pixeln besteht, zweitens, weil jeder Pixel potentiell falsch ist, solange man nicht unendlich viele Iterationen macht, und drittens ... ist das mit der Überabzählbarkeit bei allem, was mit Computern zu tun hat halt ein bißchen kompliziert...

Etwas vereinfacht (und vielleicht auch mathematisch unpräzise) : Wenn man die Iteration mit irgendeiner Zahl startet, und die Rechnung ganz oft wiederholt, und die Zahl dann IMMERnoch keinen Betrag größer 2 hat, dann gehört sie zur Julia-Menge. Wenn die Zahl irgendwann immer größer wird (speziell eben größer als 2) dann gehört sie NICHT zur Juliamenge. Und genau das wird in der check-Methode da überprüft: Die iteration wird 47 mal gemacht, und wenn der Betrag dann noch nicht größer als 2 ist, wird angenommen, dass der Punkt zur Juliamenge gehört.
 

Marco13

Top Contributor
Das war eine unterschwellige Message, die auf stilistisch-elaborierte und geschickte Art den Sachverhalt verdeutlichen sollte, dass auch Mathematiker Fehler machen. :smoke: :bae:
 

Ähnliche Java Themen

Neue Themen


Oben