• No results found

1.1. Ber¨ akning av integraler

N/A
N/A
Protected

Academic year: 2021

Share "1.1. Ber¨ akning av integraler"

Copied!
21
0
0

Loading.... (view fulltext now)

Full text

(1)

Kapitel 1. Numeriska metoder

Detta ¨ar andra delen av kursen i vetenskapliga ber¨akningar, d¨ar vi till en b¨orjan kommer att bekanta oss med endel numeriska metoder, som inte ingick i den f¨orsta delen. Ber¨akningarna kommer som f¨orut att utf¨oras med Matlab.

(2)

1.1. Ber¨ akning av integraler

I fysiken beh¨over man ofta ber¨akna integraler av funktioner numeriskt. F¨or att ber¨akna integraler av element¨ara funktioner finns det standardmetoder som ¨ar k¨anda fr˚an analysen, men i fysiken st¨oter man ofta p˚a funktioner, som inte kan integreras med v¨alk¨anda metoder.

Ett exempel h¨arp˚a ¨ar Gauss’ felfunktion

erf(x) = 2

√π Z x

0

e−t2dt

som ¨ar n¨ara besl¨aktad med den kumulativa normalf¨ordelningen som anv¨ands i statistiken. Denna integral kan dock inte ber¨aknas med element¨ara metoder eftersom den primitiva funktionen till e−t2 inte kan uttryckas med element¨ara funktioner. Naturligtvis kunde man kalla funktionen f¨or erf, men hj¨alper oss inte att ber¨akna v¨arden av den. F¨or den skull beh¨over man numeriska metoder. Redan i antiken fanns det praktiskt behov av att ber¨akna ytor och volymer. Arkimedes uppfann en metod f¨or s˚adana ber¨akningar som i h¨og grad p˚aminner om ber¨akning av integraler.

Den typ av integraler, som man normalt st¨oter p˚a i fysiken, kallas i matematiken f¨or en Riemann-integral.

(3)

Riemann-integralen baserar sig p˚a Jordanm˚attet, och definieras som gr¨ansv¨ardet av en Riemannsumma, som vi skall se nedan.

Om vi f¨or enkelhetens skull antar att vi ¨onskar ber¨akna integralen ¨over funktionen f (x) mellan gr¨anserna x = a och x = b, s˚a kan vi t¨anka oss detta intervall f¨or enkelhetens skull delat i n lika stora delintervall av l¨angden h = (b − a)/n. Delningspunkterna kan d˚a betecknas xk = a + kh, (k = 0, 1, . . . , n), dvs h = xk − xk−1. En Riemannsumma kan d˚a definieras som

S =

n

X

k=1

f (ck)(xk − xk−1), ck ∈ [xk−1, xk]

Varje term i denna summa ¨ar allts˚a ytan av en rektangel med h¨ojden f (ck) och bredden h, och summan kan uppfattas som en approximation till en yta som begr¨ansas av x-axeln, funktionens ordinator i interval- lets ¨andpunkter, och funktionskurvan mellan ordinatorna. En funktion s¨ags vara Riemannintegrerbar, ifall Riemannsumman konvergerar mot ett best¨amt gr¨ansv¨arde, d˚a delningen t¨atnar.

Ofta brukar man v¨alja ck s˚a, att det antingen ¨ar funktionens maximiv¨arde (supremum) Mk inom intervallet [xk, xk−1] eller minimiv¨arde (infimum) mk inom detta intervall. Vi f˚ar d˚a en ¨ovre Darbouxsumma U = Pn

k=1Mk(xk−xk−1), respektive en undre Darbouxsumma L = Pn

k=1mk(xk−xk−1). D˚a delningen t¨atnar, kommer den ¨ovre summan att uppifr˚an n¨arma sig ett gr¨ansv¨arde, som kallas Darboux’ ¨ovre integral, och den undre summan n¨armar sig nedifr˚an ett gr¨ansv¨arde, som kallas Darboux’ undre integral.

(4)

Om b˚ada integralerna sammanfaller, s˚a kallas det gemensamma gr¨ansv¨ardet Darboux’ integral, som d˚a sammanfaller med Riemanns integral.

Riemannsummor kan ocks˚a anv¨anda f¨or att numeriskt ber¨akna en integral. Som ett exempel skall vi ta R 1

