Wissenschaftliches Rechnen - Zusammenfassung

Wissenschaftliches Rechnen - Zusammenfassung Patrick Pletscher 5. Oktober 2004 1. Endliche Arithmetik Double Precision (64 Bits) 1.1. Reelle Zahlen ...
Author: Alwin Raske
2 downloads 0 Views 395KB Size
Wissenschaftliches Rechnen - Zusammenfassung Patrick Pletscher 5. Oktober 2004 1. Endliche Arithmetik

Double Precision (64 Bits)

1.1. Reelle Zahlen ↔ Maschinenzahlen

Double Precision ist heute der Normalfall. +-+-+-+-+-+-+-+-+-+-+-+-+ | S | E | M | +-+-+-+-+-+-+-+-+-+-+-+-+ 0 1 11 63

Jeder Computer ist ein endlicher Automat, d.h. er kann nur • endlich viele Operationen durchf¨ uhren • endlich viele Zahlen speichern

Die Zahl ist:

Die reellen Zahlen R werden durch die endliche Menge der V = (−1)S · 1.M · 2E−1023 falls 0 < E < 2047 Maschinenzahlen M approximiert. Dabei wird jeweils ein ganzes Intervall (z.B. alle reellen Zahlen deren ersten 10 Ziffern anders geschrieben: gleich sind) auf eine Maschinenzahl abgebildet. V = (−1)S · (1 + M/252 )· 2E−1023 Darstellung einer Maschinenzahl Ausnahmen: a ˜∈M a ˜ = ±m· B ±e E = 2047, M 6= 0 V = N aN (not a number) m = D.D · · · D Mantisse E = 2047, M = 0, S = 0 V = Inf (= ∞) e = D · · · D: Exponent E = 2047, M = 0, S = 1 V = Inf (= −∞) B: Basis E = 0, M 6= 0 V = (−1)s · 0.M · 2−1022 V = (−1)S · M/252 · 2−102 Wobei D eine Ziffer ∈ {0, 1, . . . , 9} (nicht normalisierte Zahl) E = 0, M = 0, S = 1 V = −0 Heute ist B meistens 2 (nach dem IEEE Standard for floating E = 0, M = 0, S = 0 V =0 Point operations), fr¨ uher oftmals 10. Es gibt eine gr¨osste und eine kleinste Maschinenzahl. Der Rechenbereich ist [−realmax, realmax], wobei realmax = 21024 . Es gibt auch eine kleinste normalisierte Zahl realmin = 2−1022 . Die kleinste nicht normalisierte Zahl ist 0.0 · · · 01· 2−1022 .

1.2. Gleitkommazahlen nach dem IEEE Standard Single Precision (32 Bits) +-+-+-+-+-+-+-+-+-+-+-+-+ | S | E | M | +-+-+-+-+-+-+-+-+-+-+-+-+ 0 1 9 31

Maschinengenauigkeit eps

S: Vorzeichen E: Exponent 8 Bits M: Mantisse 23 Bits

V = (−1)S · 1.M · 2E−127

Definition (Maschinengenauigkeit). Die Maschinengenauigkeit eps ist die kleinste pos. Maschinenzahl welche zu 1 addiert ein Resultat 6= 1 ergibt. Eine neuere Definition lautet: Der Abstand zwischen zwei aufeinanderfolgenden Floating Point Numbers zwischen 1 und 2.

falls 0 < E < 255

Ausnahmen: E E E E

= 255, M 6= 0 = 255, M = 0, S = 0 = 255, M = 0, S = 1 = 0, M 6= 0

E = 0, M = 0, S = 1 E = 0, M = 0, S = 0

In IEEE ist eps = 2−52 . V = N aN (not a number) V = Inf (= ∞) V = Inf (= −∞) V = (−1)s · 0.M · 2−126 (nicht normalisierte Zahl) V = −0 V =0

1.3. Rechnen mit Maschinenzahlen Rundungsfehler absoluter Rundungsfehler: ra = c˜ − c relativer Rundungsfehler: r = rca

1

