Sie sind auf Seite 1von 7

Numerik gewöhnlicher

Differentialgleichungen
MA2304 - SS16

Übungsblatt 4 – Musterlösung

Aufgabe 17 (Nullstellen als Eigenwerte)


Die Polynome {Sn }n=0,1,2,... , Sn ∈ Pn , mit führendem Koeffizienten eins, heißen Orthogo-
nalpolynome bzgl. des Skalarproduktes h·, ·i mit
Zb
hf, gi := ω(x)f (x)g(x) dx,
a

wobei [a, b], a < b, ein Intervall in R darstellt und ω(x) eine auf (a, b) positive Gewichts-
funktion ist, falls
hSn , Sm i = δnm hSn , Sn i = δnm kSn k2 .

a) Die Knoten {xi }i=0,1,...,n , welche gerade die Nullstellen zum Orthogonalpolynom Sn
sind, und die Gewichte ωi der Gauss-Quadratur Qn lassen sich in der Regel nicht
analytisch berechnen. Man kann sie numerisch (mit dem Golub-Welsch Algorithmus)
erhalten, wie die folgende Aussage zeigt.

Seien {Sn }n=0,1,2,... Orthogonalpolynome und es gelte die Drei-Term-Rekursion

S−1 (x) = 0, S0 (x) = 1, Sn (x) = (x − an )Sn−1 (x) − b2n Sn−2 (x), n > 1,

wobei bn > 0 gesetzt wird. Zeigen Sie, dass die Nullstellen von Sn gerade die Eigen-
werte der Tridiagonalmatrix
 
a1 b 2
.
 b 2 a2 . .
 

Jn = 

 . .
.. .. .. . 



 . .
. . . . bn 

b n an

sind.

b) Die aus der Vorlesung bekannten Legendre-Polynome Pn erfüllen die oben gegebene
Definition mit ω(x) ≡ 1. Stellen Sie die Matrix Jn für die Legendre-Polynome auf
und zeigen Sie, dass die Gewichte der Gauss-Quadraturformel durch
n
!−1
X
ωi = 2 Pj2 (xi )
j=0

gegeben sind.

1
Lösung 17 (Nullstellen als Eigenwerte)

a) Zu der Matrix Jn betrachten wir die Untermatrizen


 
a1 b 2
 ... 
 b 2 a2 
Jk = 
 ... ... ... 
, 1 6 k 6 n.
 
 ... 
 ak−1 bk 
bk ak

Die Eigenwerte der Matrix Jk sind gegeben als die Nullstellen des charakteristischen
Polynoms χk (x) := det(Jk − xI). Dazu definiren wir formal:

χ−1 (x) = 0, χ0 (x) = 1.

Es gelten

χ1 (x) = det(a1 − x) = a1 − x = (a1 − x)χ0 (x),


 
a1 − x b2
χ2 (x) = det = (a1 − x)(a2 − x) − b22 = (a2 − x)χ1 (x) − b22 χ0 (x).
b2 a2 − x

Induktiv erhalten wir durch Entwicklung nach der k-ten Spalte

χk (x) = det(Jk − xI) = (ak − x) det(Jk−1 ) − b2k det(Jk−2 )


= (ak − x)χk−1 (x) − b2k χk−2 (x).

Für die Polynome S−1 = χ−1 , S0 = χ0 und Sk (x) = (−1)k χk (x), für k = 1, ..., n gilt
nun die Rekursion

S−1 (x) = 0, S0 (x) = 1, Sk (x) = (x − ak )Sk−1 (x) − b2k Sk−2 (x), k > 1,

wie leicht nachzurechnen ist. Da die Nullstellen von Sk und χk identisch sind, stellen
die Eigenwerte von Jn gerade die Nullstellen von Sn dar.

b) Die Legendre-Polynome Pn genügen der Drei-Term-Rekursion


2n + 1 n
P0 (x) = 1 , P1 (x) = x , Pn+1 (x) = xPn (x) − Pn−1 (x).
n+1 n+1
Um daraus Orthogonalpolynome mit führendem Koeffizienten 1 zu konstruieren,
wählt man die Transformation

P̃n (x) = αn Pn (x).

Ziel ist es nun, eine Rekursionsformel für die Konstanten αn herzuleiten. Da für
n = 0 und n = 1 die Legendre-Polynome bereits führenden Koeffizienten 1 haben,
setzen wir
α0 = α1 = 1.

2
Anwenden der Rekursionsformel liefert
 
2n + 1 n
P̃n+1 (x) = αn+1 Pn+1 = αn+1 xPn (x) − Pn−1 (x)
n+1 n+1
αn+1 2n + 1 αn+1 n
= xP̃n (x) − P̃n−1 (x).
αn n + 1 αn−1 n + 1
Die Forderung nach führendem Koeffizienten 1 führt auf die Bedingung
αn+1 2n + 1 ! αn+1 n+1 n+1
= 1 ⇐⇒ = ⇐⇒ αn+1 = αn . (1)
αn n + 1 αn 2n + 1 2n + 1

