Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:python_advanced_problems [2025-10-17 19:47] – [Newton Fraktale] scatalit:python_advanced_problems [2025-10-20 11:14] (aktuell) sca
Zeile 470: Zeile 470:
  
 Im Bild oben sind alle *schwarzen Punkte* diejenigen, die zur Mandelbrot-Menge gehören. Die farbigen gehören nicht dazu. Im Bild oben sind alle *schwarzen Punkte* diejenigen, die zur Mandelbrot-Menge gehören. Die farbigen gehören nicht dazu.
 +
 +**Umgang mit AI:**
 +
 +   * Der **Weg ist das Ziel**!
 +   * Es geht darum, dass du Fraktale wirklich verstehst ...
 +   * ... und diese Programmieren kannst.
 +   * Challenge:
 +     * Verwende keine AI.
 +     * Schalter WLAN aus, verwende nur um Module zu installieren.
  
 **Vorgehen:** **Vorgehen:**
Zeile 478: Zeile 487:
    1. Punkte, die den Schwellenwert nicht erreichen, gelten als Teil der Mandelbrot-Menge (meist schwarz).    1. Punkte, die den Schwellenwert nicht erreichen, gelten als Teil der Mandelbrot-Menge (meist schwarz).
    1. Speichere in einem **Array für jeden Pixelpunkt** also die Anzahl Schritte bis der Schwellenwert erreicht wird resp. $0$ falls der Punkt zur Mandelbrotmenge gehört.    1. Speichere in einem **Array für jeden Pixelpunkt** also die Anzahl Schritte bis der Schwellenwert erreicht wird resp. $0$ falls der Punkt zur Mandelbrotmenge gehört.
-   1. **Visualisiere** die Mandelbrot-Menge mit einer Colormap: Verschiedene Werte im Array werden durch verschiedene Zahlen dargestellt. Tipp: Wenn man die Werte verändert, indem man z.B. das ganze Array mit eine Zahl multipliziert oder eine Funktion auf dieses anwendet, so kann man die Darstellung verändern.+   1. **Visualisiere** die Mandelbrot-Menge mit einer Colormap: Verschiedene Werte im Array werden durch verschiedene Zahlen dargestellt. Tipp: Wenn man die Werte verändert, indem man z.B. das ganze Array mit eine Zahl multipliziert oder eine Funktion auf dieses anwendet, so kann man die Darstellung verändern. Siehe unten für ein Code-Beispiel.
    1. Da diese Berechnung für eine vernünftige Auflösung ziemlich lange geht, sollten die Berechnungen **parallelisiert** werden. Verwende dazu z.B. [[python_advanced#numba]]    1. Da diese Berechnung für eine vernünftige Auflösung ziemlich lange geht, sollten die Berechnungen **parallelisiert** werden. Verwende dazu z.B. [[python_advanced#numba]]
 +   1. (Optional) **Zoom:** Schreibe eine Animation, die immer weiter ins Fraktal hinein zoomt.
 +
 +**Beispiel: Code für Visualisierung**
 +
 +<code python>
 +import numpy as np
 +from PIL import Image
 +import matplotlib.pyplot as plt
 +
 +array_pixels = ... # ist numpy array, Wert für jedes Pixel
 +
 +img_fn = Image.fromarray(array_pixels)
 +
 +cm = "magma" # colormap
 +
 +plt.figure(figsize=(10,10))
 +plt.imshow(img_fn, cmap=cm) 
 +plt.axis("off")
 +plt.show()
 +
 +cmap_hot = plt.get_cmap(cm)
 +norm = plt.Normalize(vmin=array_pixels.min(), vmax=array_pixels.max())
 +rgba = (cmap_hot(norm(array_pixels)) * 255).astype(np.uint8)  # shape (H,W,4)
 +img = Image.fromarray(rgba, mode="RGBA")
 +img.save("file_name.png", format="PNG", compress_level=6)
 +</code>
  
 ==== Newton Fraktale ==== ==== Newton Fraktale ====
Zeile 521: Zeile 556:
 Nun sind wir ready für Newton Fraktale! Vorgehen: Nun sind wir ready für Newton Fraktale! Vorgehen:
  
-   1. Wähle ein (komplexes) Polynom, z.B. $f(z) = z^3 - 1$ +   1. Wähle ein (komplexes) **Polynom**, z.B. $f(z) = z^3 - 1$ 
-   1. Ermittle die Nullstellen des Polynoms, z.B. mit `numpy.roots()`+   1. Ermittle die **Nullstellen** des Polynoms, z.B. mit `numpy.roots()` 
 +   1. Wähle einen **Bereich der komplexen Ebene** und rastere ihn (Pixel → $z$-Werte). 
 +   1. Iteriere über jeden dieser Werte (Pixel). Verwende diesen Wert als **Startwert** im Newton-Verfahren. Dieses wird zu einer der Nullstellen führen. Speichere, wie viele Iterationsschritte notwendig sind, um genügend nahe an eine der Lösungen zu kommen. 
 +   1. Färbe nun alle Pixel, die zur gleichen Nullstelle führen, mit der gleichen Farbe ein. Variiere den genauen Farbton entsprechend der Iterationsschritte, die notwendig waren.
        
  
  • talit/python_advanced_problems.1760730448.txt.gz
  • Zuletzt geändert: 2025-10-17 19:47
  • von sca