Wie gross sind die Rundungsfehler? Bei heutigen Computern if (1/x)/x == 0 gilt: Noch besser ohne nichtnormalisierten Zahlen: ˜ = (a ⊕ b)(1 + r) a⊕b if (eps/x)/x == 0

Wobei r relativer Rundungsfehler mit |r| ≤ ε und ⊕ ∈ {+, −, ×, /}.

numerische Ausl¨ oschung Assoziativgesetz

Wenn 2 nahezu gleichgrosse Zahlen subtrahiert werden. Viele Gesetze der Mathematik gelten nicht, so z.Bsp. Assoziativge- Bits der Mantisse sind dann unbekannt und werden mit 0 ullt. setz. Man muss also u ur eine Sum- gef¨ ¨berlegen wie klammern. F¨ me ist es also von Vorteil mit dem kleinsten Element zu beginnen und das gr¨osste Element erst als Letztes zu addieren. 1.4. Maschinenunabh¨ angige Algorithmen These: Gute Algorithmen funktionieren dank der Rundungsfehler!

Kahan’s Summenalgorithmus

Um Summen auf dem Computer m¨ oglichst richtig zu berechnen, benutzt man den Algorithmus von Kahan. Beispiel: Exponentialfunktion s=

N X

function y= e2(x); % stable computation of the exponential % function using the series if x tol * abs(tnew), told = tnew; zh = 2 * zh; h = h / 2; s = s + sum(feval(f,a + [1:2:zh]*h)); tnew = h * s; end; T = tnew;

ξn yn

und durch Integration erhalten wir die Quadratur Regel: Z b n X Pn (x)dx = wi yi a

h · sneu 2

i=0

Wir benutzen die Lagrange Form von Pn : Pn (x) =

n X

Simpsonregel li (x)· yi

Ein Polynom zweiten Grades

i=0 n Y x − ξj li (x) = ξ − ξj j=0 i b

Z

Pn (x)dx = a

n X

Z yi

i=0

b

Z

f (x)dx ≈ a

b−a 6



 f (a) + 4f

a+b 2



 + f (b)

F¨ ur die zusammengesetze Simpsonregel m¨ ussen wir das Integrationsintervall [a, b] in 2n Unterintervalle aufteilen und es ergibt sich:

b

li (x)dx | a {z } wi

h (y0 + 4y1 + 2y2 + 4y3 + . . . + 2y2n−2 + 4y2n−1 + y2n ) 3

Newton-Cotes Regeln

S(h) =

Gegeben: St¨ utzstellen ξi Rb Berechne Gewichte wi = a li (x)dx

Der Integrationsfehler ist

Z

b

f (x)dx ≈ a

n X

Z b b−a f (x)dx − S(h) = h4 f (4) (ξ) a 180

wi f (ξi )

i=0

closedcotes := n -> factor(int(interp( [seq(i*h, i= 0..n)], [seq(f(i*h), i=0..n)], z),z=0..n*h));

Zur Programmierung (Einf¨ ugen von neuen ξi ”dazwischen”): F¨ ur h:

Trapezregel Z

b

f (x)dx ≈ a

ξ ∈ [a, b]

b−a (f (a) + f (b)) 2

Als zusammengesetzte Regel f¨ ur das Intervall [a, b] mit n gleich grossen Intervallen (xi , xi+1 ) der L¨ ange h = xi+1 −xi = (b − a)/n, wobei yi = f (xi ), ergibt sich: Dann f¨ ur

4

s1 s2 s4 h 2:

= y0 + y4 = y2 = y 1 + y3

sneu 1 sneu 2 sneu 4

∆f (x) = f (x + 1) − f (x) =

= s1 = s2 + s4 = neue Fkt. Werte

h 2

3

∆f (i) (x) =

a

n 1 2 4

wi 1 1 7

1 4 32

1 12

f (k+i) (x)

∆F (x) = F (x + 1) − F (x) = In Matrixschreibweise:   f (x)  f 0 (x)      ..   . f =   f (m) (x)    .. .  1 1!

n

32

7

Fehler 1 (2) h3 12 f (ξ) 1 (4) h5 90 f (ξ) 8 h7 945 f (6) (ξ)

