Prof. Dr. Stefan Funken Universität Ulm M.Sc. Andreas Bantle Institut für Numerische Mathematik Dipl.-Math. oec. Klaus Stolle Sommersemester 05 Numerische Analysis - Matlab-Blatt 5 Lösung (Besprechung in den Matlab-Tutorien in KW 5/6) Hinweise: Siehe Matlab-Blatt /. Aufgabe 8 (Newton-Cotes Formeln) (7+5 Punkte) Die klassische Newton-Cotes-Formel bei einer äquidistanten Knotenwahl a = x 0 x x... x n = b lautet ( n ) b Î n (f) = (b a) ω k f(x k ) f(x)dx. k= (i) Schreiben Sie eine Funktion I = newtoncotes(f,a,b,n,method) a die das Integral b f(x)dx mit Hilfe der summierten Mittelpunktsregel a b n xk n ( ) xk +x k f(x)dx = f(x)dx h k f (h k := x k x k ) x k a k= bzw. der summierten Trapezregel b a f(x)dx = n k= xk x k f(x)dx k= n k= h k f(x k )+f(x k ) numerisch berechnet. Als Eingabeparameter erhält die Funktion das function handle f die Intervallgrenzen a,b die Anzahl der Teilintervalle n (h k := x k x k ) einen String method, der angibt ob die summierte Mittelpunktsregel ( Mittelpunkt ) oder die summierte Trapezregel ( Trapez ) verwendet werden soll. Verwenden Sie zur Berechnung äquidistante Teilintervalle der Schrittweite h = (b a)/n. function I = newtoncotes(f,a,b,m,method) 3 %*** Schrittweite und Stuetzstellen berechnen 4 h = (b-a)/m; 5 t = linspace(a,b,m+); 6 7 if strcmp(method, Mittelpunkt ) 8 %*** Mittelpunkte berechnen 9 x = (t(:end-)+t(:end))/; 0 I = h*sum(f(x)); elseif strcmp(method, Trapez ) %*** Gewichtsfunktion definieren
3 w = ones(,m+); w() = 0.5; w(m+) = 0.5; 4 I = h*sum(w.*f(t)); 5 else 6 error( Methode zur Berechnung des Integrals wird nicht unterstuetzt. ) 7 end (ii) Schreiben Sie ein Testskript testnewtoncotes.m, welches die Integrale e x +x 3 + dx und +x4 0 0 +x dx numerisch berechnet. Plotten Sie jeweils den Fehler für n =,,..., 4 Teilintervalle zur exakten Lösung, welche Sie mit der Matlab-Funktion integral berechnen können. clear all; close all; clc; 3 %*** definiere ANzahl der Intervalle 4 m =.^(:4); 5 6 %*** Beispiel 7 f = @(x) exp(x) + x.^3+./(x.^4+); 8 a = -; b = ; 9 I_exact = integral(f,a,b); 0 %*** Beispiel 3 % f = @(x)./(+x.^); 4 % a = -0; b = 0; 5 % I_exact = integral(f,a,b); 6 7 %*** Initialisiere Variablen 8 errm = zeros(length(m),); 9 errt = zeros(length(m),); 0 for k=:length(m) 3 %*** Mittelpunktsformel 4 I_M = newtoncotes(f,a,b,m(k), Mittelpunkt ); 5 errm(k) = abs(i_m-i_exact); 6 7 %*** Trapezsummenformel 8 I_T = newtoncotes(f,a,b,m(k), Trapez ); 9 errt(k) = abs(i_t-i_exact); 30 end 3 3 %*** Fehler darstellen 33 figure 34 loglog(m,errm, *-,m,errt, r*- ) 35 legend( Mittelpunkt, Trapez ) 36 loglogtriangle(e,e4,e-,, l ) Aufgabe 9 (Adaptive Quadratur) In dieser Aufgabe betrachten wir Integrale der Form 0 x α dx, α (0,). (3+5+5+5 Punkte) Da der Integrand stetig, aber nicht stetig differenzierbar auf [0, ] ist, erhalten wir mit der summierten Mittelpunktsregel bzgl. äquidistanten Teilintervalle der Länge h nicht mehr die optimale Konvergenz O(h ). (i) Bestimmen Sie numerisch die Konvergenzrate des Fehlers für die summierte Mittelpunktsformel zu äquidistanten Intervallen für verschiedene Werte von α (0, ). Welche Vermutung für die Konvergenzrate können Sie daraus für allgemeines α (0,) ableiten? Konvergenzrate: O ( h +α)
0 Mittelpunkt Trapez 0 0 0 0 4 0 6 0 8 0 0 0 0 0 3 0 4 0 5 clc, clear all,close all 3 %*** definiere Intervallgrenzen 4 a = 0; b = ; 5 %*** definiere alpha 6 alpha = 0.5; 7 %*** definieren integrand und berechne exaktes Integral 8 f = @(x) x.^alpha; 9 Iex = /(alpha+)*(b^(alpha+)-a^(alpha+)); 0 n =.^(:3); 3 for k=:length(n) 4 5 t = linspace(a,b,n(k)+); 6 x = (t(:end-)+t(:end))/; 7 h = (b-a)/n(k); 8 IM(k) = h*sum(f(x)); 9 err(k) = abs(iex-im(k)); 0 end loglog(n,err, -r*,n,e-*n.^(-alpha-), -k ) Um die optimale Konvergenz des Fehlers O(h ) auch für Integranden zu erreichen, die keine C -Regularität besitzen, führen wir ein graduiertes Gitter für die Teilintervalle ein: x i = ( ) β i, i = 0,...,n, β > 0. n Bzgl. dieser graduierten Knoten x i approximieren wir das Integral dann durch eine modifizierteßummierte Mittelpunktsformel. (ii) Zunächst Untersuchen wir die Abhängigkeit des Quadraturfehlers von β. Schreiben Sie dazu eine Skript adapquad.m, welches zu α {/3, /, 7/8} und n = 04 den Quadraturfehler der summierten Mittelpunktsformel bzgl. der graduierten Knoten in Abhängigkeit von β [, 5] plottet. Zeichnen Sie dabei außerdem auch
0 0 0 3 0 4 0 5 0 6 0 7 0 8 0 0 0 0 0 3 0 4 das diskrete Minimum der Funktion ein. close all; clear all; clc; 3 %*** definiere alpha 4 alpha = [/3 / 7/8]; 5 6 %*** definiere Intervallgrenzen 7 a = 0; b = ; 8 n = 04; 9 0 for k=:length(alpha) %*** definieren integrand und berechne exaktes Integral f = @(x) x.^alpha(k); 3 Iex = /(alpha(k)+)*(b^(alpha(k)+)-a^(alpha(k)+)); 4 5 %*** berechne Integral fuer graduiertes Gitter 6 % setze beta 7 beta = linspace(,5,500); 8 9 for j = :length(beta) 0 % berechne St tzstellen t = linspace(a,b,n+).^beta(j); x = (t(:end-)+t(:end))/; 3 h = t(:end)-t(:end-); 4 IGrad = (b-a)*sum(h.*f(x)); 5 errgrad(j) = abs(igrad-iex); 6 7 end 8 9 %*** bestimme optimales beta 30 [errgradopt(k),ind] = min(abs(errgrad)); 3 3 %*** Plotte Ergebnisse 33 figure( k)
34 set(gca, FontSize,) 35 plot(beta,errgrad) 36 hold on; 37 plot(beta(ind),errgradopt(k), r* ); 38 xlabel( beta ) 39 ylabel( Error ) 40 title( { [ alpha =,numstr(alpha(k)),, n =,numstr(n), with betamin =, numstr(beta(ind))] } ) 4 4 end 6 x alpha = 0.33333, n = 04 with betamin =.45 0 6 5 4 Error 3 0.5.5 3 3.5 4 4.5 5 beta x 0 6 alpha = 0.5, n = 04 with betamin =.994.8.6.4. Error 0.8 0.6 0.4 0. 0.5.5 3 3.5 4 4.5 5 beta (iii) Um für jedes α ein optimales β zu finden, soll nun die Abhängigkeit β(α) bestimmt werden. Dabei wählt man folgenden Ansatz β opt (α) = 3 (+α) k mit k N.
8 x 0 8 alpha = 0.875, n = 04 with betamin =.60 7 6 Error 5 4 3.5.5 3 3.5 4 4.5 5 beta Schreiben Sie ein Skript getoptbeta.m,welchesfür n = 04und α [0.,0.99]jeweils das optimale β min (α) > 0 numerisch ermittelt. Plotten Sie β min (α) über + α in einer doppelt logarithmischer Skala. Bestimmen Sie außerdem den Wert von k N, für den die Schranke β opt (α) eine gute Näherung an β min (α) liefert. (x-achse: +α, y-achse: β min bzw. β opt ). close all; clear all; clc; 3 %*** definiere alpha 4 alpha = linspace(0.,0.99,5); 5 a = 0; b = ; 6 n = 04; 7 8 for k = :length(alpha) 9 %*** definiere Integrand 0 f = @(x) x.^alpha(k); beta = linspace(,5,00); 3 for j= :length(beta) 4 %*** werte Mittelpunktsformel aus 5 Iex = /(alpha(k)+)*(b^(alpha(k)+)-a^(alpha(k)+)); 6 t = linspace(a,b,n+).^beta(j); 7 x = (t(:end-)+t(:end))/; 8 h = t(:end)-t(:end-); 9 IGrad = (b-a)*sum(h.*f(x)); 0 %*** berechne Fehler errbeta(j) = abs(iex-igrad); end 3 [~,ind] = min(abs(errbeta)); 4 betamin(k) = beta(ind); 5 6 end 7 8 %% plot result 9 set(gca, FontSize,) 30 loglog(+alpha,betamin, *-,+alpha,3*(+alpha).^(-), *-,+alpha,3*(+alpha).^(-), *-,+alpha,3*(+alpha).^(-3), *- ) 3 xlabel( +\alpha ) 3 ylabel( \beta ) 33 legend( Numerisch, k = -, k = -, k = -3 )
Numerisch k = k = k = 3 β 0 0 0 0. 0 0. +α Für k= ergibt sich eine gute Näherung. (iv) Schreiben Sie ein Skript getconvrate.m, welches zu α = / den Quadraturfehler für die äquidistanten Teilintervalle und die graduierten Teilintervalle mit dem in (iii) gewonnenen Wert für β opt über n =,,..., 3 plottet. Verwenden Sie eine doppelt logarithmische Skala. Welche Konvergenzraten ergeben sich? clear all; close all; 3 4 a = 0; b = ; 5 alpha = /; 6 f = @(x) x.^alpha; 7 beta = 3/(+alpha); 8 9 %*** berechne exaktes Integral 0 Iex = /(alpha+)*(b^(alpha+)-a^(alpha+)); n =.^(:3); 3 4 for k=:length(n) 5 %**** summierte MPR 6 t = linspace(a,b,n(k)+); 7 x = (t(:end-)+t(:end))/; 8 h = (b-a)/n(k); 9 IM(k) = h*sum(f(x)); 0 %*** graduiertes Gitter t = t.^beta; 3 x = (t(:end-)+t(:end))/; 4 h = t(:end)-t(:end-); 5 IGrad(k) = (b-a)*sum(h.*f(x)); 6 7 %*** Fehler berechnen 8 errm(k) = abs(iex-im(k)); 9 errgrad(k) = abs(iex-igrad(k)); 30 end 3 3 figure 33 set(gca, FontSize,) 34 loglog(n,errm, *-,n,errgrad, +-,n,e-*n.^(--alpha), -k,n,e-*n.^(-), -k ) 35 ylabel( Quadraturfehler )
36 xlabel( n ) 37 legend( Aequidistant, Graduiert, Rate N^{.5}, Rate N^ ) 38 title( Konvergenz Raten ) 0 0 0 Konvergenz Raten Aequidistant Graduiert Rate N.5 Rate N Quadraturfehler 0 4 0 6 0 8 0 0 0 0 0 0 0 3 0 4 n Mit dem äquidistanten Gitter erhält man näherungsweise eine Konvergenzrate von.5, mit dem graduierten Gitter erhält man in etwa quadratische Konvergenz. Mehr Informationen zur Vorlesung und den Übungen finden Sie auf http://www.uni-ulm.de/mawi/mawi-numerik/lehre/sose5/numana0.html