Damit erhalten wir – wie gewünscht – eine Drei-Term-Rekursion für P̃n :


n+1
αn+1 n (2) α
2n+1 n n
P̃n+1 (x) = xP̃n (x) − P̃n−1 (x) = xP̃n (x) − P̃n−1 (x)
αn−1 n + 1 αn−1 n + 1
αn n (2) n n
= xP̃n (x) − P̃n−1 (x) = xP̃n (x) − P̃n−1 (x)
αn−1 2n + 1 2n − 1 2n + 1
 2
n
= (x)P̃n (x) − √ P̃n−1 (x) = (x − an+1 )P̃n (x) − b2n+1 P̃n−1 (x),
2
4n − 1
n−1
wobei an := 0 und bn := √ .
4(n−1)2 −1

Die gesuchte Matrix Jn ist schließlich von der Form


 √ 
0√ 1/ 3 √
1/ 3 0 2/ 15 

 √ ...


Jn =  2/ 15 0 .

 . .. . 
. . bn 
bn 0

Jetzt bestimmen wir die Formel für die Gewichte ωi . Die (Referenz-) Gauß Quadra-
tur Q1−1 integriert die Polynomen Pk , k 6 n + 1 exakt, d.h.
n Z 1 (
X 2 k = 0,
ωi Pk (xi ) = Pk (x)dx = (1, Pk ) = (P0 , Pk ) =
i=0 −1 0 1 6 k 6 n + 1.

Damit folgt
    
P0 P0 ... P0 ω0 2
 P1 (x0 ) P1 (x1 ) ... P1 (xn )   ω1  0
    
 .. .. ..   ..  =  .. ,
 . . .   .  .
Pn (x0 ) Pn (x1 ) ... Pn (xn ) ωn 0
| {z } | {z } | {z }
=:P =(π0 ,π1 ,...,πn ) =:w =2e1

wobei πi := (P0 , P1 (xi ), ..., Pn (xi ))⊤ . Die Vektoren πi sind Eigenvektoren zu Jn , d.h.
Jn πi = xi πi , und stehen paarweise senkrecht aufeinander:

xi πi⊤ πk = xi πk⊤ πi = πk⊤ Jn πi = (πk⊤ Jn⊤ πi )⊤ = πi⊤ Jn πk = xk πi⊤ πk ,

3
wobei wir die Symmetrie von Jn verwendet haben. Damit gilt πi⊤ πk = 0 für k 6= i,
da Jn einfache Eigenwerte hat (Pn haben einfache Nullstellen). Insgesamt folgt, dass
n
X n
X n
X ⊤
2 = πi⊤ 2e1 = πi⊤ P w = πi⊤ ωj P0 , ωj P1 (xj ), ..., ωj Pn (xj )
j=0 j=0 j=0
n
X n
X
= πi⊤ ωj πj = ωi πi⊤ πi = ωi Pj2 (xk ).
j=0 j=0

Aufgabe 18 (Adaptive Quadratur)


Rb
Das Integral I = a f (x)dx soll mit einer adaptiven rekursiven Simpsonregel näherungs-
weise berechnet werden.

a) Für a = 0 und b = h bezeichne Sh den Näherungswert der Simpsonregel (bzw. Sh/2


den der summierten Simpsonregel zur Schrittweite h/2). Wie bereits bekannt, gilt

I = Sh + ch5 + O(h6 ).

Zeigen Sie, dass durch die Extrapolation

Sh,h/2 = (16Sh/2 − Sh )/15

das Verfahren eine Ordnung gewinnt, also

I = Sh,h/2 + O(h6 ).

b) Implementieren Sie die Funktion


function I = quadstep(a, b, f1, f3, f5, f, TOL)
Übergeben Sie zusätzlich die Funktion f als anonyme Funktion und die gewünschte
Toleranz TOL. Achten Sie darauf, dass pro Aufruf von quadstep die Funktion f nur
zweimal neu ausgewertet wird. Initialisieren Sie vor dem ersten Aufruf eine globale
Variable als einen Zähler für die Funktionsauswertungen
global count; count = 3;
Zählen Sie diesen innerhalb der Funktion quadstep um jede Funktionsauswertung
von f nach oben.
R1√
Berechnen Sie das Integral I = 0 xdx für die Toleranzen TOL = 10−4 , 10−6 , 10−8 ,
und geben Sie jeweils den Fehler und die Anzahl der benötigten Funktionsauswer-
tungen an.

c) Implementieren Sie zum Vergleich die zusammengesetzte Simpsonformel für äquidi-