Resultat von Steffenson Z b Z b P (x)dx − f (x)dx = hp+1 · k· f (p) (ξ),

∞ X

f (k−1)

k=1

b−aX wi fi Pn (x)dx = ns i=0 ns 2 6 90

1 k!

Und f¨ ur das Integral:

 A= Name Trapezregel Simpsonregel Milne-Regel



1 k!

∆F (x) ∆f (x) .. .

   ∆f =    ∆f (m−1) (x)  .. .  1 1 1 ... 2! 3! 4! 1 1 1 ...  1! 2! 3!  .. .. .. . . .

       

∆f = Af Nach f aufgel¨ost: f = A−1 ∆f Dabei ist A folgende Matrix:  b1 b 2  b1 A−1 = 

2.3. Fehler der Newton-Cotes Formeln

a

∞ X k=1

(sneu + 2· sneu + 4· sneu 1 2 4 )

¨ Uberblick b

1 k!

F¨ ur Ableitungen gilt:

function S = simpson(f,a,b,tol); h = (b-a)/2; s1 = feval(f,a) + feval(f,b); s2 = 0; s4 = feval(f,a + h); snew = h *(s1 + 4 * s4)/3; zh = 2; sold = 2*snew; while abs(sold-snew)>tol*abs(snew), sold = snew; zh = 2*zh; h=h/2; s2 = s2 + s4; s4 = sum(feval(f,a + [1:2:zh]*h)); snew = h*(s1 + 2*s2 + 4*s4)/3; end S = snew;

Z

f (k) (x)

k=1

Dann ergibt sich f¨ ur Simpson: S(h/2) =

∞ X

ξ ∈ (a, b)

b3 b2 .. .

 ... ...   .. .

a

Dabei h¨angen p und k nicht von f ab. Die Gleichung gilt Dabei sind die Koeffizienten bi aus den Bernoullizahlen Bk zu berechnen durch: nat¨ urlich nur f¨ ur gen¨ ugend oft differenzierbare f . Bk−1 bk = (k − 1)! 2.4. Euler-Mac Laurin Summationsformel Die ersten Bernoullizahlen:

Suchen einer geschlossenen Funktion f¨ ur β X

f (i)

Idee: Wir suchen eine Summenfunktion s(x) mit der Eigenschaft ∆s(x) = s(x + 1) − s(x) = f (x)

β X

Dann gilt:

Z f (i)

i=α

f (i) = s(β + 1) − s(α)

Wollen s(x) als formale (= k¨ ummern uns nicht um Konvergenzbereich) Potenzreihe berechnen. Wir betrachten die Taylorreihe f¨ ur f (x + h) f¨ ur h = 1: f (x + 1) =

k=0

f (k) (x)

β

=

f (x)dx + α

+

i=α

∞ X

B2 =

1 , 6

B3 = 0

Durch Umformen ergibt sich die Euler-Mac Laurin Summenformel

i=α

β X

1 B1 = − , 2

B0 = 1,

f (α) + f (β) 2

∞ X B2j (2j−1) (f (β) − f (2j−1) (α)) (2j)! j=1

Folgerung F¨ ur Summen von Polynomen Pm (x) werden alle Ableitungen gr¨osser m gleich 0 und somit ist es hinreichend die rechte Summe bei der Euler-Mac Laurin Formel nur bis zum Term m/2 zu bilden.

1 k!

5

Spezialisierung f¨ ur Trapezsumme

hi−1 h0 = i 2 2 Somit ergibt sich das Romberg Schema:

∞ X B2j (2j−1) (g (b) − g (2j−1) (a))h2j g(t)dt + (2j)! a j=1 | {z } | {z } exaktes Integral Fehler der Trapezregel b

Z

T (h) =

Spezialisierung des ANS f¨ ur Romberg Integration z = 0,

xi = h2i ,

Tij =

Wir haben die asymptotische Entwicklung der Trapezregel erhalten

hi =

4−j Ti−1,j−1 − Ti,j−1 4−j − 1

