Numerische Kurvendiskussion mit MATLAB Robert Schwann MATLAB-Day 1.7.2008 Lehrstuhl für Allgemeine Elektrotechnik und Datenverarbeitungssysteme RWTH Aachen Übersicht 2 Darstellung einer Funktion und ihrer Ableitungen Einfache Suche der Nullstellen und Extrema Berechnung von Zwischenwerten (Interpolation) Darstellung von Kurvenscharen Darstellung einer Funktion und ihrer Ableitungen Beispiel aus der Signalverarbeitung: f ( x) = sin x x Darstellung in MATLAB: x = -15 : 0.1 : 15; y = sin(x)./x; figure plot(x,y,'r') 3 Die Funktion hat bei (x=0,y=1) eine stetig behebbare Definitionslücke Darstellung einer Funktion und ihrer Ableitungen 4 Darstellung einer Funktion und ihrer Ableitungen f ( x) = sin x x Analytische Berechnung der ersten und zweiten Ableitung: f ′( x ) = x ⋅ cos x − sin x x2 ys=(x.*cos(x)-sin(x))./x.^2; − x 2 ⋅ sin x − 2 x ⋅ cos x + 2 sin x f ′′( x ) = x3 yss=(-x.^2.*sin(x)-2*x.*cos(x)+2*sin(x))./x.^3; 5 Darstellung einer Funktion und ihrer Ableitungen Numerische Berechnung der ersten und zweiten Ableitung: xd = ( x(1:end-1) + x(2:end) )/2; yd = diff(y)./diff(x); hold on plot(xd,yd,'b') xdd = ( xd(1:end-1) + xd(2:end) )/2; ydd = diff(yd)./diff(xd); plot(xdd,ydd,'g') 6 Darstellung einer Funktion und ihrer Ableitungen 7 Darstellung einer Funktion und ihrer Ableitungen Kontrolle: absoluter Fehler der zweiten Ableitung plot(xdd,ydd-yss(2:end-1),'k--') 8 Darstellung einer Funktion und ihrer Ableitungen 9 Übersicht 10 Darstellung einer Funktion und ihrer Ableitungen Einfache Suche der Nullstellen und Extrema Berechnung von Zwischenwerten (Interpolation) Darstellung von Kurvenscharen Einfache Suche der Nullstellen und Extrema Prüfung benachbarter Wertepaare: Vorzeichenvergleich y2 Geradensteigung m x1 x0 x2 y1 11 ! Bestimmungsgleichung ( x0 − x1 ) ⋅ m + y1 = 0 Einfache Suche der Nullstellen und Extrema Funktion zur Prüfung aller benachbarten Wertepaare: function z = Nullstellen(x,y) z = []; % Liste der Nullstellen s = sign(y); for n = 2 : length(s) if s(n-1) * s(n) < 1 dx = x(n) - x(n-1); dy = y(n) - y(n-1); if dy == 0 z = [z x(n-1) x(n)]; else x0 = x(n-1) - y(n-1) * dx / dy; z = [z x0]; end end end 12 Einfache Suche der Nullstellen und Extrema Liste der Nullstellen im betrachteten Intervall: xn = Nullstellen(x,y); plot(xn,0*xn,'ko') Liste der lokalen Extrema: xe = Nullstellen(xd,yd); plot(xe,sin(xe)./xe,'kx') 13 Einfache Suche der Nullstellen und Extrema 14 Übersicht 15 Darstellung einer Funktion und ihrer Ableitungen Einfache Suche der Nullstellen und Extrema Berechnung von Zwischenwerten (Interpolation) Darstellung von Kurvenscharen Interpolation Bisher: Verbindung der Stützstellen einer Funktion durch gerade Linien Genauer: Verwendung von Funktionen höherer Ordnung Anschauliches Beispiel: Verbindung der Stützstellen durch gekrümmte Teilstücke, sogenannte „Splines“ Das sind abschnittsweise definierte, ganzrationale Polynome der Form s( x ) = a ⋅ x 3 + b ⋅ x 2 + c ⋅ x + d 16 Interpolation Darstellung einer „glatten“ Funktion anhand weniger Stützstellen: xw = -15 : 2 : 15; yw = sin(xw)./xw; figure plot(xw,yw,'ko--') 17 Interpolation 18 Interpolation Originalfunktion: x = -15 : 0.1 : 15; y = sin(x)./x; figure plot(x,y,'r') Rekonstruktion: yi = spline(xw,yw,x); plot(x,yi,'b') 19 Interpolation 20 Interpolation absoluter Fehler: plot(x,yi-y,'k--') 21 Interpolation 22 Übersicht 23 Darstellung einer Funktion und ihrer Ableitungen Einfache Suche der Nullstellen und Extrema Berechnung von Zwischenwerten (Interpolation) Darstellung von Kurvenscharen Darstellung von Kurvenscharen Beispiel: ganzrationale Funktion mit einem Scharparameter f a ( x ) = x 2 ⋅ ( x − a ) ⋅ ( x − 2) Die Produktdarstellung zeigt eine doppelte Nullstelle bei x=0 und einfache Nullstellen bei x=a und x=2. x = -2 : 0.01 : 3; c = 'rgbcm'; % Linienfarbe figure for a = -1 : 3 y = x.^2 .* (x-a) .* (x-2); plot(x,y,c(a+2)) hold on end 24 Darstellung von Kurvenscharen 25 Darstellung von Kurvenscharen 26 a=0: Sattelpunkt bei x=0 (grüne Kurve) a=2: doppelte Nullstelle bei x=2 (Berührung der x-Achse) Darstellung von Kurvenscharen 27