0 exdx. F¨ordenskull delar vi upp intervallet [0, 1] p˚a n delintervall av l¨angden h = 1/n. Den undre Darbouxsumman blir d˚a

L =

n

X

k=1

mk(xk − xk−1) =

n

X

k=1

e(k−1)/n1

n = 1 n

n

X

k=1

(e1/n)k−1

=1 n

(e1/n)n − 1

e1/n − 1 = (e − 1) 1/n

e1/n − 1, (1)

eftersom funktionen ¨ar monotont v¨axande och serien ¨ar geometrisk. Om delningen f¨ort¨atas gr¨ansl¨ost, dvs man l˚ater n → ∞, s˚a blir Darbouxsummans gr¨ansv¨arde e − 1, vilket ¨ar integralens v¨arde.

(5)

1.2. Kvadraturregler

I allm¨anhet ¨ar det l¨attare att ber¨akna integraler numeriskt med hj¨alp av s.k. kvadraturregler ¨an med Riemannsummor. I detta fall anv¨ander man en v¨agd summa av funktionsv¨arden (som kallas noder) inom det givna intervallet f¨or att approximera integralen. Vikterna motsvarar d˚a intervall¨angderna i Riemannsumman.

En m punkters kvadraturregel Q f¨or den best¨amda integralen I =

Z b a

f (x)dx

¨ar en approximation, som har formen

Q = (b − a)

m

X

k=1

wkf (xk),

d¨ar xk kallas f¨or abskissor och wk ¨ar vikterna. Regeln ¨ar definierad, d˚a abskissor och vikter ¨ar angivna.

Effektiviteten f¨or en kvadraturregel m¨ats med antalet funktionsber¨akningar som kr¨avs. En sex-punkters formel ¨ar s˚aledes dubbelt dyrare ¨an en tre-punkters formel.

(6)

Vi skall b¨orja med att studera formler av Newton–Cotes typ. De k¨annetecknas av att man integrerar en polynomisk interpolant p(x) f¨or integranden f (x). Detta betyder, att av p(x) ≈ f (x) f¨oljer

Z b a

f (x)dx ≈ Z b

a

p(x)dx.

Newton–Cotes kvadraturregler f˚ar man genom att integrera polynom, som interpolerar integranden i punkter p˚a lika avst˚and fr˚an varandra. Newton–Cotes m-punktsformel definieras av

Q(m)N C = Z b

a

pm−1(x)dx,

d¨ar pm−1(x) interpolerar f (x) i punkterna

xi = a + i − 1

m − 1(b − a), i = 1 : m.

(7)

Om m = 2, f˚ar vi trapetsregeln Q(2)N C =

Z b a



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

b − a (x − a)

 dx

= (b − a)1

2f (a) + 12f (b) . (2)

Om m = 3 och c = (a + b)/2, s˚a f˚ar vi Simpsons regel:

Q(3)N C = Z b

a

"

f (a) + f (c) − f (a)

c − a (x − a) +

f (b)−f (c)

b−cf (c)−f (a) c−a

b − a (x − a)(x − c)

# dx

= b − a 6



f (a) + 4f  a + b 2



+ f (b)



. (3)

Av dessa exempel framg˚ar, att kvadraturformeln kan uttryckas som en line¨arkombination av funktionsv¨arden p˚a j¨amnt avst˚and fr˚an varandra innanf¨or integrationsintervallet.

(8)

Ett enkelt s¨att att finna vikterna i en dylik kvadraturformel f˚ar man genom att fordra, att den skall st¨amma exakt f¨or x–potenserna xi, i = 0 : m − 1. Om vi t.ex. vill ber¨akna koefficienterna i fyrpunktsformeln:

Z 1 0

f (x)dx ≈ af (0) + bf  1 3



+ cf  2 3



+ df (1),

s˚a st¨aller vi upp ekvationssystemet

Z 1 0

dx = 1 = a + b + c + d Z 1

0

xdx = 1

2 = 0 + b

3 + 2c

3 + d Z 1

0

x2dx = 1

3 = 0 + b

9 + 4c

9 + d Z 1

0

x3dx = 1

4 = 0 + b

27 + 8c

27 + d. (4)

(9)

Genom att l¨osa detta ekvationssystem finner man formeln Z 1

0

f (x)dx ≈ 1 8



f (0) + 3f  1 3



+ 3f  2 3



+ f (1)

 .

