Voraussetzungen

Zunächst installieren wir Julia und starten eine interaktive (REPL) Sitzung, die sich mit freundlicher ASCII-Art meldet.

JULIA
❯ julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.11.0-rc3 (2024-08-26)
 _/ |\__'_|_|_|\__'_|  |  Fedora 41 build
|__/                   |

julia>
Klicken Sie zum Erweitern und mehr anzeigen

Zunächst müssen wir noch einige Pakete installieren, die für die folgenden Beispiele benötigt werden:

JULIA
using Pkg
Pkg.add(["Plots", "LaTeXStrings", "Roots", "LinearAlgebra"])
Klicken Sie zum Erweitern und mehr anzeigen

Mit der Taste ] wechseln wir in den Paketmanager; hier können wir Pakete installieren oder aktualisieren. Beendet wird dieser einfach mit Ctrl+C.

Folgen, Reihen und Grenzwerte

Lass uns mal die Folge

$$ a_n = \frac{1}{n} \qquad n \in \mathbb{N} $$

visualisieren. Wie man sich leicht klarmacht, konvergiert diese Folge gegen Null.

JULIA
using Plots

a(n) = 1 / n
n = 1:100
plt = plot(n, a.(n),
  label="a(n) = 1/n",
  xlabel="n", ylabel="a(n)",
  title="Konvergente Folge", legend=:topright,
  linestyle=:solid)

savefig(plt, "konvergenz.png")
Klicken Sie zum Erweitern und mehr anzeigen

Konvergente Folge

Newton-Verfahren visualisieren

Das Newton-Verfahren (auch Newton-Raphson) ist ein iterativer Algorithmus zur numerischen Bestimmung von Nullstellen. Die Kernidee ist die Linearisierung: Anstatt die Nullstelle einer komplexen Funktion $f(x)$ direkt zu suchen, legt man eine Tangente an den Funktionsgraphen an einem Startpunkt $x_0$ an. Der Schnittpunkt dieser Tangente mit der x-Achse dient als verbesserte Näherung $x_1$ für den nächsten Schritt. Durch die quadratische Konvergenz nähert sich das Verfahren meist extrem schnell dem tatsächlichen Wert an.

$$ x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} $$
JULIA
using Plots

# Funktion und Ableitung
f(x) = x^3 - 2x - 5
df(x) = 3x^2 - 2

# Newton-Schritt
x0 = 2.5
x1 = x0 - f(x0)/df(x0)

# Plot-Bereich
xs = 1.5:0.01:3.0
p = plot(xs, f.(xs), label="f(x) = x³ - 2x - 5", lw=2, color=:blue, legend=:topleft)

# Tangente einzeichnen: t(x) = f(x0) + f'(x0) * (x - x0)
t(x) = f(x0) + df(x0) * (x - x0)
plot!(xs, t.(xs), label="Tangente an x₀", color=:red, linestyle=:dash)

# Punkte markieren
scatter!([x0], [f(x0)], color=:red, label="Startpunkt x₀")
scatter!([x1], [0], color=:green, label="Nächster Schritt x₁")

# Achsen-Verschönerung
hline!([0], color=:black, label="", alpha=0.3)
vline!([x1], color=:green, linestyle=:dot, alpha=0.3, label="")

# Speichern für Hugo
savefig(p, "newton_iteration.png")
Klicken Sie zum Erweitern und mehr anzeigen

Newton-Verfahren

Lineare Abbildung visualisieren

Mit dem Paket Latexify lassen sich z.B. Matrizen und Vektoren in LaTeX-Format darstellen.

$$A = \left[\begin{array}{cc} 2.0 & 1.0 \\ 1.0 & 3.0 \\ \end{array}\right] $$
JULIA
using Plots
using LinearAlgebra

A = [2.0 1.0; 1.0 3.0]
v = [1.0, 1.0]
w = A * v

# Plot erstellen
p = plot([0, v[1]], [0, v[2]],
    arrow=true,
    label="v",
    lw=3,
    xlim=(-1, 5),
    ylim=(-1, 5),
    aspect_ratio=:equal, # Wichtig für korrekte Winkel
    title="Lineare Abbildung: v -> A*v")

plot!(p, [0, w[1]], [0, w[2]],
    arrow=true,
    label="A*v",
    lw=3)

# In das assets-Verzeichnis des Posts speichern
savefig(p, "linear_transformation.png")
Klicken Sie zum Erweitern und mehr anzeigen

Lineare Abbildung

Eigenvektoren und Eigenwerte

Zu den Matrizen können wir uns ganz einfach Eigenwerte und Eigenvektoren ausrechnen lassen:

JULIA
using LinearAlgebra

# Die Matrix vom vorherigen Beispiel
A = [2.0 1.0; 1.0 3.0]

# Berechnung der Eigenwerte und Eigenvektoren
vals, vecs = eigen(A)

println("Ergebnis der Eigenwertzerlegung:")
println("================================")
println("Eigenwerte (λ):")
println(vals)
println("\nEigenvektoren (Normalisiert):")
println(vecs)

# Kurze Verifikation: A * v = λ * v
v1 = vecs[:, 1]
l1 = vals[1]
println("\nVerifikation für den ersten Eigenvektor:")
println("A * v1 ≈ λ1 * v1: ", isapprox(A * v1, l1 * v1))
Klicken Sie zum Erweitern und mehr anzeigen
PLAINTEXT
Ergebnis der Eigenwertzerlegung:
================================
Eigenwerte (λ):
[1.381966011250105, 3.618033988749895]

Eigenvektoren (Normalisiert):
[-0.8506508083520399 0.5257311121191335; 0.5257311121191335 0.8506508083520399]

Verifikation für den ersten Eigenvektor:
A * v1 ≈ λ1 * v1: true
Klicken Sie zum Erweitern und mehr anzeigen

Plot mit LaTeXStrings

Die Verwendung von LaTeXStrings ermöglicht es, mathematische Ausdrücke direkt in den Plot zu integrieren. Damit wird der Plot schöner und besser lesbar.

JULIA
using Plots
using LaTeXStrings

# 1. Daten definieren
n = 1:50
a(n) = 1/n

# 2. Plot erstellen mit LaTeX-Labels
plt = plot(n, a.(n),
  label=L"a_n = \frac{1}{n}",
  title=L"\mathrm{Konvergenz\ der\ Folge }\ a_n",
  xlabel=L"n",
  ylabel=L"a_n",
  markershape=:circle,
  linealpha=0.5,
  legend=:topright)

savefig(plt, "latex_plot.png")
Klicken Sie zum Erweitern und mehr anzeigen

Plot mit LaTeXStrings

Mit diesen Bausteinen lassen sich komplexere Visualisierungen zusammebauen.

Kommentare

Suche starten

Geben Sie Schlüsselwörter ein, um Artikel zu suchen

↑↓
ESC
⌘K Tastenkürzel