LABORÜBUNG MATLAB/OCTAVE 1. Riemannsche Summen mit MATLAB/Octave Riemannsche Summen lassen sich sehr einfach mit MATLAB/Octave berechnen. Das Vorgehen ist das folgende: (i) die Breite x der Teilintervallen denieren und in die Variable dx speichern; (ii) die Liste der Punkte ξ i in einem Vektor xi speichern; (iii) die Funktion f denieren; (iv) die Summe mit Hilfe der MATLAB/Octave-Funktion sum berechnen. Beispiel. Man betrachtet die Funktion f(x) = x 2 auf dem Intervall [, 1]. Der untenstehende MATLAB/Octave Code berechnet eine Riemannsche Summe 2. Ordnung. Dabei ist ξ i jeweils der Mittelpunkt des entsprechenden Teilintervalls: clear all ; clf (); %%% Function and interpolation points : n = 2; % number of intervals a = ; b = 1; % boundary points dx = (b - a )/ n ; % interval width xi = ( a + dx /2): dx :( b - dx /2); % vector of xi points f = @ ( x ) x.^2; % function definition %%% Riemann sum : s = (b - a )/ n * sum ( f ( xi )) %%% Graphics : bar ( xi, f ( xi ),1) % rectangles hold on x = linspace (a,b,1 e3 ); plot (x, f ( x ), 'k - ') % graph of the function Übung 1 Benutzen Sie den MATLAB/Octave Code vom obigen Beispiel um die Konvergenz der Riemannsche Summen für die Funktion f(x) = x 2 auf dem Intervall [, 1] gegen den exakten Wert (1/3) zu studieren. Übung 2 Modizieren Sie den MATLAB/Octave Code vom obigen Beispiel, damit er eine Riemannsche Summe der Ordnung 1 für die Funktion f(x) = e x sin x auf dem Intervall [, 2π] berechnet und darstellt. 2. Numerische Integration 2.1. Problemstellung. Numerische Integrationstechniken erlauben es, bestimmte Integrale zu berechnen, insbesondere wenn die Stammfunktion der zu integrierenden Funktion keine elementare Funktion mehr ist, 1
die zu integrierende Funktion nicht durch eine Formel gegeben ist, sondern durch eine Wertetabelle (beispielsweise gemessene Werte eines Experimentes). Ein bestimmtes Integral I = b a f(x)dx ist als die orientierte Fläche, begrenzt durch den Graphen der Funktion, die x Achse und die Geraden x = a bzw. x = b zu interpretieren. Alle numerischen Integrationstechniken beruhen auf Näherungen der Funktion f. Um solche Näherungen zu erhalten, zerlegen wir das Integrationsintervall in n Teilintervalle [x k 1, x k ), k 1,... n, der Länge h = (b a)/n. 2.2. Trapezformel. Wir bezeichnen mit y k = f(x k ) den Funktionswert im Punkt x k. Die Funktion wird auf jedem Teilintervall [x k 1, x k ) durch die interpolierende Gerade durch die Punkte x k, y k und x k+1, y k+1 ersetzt. Auf dem Intervall Nummer k wird also die Fläche unter der Kurve y = f(x) durch (y k 1 + y k )/2 h angenähert. Insgesamt gilt also die Trapezformel I t = h 2 n+1 (y k 1 + y k ) = h 2 (y + y n ) + h k=1 n y k. (1) Im Matlab und Octave ist die Trapezformel im m-le trapz implementiert. Beispiel. Wir verwenden hier die Trapezformel mit n = 1, um das Integral der Funktion f(x) = x 2 zwischen und 1 zu berechnen: octave :1 > x = linspace (,1,11); octave :2 > y = x.^2; octave :3 > trapz (x, y ) ans =. 335 Der exakte Wert ist in diesem Fall bekannt und beträgt 1/3. Für den Fehler gilt also I I t = 1/3.335 =.16667. 2.3. Bestimmen von Stammfunktionen. Die kumulative Trapezformel verwendet die Trapezformel (1) um Näherungswerte für Integrale F k = xk a f(x)dx für k =,..., n zu liefern. Der Vektor (F, F 1,..., F n ) gibt die Näherungswerte auf den Stützpunkten x, x 1,..., x n für die Stammfunktion F (t) = t a f(x)dx. Im Matlab/Octave ist die kumulative Trapezformel im Befehl cumtrapz implementiert. Beispiel. Die Stammfunktion F (t) = t f(x) dx für die Funktion (x x2 ) wurde numerisch mit cumtrapz bestimmt (Kreise). Die durchgezogene Linie ist der Graph von f. Die hier bekannte exakte Lösung ist durch die gestrichelte Linie dargestellt. 2 k=1
Man betrachtet das folgende Integral: I = Übung 3 2 x(2 x) dx (a) Berechnen Sie einen Näherungswert I t mit der Trapezformel und n = 1. (c) Prüfen Sie dieses Resultat indem Sie den exakten Wert von I und die Dierenz I I t berechnen. Übung 4 Wie vorhergehende Übung aber für das Integral I = 2 Man betrachtet die folgende Funktion: F (t) = t x 2 (2 x) 2 dx Übung 5 e x2 dx, t [, 1]. (a) Berechnen Sie n = 1 Näherungswerte für F mit Hilfe der kumulative Trapezformel. (b) Zeichnen Sie den Graphen von F (t) sowie von f(t) = e t2. (a) MATLAB/Octave-Code: Lösung zu Übung 5 f = @ ( x ) exp ( - x.^2) x = linspace (,1,1 e2 ); y = f ( x ); Y = cumtrapz (x, y ); plot (x,y, 'b - - ') hold on plot (x,y, 'b - ') legend ( ' f ( t ) ', ' F ( t ) ') xlabel ( 't ') 3
(b) Graphen von F (t) und von f(t) = e t2 : Übung 6 Gegeben ist die folgende stückweise denierte Funktion:.5 x 2 1, x 2 f(x) = 5 2 x, 2 < x 3 1, 3 < x (a) Berechnen Sie n = 1 Näherungswerte für die Stammfunktion F (x) = x mit Hilfe der kumulative Trapezformel. (b) Zeichnen Sie den Graphen von f(x) sowie von F (x). Lösung zu Übung 6 Graphen von f(x) sowie von F (x): f(u) du 4
Übung 7 Um den Herz-Durchsatz F zu schätzen (Anzahl Liter Blut pro Minute, welche das Herz durch die Aorta pumpt), wird eine Menge Q = 18 mg eines Kontrastmittels in die Lungenarterien injiziert. Dann wird nach jeder Minute die Konzentration des Kontrastmittels c(t) in einer Arterie in der Nähe der Aorta gemessen. Die Messergebnisse sind in der folgenden Tabelle angegeben: t (min) 1 2 3 4 5 6 7 8 9 1 11 12 c(t) (mg/l).15.48.86.72.48.26.15.9.5.1 (a) Bestimmen Sie den Herzdurchsatz F mittels numerischer Integration. (b) Berechnen Sie die Menge Kontrastmittel Q(t) in Abhängigkeit von der Zeit und stellen Sie die Kurve grasch dar. Lösung zu Übung 7 (a) Die Menge Kontrastmittel pro Minute ist gegeben durch F c(t). Zwischen den Grössen Q, c(t) und F gilt die folgende Beziehung: Q = T T F c(t) dt = F c(t) dt, da F konstant angenommen wird. Der Herzdurchsatz F ergibt sich also durch F = T Q c(t) dt wobei das Integral numerisch zu bestimmen ist. Wir erhalten hier F = 5.54 Liter pro Minute. (b) Es gilt Q(t) = t F c(s) ds Graph der Menge Kontrastmittel Q in Abhängigkeit von der Zeit t: 5
3. Graphische Darstellung von Funktionen mit mehreren Variablen mit MATLAB/Octave 3.1. Graphen. Sei f(x, y) eine Funktion zweier Variablen, die auf einem Gebiet D = [a, b] [c, d] deniert ist. Um sie grasch darstellen zu können, muss der Wert z j,k = f(x j, y k ) dieser Funktion auf jedem Punkt eines Gitters (x j, y k ) (mit j = 1,... n und k = 1,... m) des Gebiets berechnet werden. Dies erfolgt mit MATLAB/Octave in drei Schritten: (i) Das Gitter wird mit dem Befehl meshgrid erzeugt. Dafür müssen zuerst zwei numerische Vektoren x und y deniert werden. Der Vektor x (bzw. y) enthält die Aufteilung des Intervalls [a, b] (bzw. [c, d]) in n (bzw. m) Punkte. Der Befehl (X,Y) = meshgrid(x,y) gibt dann zwei m n Matrizen wieder, die die Koordinaten x bzw. y der Knoten enthalten. Zum Beispiel enthält der Koezient (1, 3) der Matrix X die x Koordinate des Knoten (x 1, y 3 ). (ii) Die Werte der Funktion werden in jedem Punkt berechnet: Z = f(x, Y ). Das Resultat ist eine m n Matrix, deren Eintrag Z j,k den Wert der Funktion im Punkt (x j, y k ) enthält. (iii) Mit dem Befehl mesh(x,y,z) erhält man dann den Graph der Funktion. Beispiel. Die folgende Befehl erlauben es, den Graphen der Funktion x 2 + y 2 auf dem Gebiet [ 1, 1] [ 1, 1] zu zeichnen: octave :1 > x = -1:.1:1; y = -1:.1:1; octave :2 > [X, Y ] = meshgrid (x, y ); octave :3 > Z = X.^2 + Y.^2; octave :4 > mesh (X,Y, Z ) octave :5 > 3.2. Niveaulinien. Auf dem selben Gitter kann man auch die Niveaulinien mit dem Befehl contour(x,y,z) darstellen. Weiter kann der Graph zusammen mit den Niveaulinien mit dem Befehl surfc(x,y,z) gezeichnet werden. Dies erlaubt es, den Zusammenhang zwischen den Niveaulinien und dem Graph einer Funktion deutlich zu machen. Für f(x, y) = x 2 + y 2 ist das Resultat das folgende: 3.3. Vektorfeld. Ein Vektorfeld deniert in jedem Punkt eines Bereiches der Ebene einen Vektor. Um ein solches Objekt darzustellen, müssen also die Komponenten des Vektors v(x, y) im Punkt (x, y) eingegeben werden. Dies erfolgt mit dem Befehl quiver, zum Beispiel, 6
octave :18 > quiver (X, Y, 2* X, 2* Y ) zeichnet das Vektorfeld v = ( 2x 2y) auf einem durch den Befehl meshgrid erzeugten Gitter von Punkten im Gebiet [ 1, 1] [ 1, 1] der Ebene. Dieses Vektorfeld ist der Gradient der Funktion f(x, y) = x 2 + y 2. Übung 8 Denieren Sie für das Gebiet [ 1, 1] [, 1] ein Gitter von 1 5 Punkten P ij (x i, y j ) mit den folgenden Befehlen: octave :1 > x = linspace ( -1,1,1); octave :2 > y = linspace (,1,5); octave :3 > [X, Y ] = meshgrid (x, y ); (i) Welche Dimension haben die Matrizen X und Y? (ii) Wie lassen sich die Zeilen von X bzw. die Spalten von Y interpretieren? (iii) Geben Sie die Koordinaten des Punktes P 32 (x 3, y 2 ) an. (iv) Die Funktion f(x, y) = x 2 + 3xy + y 3 wird auf diesem Gitter ausgewertet: octave :4 > Z = X.^2+3* X.* Y + Y.^3; Berechnen Sie den Wert von f im Punkt P 32 (x 3, y 2 ). (i) X und Y sind 5 1 Matrizen: octave :5 > size ( X ) ans = Lösung zu Übung 8 5 1 (ii) Die Zeilen von X bzw. die Spalten von Y enthalten die x Koordinaten der Gitterpunkte bzw. die y Koordinaten der Gitterpunkte. (iii) Koordinaten: P 32 (.55556,.25) octave :6 > X (1,3) ans = -. 55556 octave :7 > Y (2,1) ans =. 25 (iv) Wert von f im Punkt P 32 (x 3, y 2 ): octave :8 > Z (3,2) ans = -. 43673 Übung 9 Zeichnen Sie den Graphen sowie die Niveaulinien der folgende Funktionen: (i) f(x, y) = e (x2 +y 2) sin x, mit (x, y) [ 5, 5] 2 (ii) f(x, y) = sin(2πx) sin(2πy), mit (x, y) [, 2] 2 (iii) f(x, y) = 1 x 2 y 2, mit (x, y) [ 1, 1] 2 Übung 1 Das Ziel dieser Aufgabe ist es, eine Kugel im Raum mit Mittelpunkt im Ursprung und Radius 1 zu zeichnen. 7
(i) Geben Sie die Kugelgleichung an und bestimmen Sie daraus die Funktionen deren Graph zu zeichen sind. (ii) Erzeugen Sie in MATLAB/Octave ein Gitter auf dem Gebiet [ 1, 1] 2 mit 1 1 Punkten. (iii) Berechnen Sie die Funktionswerte. Da die Funktionen nicht auf allen Gitterpunkten deniert werden können, müssen NaN's eingesetzt werden für alle Punkte wo die Funktionen nicht deniert sind. (iv) Zeichnen Sie die Kugel mit dem Befehl mesh. Lösung zu Übung 1 Die Kugelgleichung ist x 2 + y 2 + z 2 = 1. Daraus erhalten wir die zwei folgende Funktionen: f 1 (x, y) = 1 x 2 y 2 und f 2 (x, y) = 1 x 2 y 2 Das folgende Programm löst die Aufgabe: n = 1 e3 ; % Anzahl Punkte x = linspace ( -1,1, n ); y = linspace ( -1,1, n ); [X, Y ] = meshgrid (x, y ); U = 1 - X.^2 - Y.^2; % Wurzelausdruck U (U <)= NaN ; % negative Werte im Wurzelausdruck % durch NaN ersetzen Z1 = sqrt ( U ); % " positive " halbe Kugel Z2 = - sqrt ( U ); % " negative " halbe Kugel mesh (X,Y, Z1 ); hold on mesh (X,Y, Z2 ); Übung 11 Benutzen Sie den Befehl surfc, um die Niveaulinien zusammen mit dem Graphen der Funktion f(x, y) = xy e 2(x2 +y 2 ) in einer einzigen Figur zu zeichnen. Übung 12 Eine elektrische Punktladung q 1 = 1 bendet sich im Punkt mit Ortsvektor x 1 = (,, ), eine andere Punktladung q 2 = 2 im Punkt mit Ortsvektor x 2 = (1,, ). Diese Ladungen erzeugen im Punkt mit Ortsvektor x ein elektrisches Feld gegeben durch ( x x1 E ( x ) = 1 4πɛ q 1 x x x x 1 3 + q 2 2 x x 2 3 Für das elektrische Potential im Punkt mit Ortsvektor x gilt U( x ) = 1 ( ) q 1 4πɛ x x 1 + q 2 x. x 2 (ε ist die elektrische Feldkonstante) Benutzen Sie MATLAB/Octave um : : das elektrische Feld : die equipotentiale Linien in der xy Ebene grasch darzustellen. 8 ).
Übung 13 (Elektrisches Feld eines homogen geladenen Zylinders) Das elektrische Feld im Innen- und Aussenraum eines homogen geladenen Zylinders besitzt eine Rotationssymmetrie um die Zylinderachse. Falls die Zylinderachse mit der z Achse übereinstimmt, ist das Feld gegeben durch ρ r e r, r R 2πε E (x, y, z) = ρ R 2 e r, r > R 2πε r wobei e r den Einheitsvektor in radialer Richtung bezeichnet: 1 e r = x y. x 2 + y 2 Die physikalische Konstante ρ und ɛ sowie der Radius R können in dieser Aufgabe alle auf Eins gesetzt werden. (i) Zeichnen Sie mit MATLAB/Octave das Vektorfeld E in der x y Ebene. (ii) Die Intensität E des elektrischen Felds ist eine skalare Funktion von den Variablen x und y. Man zeichne die Niveaulinien dieser Funktion. Lösung zu Übung 13 Die Figur unten links zeigt das gesuchte Vektorfeld im Querschnitt. Wegen der Symmetrie des Problems ist die Stärke des Felds nur von dem Abstand zur Zylinderachse abhängig. Die Intensität ist unten rechts als Niveaulinien dargestellt : 9