F¨or enkelhetens skull kan vi skriva ett litet MATLAB–program, som tabulerar de vanligaste Newton–Cotes–

koefficienterna:

function w=wnc(m);

%

% Invariabel:

% m heltal mellan 2 och 8

%

% Utvariabel:

% w kolumnvektor med m element som inneh˚aller vikterna

% or m-punktsregeln.

%

if m==2

w = [1 1]’/2;

elseif m==3

w = [1 4 1]’/6;

elseif m==4

w = [1 3 3 1]’/8;

(10)

elseif m==5

w = [7 32 12 32 7]’/90;

elseif m==6

w=[19 75 50 50 75 19]’/288;

elseif m==7

w=[41 216 27 272 27 216 41]’/840;

elseif m==8

w=[751 3577 1323 2989 2989 1323 3577 751]’/17280;

end

Som vi ser, ¨ar viktsvektorerna symmetriska kring intervallets mittpunkt, s˚a att w(1 : m) = w(m : −1 : 1). Den numeriska integrationen kan sedan utf¨oras med hj¨alp av formeln

Q(m)N C = (b − a)

m

X

i=1

wifi = (b − a)[w1 · · · wm]

f (x1) ...

f (xm)

som visar att kvadraturformeln kan ber¨aknas som skal¨arprodukten av viktsvektorn och en vektor inneh˚al- lande funktionsv¨arden. En MATLAB-rutin, som ber¨aknar en integral med hj¨alp av Newton–Cotes kvadratur, kan allts˚a skrivas

(11)

function I = qnc(fname,a,b,m)

%

% Invariabler:

% fname : str¨ang som inneh˚allet namnet p˚a en funktion f(x) som ¨ar

% definierad ¨over intervallet [a,b]. f ger till resultat

% en kolumnvektor, om x ¨ar en kolumnvektor.

% a,b : reella skal¨arer.

% m : ett heltal mellan 2 och 8.

% Utvariabel:

% I : en m-punkts Newton-Cotes approximation f¨or integralen

% av f(x) mellan a och b.

%

w = wnc(m);

x = linspace(a,b,m)’

f = feval(fname,x);

I = (b-a)*(w’*f);

F¨oljande program kan anv¨andas f¨or att testa funktionen:

(12)

% Skriptfil: testqnc

%

% Testar Newton-Cotes-reglerna.

while input (’Annat exempel? (1=ja, 0=nej). ’)

fname = input(’Ange namnet p˚a integranden mellan apostrofer:’);

a = input(’Ange v¨anstra ¨andpunkten: ’);

b = input(’Ange h¨ogra ¨andpunkten: ’);

s = [’QNC(’ fname sprintf(’,%6.3f,%6.3f,m)’,a,b)];

clc

disp([’ m ’ s])

disp(’ ’) for m=2:8

I = qnc(fname,a,b,m);

disp(sprintf(’ %2.0f %20.16f’,m,I)) end

end

Om programmet till¨ampas p˚a sinusfunktionen inom intervallet [0, π/2] f˚as

(13)

m QNC(sin, 0.000, 1.571,m )

2 0.7853981633974483

3 1.0022798774922104

4 1.0010049233142790

5 0.9999915654729928

6 0.9999952613861668

7 1.0000000258372352

8 1.0000000158229038

Som vi ser, ¨okar noggrannheten med antalet punkter i formeln. Man kan visa, att felet i Simpsons regel (m = 3) best¨ams ur formeln

Z b a

f (x)dx − Q(3)N C

≤ (b − a)5

2880 M4,

d¨ar M4 betecknar ¨ovre gr¨ansen av fj¨arde derivatan |f(4)(x)| inom intervallet [a, b]. I det allm¨anna fallet g¨aller formeln

Z b a

f (x)dx = Q(m)N C + cmf(d+1)(θ) b − a m − 1

d+2 ,

(14)

d¨ar cm ¨ar en liten konstant, θ ∈ [a, b] och

d =