stante Stützstellen. Stellen Sie fest, wie viele Funktionsauswertungen Sie benötigen,
um einen Fehler in der gleichen Größenordnung wie in Teilaufgabe a) zu realisieren.

Lösung 18 (Adaptive Quadratur)

4
a) Da
 5
5 6 h
I = Sh + ch + O(h ) und I = Sh/2 + 2c + O(h6 ),
2
 Sh/2 − Sh
⇒ Sh − Sh/2 + ch5 1 − 2−4 + O(h6 ) = 0 ⇔ ch5 = + O(h6 ).
1 − 2−4
Somit folgt schließlich
Sh/2 − Sh 15Sh + 16Sh/2 − 16Sh
I = Sh + −4
+ O(h6 ) = + O(h6 )
1−2 15
16Sh/2 − Sh
= + O(h6 ).
15

b) Ein möglicher Vorschlag für die quadstep Funktion lautet:

function I = quadstep(a, b, f1, f3, f5, f, TOL)


global count;
count = count + 2;
h = b - a;
m = (a + b)/2;
I1 = 1/6*h*(f1 + 4*f3 + f5);
f2 = feval(f, a + 0.25*h);
f4 = feval(f, b - 0.25*h);
I2 = 1/6*h/2*(f1 + 4*f2 + 2*f3 + 4*f4 + f5);
I = (16*I2 - I1)/15;
if (abs(I - I2) < TOL)
return;
else
I = quadstep(a, m, f1, f2, f3, f, TOL/2)...
+ quadstep(m, b, f3, f4, f5, f, TOL/2);
end
end

und für das summierte Simpson Verfahren:

function I = simpson(a, b, f, n)
global count;
h = 0.5*(b - a)/n;
x = linspace(a, b, 2*n+1);
fx = feval(f, x);
I = h/3*(fx(1) + 4*sum(fx(2:2:2*n))...
+ 2*sum(fx(3:2:2*n-1)) + fx(2*n+1));
count = count + 1 + n + (n-1) + 1;
end

Wir rufen beide Funktionen nach der Initialisierung mit folgendem Skript auf:

5
f = @(x) sqrt(x);
f1 = feval(f, 0);
f3 = feval(f, 0.5);
f5 = feval(f, 1);
global count;

for TOL = [1e-4 1e-6 1e-8]


count = 3;
I = quadstep(0, 1, f1, f3, f5, f, TOL);
abs(2/3 - I)
count
end

for n = [500 12500 1e6]


count = 0;
I = simpson(0, 1, f, n);
abs(2/3 - I)
count
end

Die Ergebnisse sind dann:

Simpson adaptiv Simpson summiert


TOL count Fehler count Fehler
1e–04 37 2.6946e–06 1001 2.5673e–06
1e–06 105 1.9536e–08 25001 2.0538e–08
1e–08 317 2.5514e–11 2000001 2.8704e–11

Aufgabe 19 (Numerische Integration: Matlab)


Betrachten Sie das Integral Z 1
1
I= dx.
0 1+x

a) Bestimmen Sie in Matlab

(a) die zugehörige Stammfunktion,


(b) den exakten Wert von I auf dem gegebenen Intervall,
(c) näherungsweise das Integral bei Einteilug des Integrationsintervalls in n =
2, 4, 8 Teile, mit Hilfe der trapz, quad und quad8 Funktionen.

b) Implementieren Sie die Rechteck-, Trapez- und Simpsonregel, und vergleichen Sie
den jeweiligen Integrationsfehler und den numerischen Aufwand.

Lösung 19 (Numerische Integration: Matlab)


Das Matlab-Skript ist auf der Vorlesungseite zum herunterladen bereitgestellt.
Die Ergebnisse vom Teil b) lauten

6
a) >> syms x

>> int(1/(x+1))
ans =

log(x + 1)

>> int(1/(x+1),0,1)
ans =

log(2)

>> double(intex)
ans =

0.6931

>> f = @(x) 1./(x+1);


>> n = 2;
>> xlist = linspace(0,1,n+1);
>> flist = double(subs(f2,xlist));

>> trapz(xlist,flist)
ans =

0.7083

>> quad(f2,0,1)
ans =

0.6931
R1 1
b) Exaktes Integral: 0 1+x
dx = log(2) ≈ 0.69315.

Rechteck Trapez Simpson


n ˜ )
I(f Fehler FA ˜ )
I(f Fehler FA ˜ )
I(f Fehler FA
2 0.8333 0.1402 2 0.7083 0.0152 3 0.6944 0.0013 3
4 0.7595 0.0664 4 0.6970 0.0039 5 0.6933 0.0001 5
8 0.7254 0.0322 8 0.6941 0.0010 9 0.6932 0.0000 9

Hier steht FA üf die Anzahl der Funktionsauswertungen.

Das könnte Ihnen auch gefallen