Kurz: Nullstellen mit der Newton-Iteration x ← x − f(x)/f’(x):
Teil des Kurses MATLAB
Projekt 1: Newton-Verfahren
Nullstellen mit der Newton-Iteration x ← x − f(x)/f'(x):
1;
function [x, schritte] = newton(f, df, x0, tol)
x = x0;
schritte = 0;
while abs(f(x)) > tol && schritte < 50
x = x - f(x) / df(x);
schritte = schritte + 1;
end
end
f = @(x) x.^2 - 2;
df = @(x) 2 * x;
[x, n] = newton(f, df, 1, 1e-12);
fprintf('sqrt(2) = %.10f nach %d Schritten (Fehler %.1e)\n', x, n, abs(x - sqrt(2)));
[x2, n2] = newton(@(x) cos(x) - x, @(x) -sin(x) - 1, 0.5, 1e-12);
fprintf('Lösung von cos(x) = x: %.8f nach %d Schritten\n', x2, n2);Ausgabe:
sqrt(2) = 1.4142135624 nach 5 Schritten (Fehler 0.0e+00)
Lösung von cos(x) = x: 0.73908513 nach 4 SchrittenProjekt 2: Monte-Carlo-Simulation von π
Ein Punkt im Einheitsquadrat liegt mit Wahrscheinlichkeit π/4 im Viertelkreis. Wir nutzen einen einfachen, reproduzierbaren Zufallsgenerator (LCG), damit die Ausgabe immer gleich ist:
1;
function [z, s] = lcg(s)
s = mod(1103515245 * s + 12345, 2^31);
z = s / 2^31;
end
s = 42;
n = 20000;
innen = 0;
for k = 1:n
[x, s] = lcg(s);
[y, s] = lcg(s);
if x^2 + y^2 <= 1
innen = innen + 1;
end
end
schaetzung = 4 * innen / n;
fprintf('pi ~ %.3f (Abweichung %.3f)\n', schaetzung, abs(schaetzung - pi));
% Vektorisiert mit eingebautem Zufall: Ergebnis hängt vom Zufall ab, aber die Genauigkeit stimmt
p = 4 * mean(sum(rand(2, 100000).^2) <= 1);
fprintf('Vektorisiert plausibel: %d\n', abs(p - pi) < 0.05);Ausgabe:
pi ~ 3.150 (Abweichung 0.008)
Vektorisiert plausibel: 1Projekt 3: Das Spiel des Lebens
Conways Game of Life auf einem Gitter, rein mit Matrixoperationen:
1;
function G = schritt(G)
nachbarn = conv2(double(G), [1 1 1; 1 0 1; 1 1 1], 'same');
G = (G & (nachbarn == 2 | nachbarn == 3)) | (~G & nachbarn == 3);
end
G = false(6, 6);
G(2, 3) = true; G(3, 4) = true; G(4, 2:4) = true; % ein "Gleiter"
for t = 0:3
fprintf('Generation %d (lebende Zellen: %d)\n', t, sum(G(:)));
for i = 1:6
fprintf('%s\n', char(G(i, :) * ('#' - '.') + '.'));
end
G = schritt(G);
endAusgabe:
Generation 0 (lebende Zellen: 5)
......
..#...
...#..
.###..
......
......
Generation 1 (lebende Zellen: 5)
......
......
.#.#..
..##..
..#...
......
Generation 2 (lebende Zellen: 5)
......
......
...#..
.#.#..
..##..
......
Generation 3 (lebende Zellen: 5)
......
......
..#...
...##.
..##..
......Projekt 4: Signalverarbeitung
Ein verrauschtes Signal glätten und im Frequenzbereich analysieren:
fs = 100; % Abtastrate in Hz
t = (0:fs-1) / fs; % eine Sekunde
signal = sin(2*pi*5*t) + 0.5*sin(2*pi*20*t); % 5 Hz und 20 Hz
spektrum = abs(fft(signal)) / (fs/2);
[amp, idx] = sort(spektrum(1:fs/2), 'descend');
frequenzen = idx(1:2) - 1; % Index k entspricht k Hz bei 1 s Länge
fprintf('Dominante Frequenzen: %d Hz (%.2f) und %d Hz (%.2f)\n', frequenzen(1), amp(1), frequenzen(2), amp(2));
glatt = filter(ones(1, 5) / 5, 1, signal); % gleitender Mittelwert über 5 Werte
fprintf('Energie: Original %.2f, geglättet %.2f\n', sum(signal.^2), sum(glatt.^2));
fprintf('Geglättetes Signal ist kleiner: %d\n', max(abs(glatt(10:end))) < max(abs(signal)));Ausgabe:
Dominante Frequenzen: 5 Hz (1.00) und 20 Hz (0.50)
Energie: Original 62.50, geglättet 40.75
Geglättetes Signal ist kleiner: 1Projekt 5: Lineare Regression von Hand
x = [1 2 3 4 5 6]';
y = [2.2 4.1 6.2 7.8 10.1 12.1]';
X = [ones(size(x)), x]; % Entwurfsmatrix
beta = (X' * X) \ (X' * y); % Normalengleichung
beta2 = X \ y; % bequem und stabiler
fprintf('y = %.3f + %.3f x\n', beta(1), beta(2));
fprintf('Gleich wie backslash: %d\n', norm(beta - beta2) < 1e-10);
res = y - X * beta;
r2 = 1 - sum(res.^2) / sum((y - mean(y)).^2);
fprintf('R^2 = %.4f\n', r2);
fprintf('Prognose x = 10: %.2f\n', [1 10] * beta);Ausgabe:
y = 0.173 + 1.974 x
Gleich wie backslash: 1
R^2 = 0.9986
Prognose x = 10: 19.92Merke
- Mit Matrixoperationen (
conv2,fft,\,filter) werden komplexe Algorithmen kurz - Funktionen können Zustand zurückgeben (LCG) und so Reproduzierbarkeit schaffen
- Newton, Monte Carlo, Game of Life, FFT und Regression sind klassische Übungsprojekte
- Prüfe Ergebnisse gegen Referenzen (
sqrt,norm, exakte Lösungen)
Übungsaufgabe
Erweitere das Newton-Verfahren um eine Ausgabe jedes Zwischenschritts und finde die Nullstelle von x^3 - 2x - 5.
Quiz zur Selbstkontrolle
Wofür steht die Newton-Iteration?
- Näherungsverfahren zur Nullstellensuche (richtig)
- Sortieralgorithmus
- Matrixzerlegung
- Dateiformat
Wofür verwendet man fft?
- Zerlegung eines Signals in Frequenzen (richtig)
- Sortieren
- Zufallszahlen
- Textsuche
Warum nutzt man einen eigenen Zufallsgenerator mit festem Startwert?
- Damit die Ergebnisse reproduzierbar sind (richtig)
- Er ist schneller
- Er ist zufälliger
- Er braucht weniger Speicher
Weiter im Kurs
Zurück: Diagramme, Dateien und Skripte
Weiter: Referenz und Spickzettel
Alle Kapitel: MATLAB im Überblick