(m − 1 , om m ¨ar j¨amnt m , om m ¨ar udda.

Om vi k¨anner till en ¨ovre gr¨ans f¨or derivatan, t.ex. att |f(d+1)(x)| ≤ Md+1 inom intervallet [a, b], s˚a

¨ar

Q(m)N C − Z b

a

f (x)dx

≤ |cm|Md+1  b − a m − 1

d+2 .

H¨ar ¨ar en MATLAB–funktion som r¨aknar ut kvadraturfelet d˚a k¨anner en uppskattning av felet i derivatan:

function error = ncerr(a,b,m,DerBound)

%

% Invariabler:

% a,b reella tal som satisfierar a<=b

% m heltal som satisfierar 2<=m<=8 och

% DerBound en ¨ovre gr¨ans f¨or den d:te derivatan av

% en funktion f(x) definierad p˚a [a,b]. Talet

% d = m om m ¨ar udda, och m-1 om m ¨ar j¨amnt.

%

% Utvariabel:

% error en ¨ovre gr¨ans f¨or absoluta felet i en Newton-

(15)

% Cotes m-punktsregel, d˚a den till¨ampas p˚a

% integralen av f(x) fr˚an a till b.

%

if m==2

d=1; c = -1/12;

elseif m==3

d=3; c = -1/90;

elseif m==4

d=3; c = -3/80;

elseif m==5

d=5; c = -8/945;

elseif m==6

d=5; c = -275/12096;

elseif m==7

d=7; c = -9/1400;

elseif m==8

d=7; c= -8183/518400;

end;

error = abs( c*DerBound*((b-a)/(m-1))^(d+2) );

Rutinen visar, att en (m − 1)-punktsregel vanligen ¨ar lika bra som motsvarande m-punktsregel. Vi ser detta tydligare genom att k¨ora f¨oljande testprogram:

(16)

% Skriptfil: shqncerr

%

% Program f¨or att studera felet i en Newton-Cotes regel.

clc

disp(’Enkelt fall: integralen fr˚an 0 till pi/2 av sin(x)’) disp(’ ’)

disp(’Antag att DerBound = 1.’) disp(’ ’)

disp(’ m QNC(m) fel felgr¨ans’)

disp(’ ’) for m=2:8

numI = qnc(’sin’,0,pi/2,m);

err = abs(numI-1);

errBound = errnc(0,pi/2,m,1);

s = sprintf(’%20.16f %10.3e %10.3e’,numI,err,errBound);

disp([ sprintf(’ %2.0f ’,m) s]) end

Resultatet f¨or integralen av sinus mellan 0 och π/2 ser ut s˚a h¨ar:

(17)

m QNC(m) fel felgr¨ans 2 0.7853981633974483 2.146e-001 3.230e-001 3 1.0022798774922104 2.280e-003 3.321e-003 4 1.0010049233142790 1.005e-003 1.476e-003 5 0.9999915654729928 8.435e-006 1.219e-005 6 0.9999952613861668 4.739e-006 6.867e-006 7 1.0000000258372352 2.584e-008 3.714e-008 8 1.0000000158229038 1.582e-008 2.277e-008

Felet i kvadraturegeln ¨ar beroende av l¨angden p˚a intervallet, som vi sett. Vi minskar d¨arf¨or p˚a felet, om vi kan minska p˚a intervall¨angden. Detta ˚astadkoms genom att dela intervallet [a, b] i delintervall. Om vi antar att a = z1 < z2 < · · · < zn+1 = b, s˚a kan integralen ber¨aknas som en summa av integraler, tagna ¨over delintervallen:

Z b a

f (x)dx =

n

X

i=1

Z zi+1

zi

f (x)dx.

(18)

Om vi till¨ampar Q(m)N C p˚a var och en av delintegralerna, s˚a f˚ar vi en sammansatt kvadraturregel. Om t.ex.

i = zi+1 − zi och z

i+1 2

= (zi + zi+1)/2, i = 1 : m, s˚a g¨aller

Q =

n

X

i=1

i 6



f (zi) + 4f (z

i+1 2

) + f (zi+1)

 .

Om z ¨ar en MATLAB–vektor, som inneh˚aller delningspunkterna i [a, b], och fname ¨ar en str¨ang, som inneh˚aller namnet p˚a en funktion, s˚a kommer MATLAB–programfragmentet

I = 0

for i=1:length(z)-1

I = I + qnc(fname,z(i),z(i+1),m);

end

att ge I v¨ardet av en sammansatt m–punkters Newton-Cotes approximation till integralen, som baserar sig p˚a delningspunkterna i z. Man kan ocks˚a v¨alja delningspunkterna p˚a ett mera automatiskt s¨att. Detta utnyttjas vid adaptiv kvadratur, d¨ar delningspunkterna v¨aljs t¨atare, d˚a funktionen varierar snabbare, och glesare, d˚a funktionen varierar l˚angsammare (se t.ex. MATLAB–procedurerna quad och quadl).

(19)

I Gauss kvadratur v¨aljs abskissorna p˚a ett s˚adant s¨att, att regeln blir exakt f¨or polynom av st¨orsta m¨ojliga gradtal. Som ett exempel skall vi best¨amma vikterna och abskissorna s˚a att formeln

w1f (x1) + w2f (x2) = Z 1

−1

f (x)dx

¨ar exakt f¨or polynom av gradtalet 3 eller mindre. Genom att kr¨ava att regeln skall st¨amma exakt f¨or de fyra funktionerna 1, x, x2, x3 f˚ar vi fyra ekvationer med fyra obekanta (jfr v˚ar ber¨akning av vikterna i en trepunkters Newton-Cotesregel):

w1 + w2 = 2 w1x1 + w2x2 = 0 w1x21 + w2x22 = 2 3

w1x31 + w2x32 = 0. (5)

Detta ekvationssystem kan l¨osas genom att man multiplicerar den andra ekvationen medx21 och subtraherar den fr˚an den fj¨arde ekvationen. Vi f˚ar d˚a w2x2(x12 − x22) = 0, varav f¨oljer x2 = −x1. Av den andra ekvationen f¨oljer d˚a w1 = w2, vilket i kombination med den f¨orsta ekvationen leder till w1 = w2 = 1.

(20)

Den tredje ekvationen ger x21 = 1/3, varav f¨oljer x1 = −1/√

3 och x2 = 1/√

3. Vi finner slutligen Z 1

−1

f (x)dx ≈ f (−1/√

3) + f (1/√ 3), vilket kallas tv˚apunkters Gauss–Legendre regeln.

En m-punkters Gauss–Legendre regel har formen

Q(m)GL = w1f (x1) + · · · + wmf (xm),

d¨ar vikterna och abskissorna valts s˚a, att regeln ¨ar exakt f¨or polynom av gradtalet 2m − 1.

H¨arnedan visas en MATLAB–rutin, som ger vikter och abskissor f¨or upptill 4 punkters Gauss–Legendre regler:

function [w,x] = wgl(m);

%

% Invariabel:

% m heltal som uppfyller villkoret 2 <= m <= 4

%

% Utvariabler:

% w kolumnvektor med m element som inneh˚aller vikterna f¨or

(21)

% en m-punkters Gauss-Legendre regel.

% x en kolumnvektor med m element som inneh˚aller abskissorna

% or en m-punkters Gauss-Legendre regel.

%

w = ones(m,1);

x = ones(m,1);

if m==2

w(1) = 1.000000000000000; w(2) = w(1);

x(1) = -0.577350269189626; x(2) = -x(1);

elseif m==3

w(1) = 0.555555555555558; w(3) = w(1);

w(2) = 0.888888888888889;

x(1) = -0.774596669241483; x(3) = -x(1);

x(2) = 0.000000000000000;

elseif m==4

w(1) = 0.347854845137454; w(4) = w(1);

w(2) = 0.652145154862546; w(3) = w(2);

x(1) = -0.861136311594053; x(4) = -x(1);

x(2) = -0.339981043584856; x(3) = -x(2);

end;

References

Related documents

Eftersom planet g(x, y, z) = 3x+2y−z = 10 inte har n˚agra kantpunkter eller singul¨ara punkter (d¨ar gradienten ∇g ¨ar nollvektorn) s˚a antar f sina lokala extremv¨arden i

Så om vi har hittat en primitiv funktion F x till f x så skiljer sig alla andra primitiva funktioner från denna enbart med en konstant.. Om f x är en kontinuerlig funktion har

En kalibrering av kapacitansm¨ataren skulle kunna avsl¨oja om vi skall skylla p˚a m¨ataren eller

(Ledning: G¨ or ett l¨ ampligt variabelbyte, utnyttja sedan symmetri hos integranden med avseende p˚ a integrationsomr˚ adet och bilda en l¨ amplig utt¨ ommande f¨

[r]

(b) Antalet olycksfall under en m˚ anad vid en industri antas vara P oisson(λ)−f¨ ordelad.. Ber¨ akna ML-estimatet

[r]

[r]