Satz 2.1. In der 2. Kolonne des Rombergschemas stehen die Simpson Werte. In der 3. Kolonne die Milne’s Regel. b

Z

g(t)dt + c1 h2 + c2 h4 + . . . + cm h2m + Rm

T (h) =

Integrale u ur eine Periode am ¨ber periodische Funktionen f¨ Besten mit Trapez. Romberg bringt hier keine Verbesserung.

a

Wobei f¨ ur das Restglied Rm gilt: Rm =

function [I, T] = romberg(f,a,b,tol); h = b - a; intv =1; s = (feval(f,a) + feval(f,b)) / 2; T(1,1) = s * h; for i = 2:15 intv = 2*intv; h = h/2; s = s + sum(feval(f,a+[1:2:intv]*h)); T(i,1) = s * h; vhj = 1; for j = 2:i vhj = vhj/4; T(i,j) = (vhj*T(i-1,j-1) - T(i,j-1)) / (vhj -1); end; if abs(T(i,i)-T(i-1,i-1)) < tol * abs(T(i,i)), I = T(i,i); return end end warning([’limit of extrapolation steps reached. ’, ... ’Required tolerance may not be met.’]); I = T(i,i);

B2m+2 2m+2 h (b − a)(2m+2) (ξ) (2m + 2)!

2.5. Romberg Integration b

Z T (h) = |a

g(t)dt +c1 h2 + c2 h4 + c3 h6 + . . . {z }

=c0

Somit T (h) ≈ Pm (h2 ) Wir wollen c0 ≈ Pm (0) berechnen. Vorgehen: • interpolieren durch Polynom vom Grade i

2.6. Gauss Quadratur • evaluieren f¨ ur x = 0 ergibt N¨ aherung f¨ ur Integral.

Wollen St¨ utzstellen optimieren.

F¨ ur die Interpolation k¨ onnte ein Lagrange-Polynom verwenR1 det werden, besser ist es aber das Aitken-Neville Schema zu Transformation von ”normalem” Integral zu −1 : ben¨ utzen.   Z Z b b−a a+b b−a 1 f t+ f (x)dx = dt 2 2 2 −1 a Aitken Neville Schema Nun versucht man die Gewichte wk und St¨ utzstellen ξk optimal zu w¨ a hlen: x y x0 T00 Z 1 n X x1 T10 T11 f (x)dx ≈ wk f (ξk ) (1) −1 x2 T20 T21 T22 k=1 .. . ... ... Satz 2.2. Die Ordnung der Gauss Formel 1 ist ≤ 2n − 1 xi

Ti0

Ti1

Ti2

...

...

...

...

...

Tii ...

..

Die wi und ξi sind symmetrisch. Ungerade Monome werden automatisch richtig integriert, Gleichungen nur f¨ ur gerade Monome aufstellen.

.

Wobei gilt

F¨ ur n ≤ 6 k¨onnen wir die L¨osung noch analytisch bestimmen. Ti0 Tij j

 = yi  (xi −z)Ti−1,j−1 +(z−xi−j )Ti,j−1 = i = 1, 2, 3, . . . xi −xi−j  = 1, 2, . . . , i

gauss := proc(n) local w, xi, i, j, firsteq, eqns, sols, m; global res;

z ist dabei eine feste Stelle, an dem die Polynome im ANS ausgewertet werden.

firsteq := 2 * sum(w[i], i=1..m); if irem(n,2)=1 then firsteq := firsteq+w[0] fi;

6

restart; lanczos := proc(p, alpha, beta, n) local k, q, x; p := array(0..n); alpha := array (1..n); beta := array (1..n-1); p[0] := 1/sqrt(2); alpha[1] := int(x*p[0]*p[0], x=-1..1); q := (x - alpha[1]) * p[0]; for k from 2 to n do beta[k-1] := sqrt(int(q*q, x=-1..1)); p[k-1] := expand(q / beta[k-1]); alpha[k] := int(x*p[k-1]*p[k-1], x= -1..1); q := (x - alpha[k])*p[k-1] - beta[k-1]*p[k-2]; od; RETURN (NULL); end;

