Voraussetzungen
Zunächst installieren wir Julia und starten eine interaktive (REPL) Sitzung, die sich mit freundlicher ASCII-Art meldet.
❯ julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.11.0-rc3 (2024-08-26)
_/ |\__'_|_|_|\__'_| | Fedora 41 build
|__/ |
julia>Zunächst müssen wir noch einige Pakete installieren, die für die folgenden Beispiele benötigt werden:
using Pkg
Pkg.add(["Plots", "LaTeXStrings", "Roots", "LinearAlgebra"])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.
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")
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)} $$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")
Lineare Abbildung visualisieren
Mit dem Paket Latexify lassen sich z.B. Matrizen und Vektoren in LaTeX-Format darstellen.
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")
Eigenvektoren und Eigenwerte
Zu den Matrizen können wir uns ganz einfach Eigenwerte und Eigenvektoren ausrechnen lassen:
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))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: truePlot 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.
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")
Mit diesen Bausteinen lassen sich komplexere Visualisierungen zusammebauen.
Kommentare