eqns := {2 = firsteq}; for j from 2 by 2 to 2*(n-1) do eqns := eqns union{ int(x^j, x=-1..1) = 2*sum(w[i]*xi[i]^j, i=1..m)}; od; if irem(n,2)=1 then sols := {w[0]} else sols := {} fi; for j from 1 to m do sols := union {w[j], xi[j]}; od; res := solve(eqns, sols); evalf(res); end;

Charakterisieren der ξi , wi Z 1 n X P2n−1 (x)dx = P2n−1 (ξi )wi

Bez¨ uglich dem Skalarprodukt 3 ergeben sich f¨ ur die αk und βk : k (2) αk = 0, βk = √ −1 i=1 4k 2 − 1 Annahme: P2n−1 (x) = Hn−1 (x)· Qn (x) + Rn−1 (x) βk−1 l¨asst sich relativ bequem durch das Skalarprodukt (βk pk , βk pk ) berechnen, wobei βk pk = (x − αk )pk−1 − Somit ergibt sich f¨ ur die LHS von 2: βk−1 pk−2 , dies berechnet man am Besten immer am Anfang der neuen Iteration f¨ ur die vorhergehende, also eigentlich Z 1 Z 1 Z 1 β . k−1 P2n−1 (x)dx = Hn−1 (x)Qn (x)dx + Rn−1 (x)dx −1

−1

−1

Golub-Welsh Algorithmus 1. Wir w¨ahlen f¨ ur Qn das orthogonale Polynom zum Intervall [−1, 1] mit dem Skalarprodukt (f, g) = Die 3-gliedrige Rekursionsformel von R1 Matrixschreibweise f (x)g(x)dx −1 R1 Mit dieser Wahl ist −1 Hn−1 (x)Qn (x)dx = 0 2 0

2. W¨ahlenPξi = Nullstellen des orthogonalen Polynoms Qn ⇒ wi Hn−1 (ξi )Qn (ξi ) = 0

B B x· B @

3. Die ξi sind fest also kann man die Gewichte nach Idee von Newton-Cotes bestimmen R1 ⇒ wi = −1 li (x)dx (li = Lagrange Polynome) R1 Pn ⇒ −1 Rn−1 (x)dx = i=1 wi Rn−1 (ξi )

|

p0 (x) p1 (x) . . . pn−1 (x) {z p(x)

1 C C C A

=

α1 6 β1 6 6 6 6 6 6 4

β2 .. . ..

..

.

3

.

αn−1 βn−1

}

βn−1 αn

{z

|

Tn

0 B B +B @

Satz 2.3. Die Gauss-Quadraturregel 2 hat die Ordnung 2n− 1. Die ξi sind Nullstellen der orthogonalen Qn und die wi sind die Integrale der Lagrangepolynome.

β1 α2 .. .

2.4 in Vektor-

0 . . . 0 βn pn (x)

0 p0 (x) 7 7 7 B p1 (x) 7B 7B . . 7@ . 7 5 pn−1 (x)

1 C C C A

}

1 C C C A

x· p(x) = Tn · p(x) + en · βn · pn (x)

n := 20; X := sort([fsolve(orthopoly[P](n,x)=0,x)]); Q := int(interp(X, [seq(y[i], i=1..n)],z),z=-1..1); Orthogonale Polynome

Die ξi sind die Nullstellen von pn (x), d.h. ξi p(ξi ) = Tn · p(ξi ) Die ξi sind also die Eigenwerte von Tn , da Tn symmetrische Matrix ist, sind die EW sehr gut konditioniert und reell.

Da die Gaussquadraturregel sagt, dass Polynome bis Grad 2n − 1 korrekt integriert werden, im Speziellen auch die orthogonalen Polynome pi (x) f¨ ur i = 0, 1, . . . , n − 1 und alle Integrale u Polynomen Null ergeben mit Ausnahme ¨ber den √ ur die Gewichte wi : von p0 (x), welches 2 ergibt, gilt f¨ Satz 2.4. Die orthogonalen Polynome p0 (x), p1 (x), . . . √ gen¨ ugen der 3-gliedrigen Rekursionsformel Pw = 2· e1 Polynome Pk (vom Grade k) sind orthogonal auf [−1, 1] wenn  Z 1 0 k 6= i (Pi , Pk ) = Pi (x)Pk (x)dx = (3) 1 k=i −1

k = 1, 2, . . . Wobei P die Eigenvektormatrix von T ist, dabei ist zu beachten, dass die Vektoren so normiert sind, dass die ersten KomMit αk = (xpk−1 , pk−1 ), βk = (xpk−1 , pk ) und √ mit der Initia- ponenten gleich √12 sind, da p0 (x) = √12 . Dies erreicht man lisierung β0 := 0, p−1 (x) := 0 und p0 (x) := 1/ 2. am besten in dem man von der EW-Zerlegung Tn = QDQT x· pk−1 (x) = βk−1 pk−2 (x)+αk pk−1 (x)+βk pk ,

7

1. Jede Kolonne von Q durch das erste Element dividieren. √ 2. Multiplizieren jede Kolonne mit 1/ 2.

Falls man das Integral nicht auf Maschinengenauigkeit eps integrieren m¨ochte, sondern nur bis zu einer Toleranz tol, kann man folgende Abbruchbedingung benutzen:

dies kann auch geschrieben werden als P = QV, Pw =



V = diag

1 1 √ ,... √ 2q1,1 2q1,n

2e1 kann nun gel¨ ost werden durch √ QVw = 2e1  w

 √ −1 T  2V Q e1 = 2  = 

2 q11 2 q12 .. . 2 q1n

tol tol · is + (i1 − i2) == · is eps eps

!

Um die Neu-Berechnung von Funktionswerten zu vermeiden, kann man fa , fm , fb als Parameter der rekursiv aufgerufenen Funktion u ¨bergeben. Als weitere Verbesserung kann man das Romberg-Schema auf die beiden mit der Simpsonmethode gerechneten i1, i2 anwenden 16· i2 − i1 i1neu = 15

    

function Q = simadpt(f,a,b,tol,trace,varargin) global warn1, warn2

Dadurch ergibt sich der Gauss-Legendre Algorithmus function [xi, w] = gausslegendre(n) beta = 0.5 ./ sqrt(1-(2*(1:n-1).^(-2))); [Q, D] = eig(diag(beta,1) + diag(beta,-1)); [x, i] = sort(diag(D)); w = 2 * Q(1,i).^2;

if (nargin < 4), tol = []; end; if (nargin < 5), trace = []; end; if (isempty(tol)), tol = eps; end; if (isempty(trace)), trace = 0; end; if tol a) a = a/2.0; end a = a*2.0; % kleinste pos. nicht-norm. b = 1.0; while ((b/2.0) > 0.0) b = b/2.0; end % gr"osste c = 2-e; while ((c*2.0) ~= Inf) c = c*2.0; end

I. Additionstheoreme sin2 ϕ + cos2 ϕ = 1 cos ϕ = sin(ϕ + π/2) sin(−ϕ) = − sin ϕ cos(−ϕ) = cos ϕ sin(α ± β) = sin α cos β ± cos α sin β cos(α ± β) = cos α cos β ∓ sin α sin β sin(2ϕ) = 2 sin ϕ cos ϕ cos(2ϕ) = cos2 ϕ − sin2 ϕ = 2 cos2 ϕ − 1 = 1 − 2 sin2 ϕ sin(3ϕ) = 3 sin ϕ − 4 sin3 ϕ cos(3ϕ) = 4 cos3 ϕ − 3 cos ϕ ϕ sin2 ( ϕ2 ) = 1−cos 2 ϕ cos2 ( ϕ2 ) = 1+cos 2 tan α±tan β tan(α ± β) = 1∓tan α tan β 2 tan ϕ tan(2ϕ) = 1−tan 2ϕ 3

ϕ−tan ϕ tan(3ϕ) = 3 tan 1−3 tan2 ϕ 1−cos ϕ 2 ϕ tan ( 2 ) = 1+cos ϕ ϕ sin ϕ = 1+cos tan ϕ2 = 1−cos sin ϕ ϕ

17