48
Endimensionell analys Robert Söderlund Leif Persson Karl Larsson Robert Johansson Mats Bodin Institutionen för matematik och matematisk statistik Umeå universitet 6 november 2014

Endimensionell analys - umu.se

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Endimensionell analys - umu.se

Endimensionell analys

Robert SöderlundLeif PerssonKarl Larsson

Robert JohanssonMats Bodin

Institutionen för matematikoch matematisk statistik

Umeå universitet

6 november 2014

Page 2: Endimensionell analys - umu.se

ii

Page 3: Endimensionell analys - umu.se

Innehåll

I Endimensionell analys 1 1

1 Repetition 31.1 Inbyggda funktioner i matlab . . . . . . . . . . . . . . . . . . . 3

Övningar till avsnitt 1.1 . . . . . . . . . . . . . . . . . . . . . . . 51.2 M-filer i matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Övningar till avsnitt 1.2 . . . . . . . . . . . . . . . . . . . . . . . 81.3 Filer med datapunkter . . . . . . . . . . . . . . . . . . . . . . . . 8

Övningar till avsnitt 1.3 . . . . . . . . . . . . . . . . . . . . . . . 101.4 Mer om M-filer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Övningar till avsnitt 1.4 . . . . . . . . . . . . . . . . . . . . . . . 12

2 Bisektionsalgoritmen 132.1 Bisektionsalgoritmen . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.1.1 Tolerans . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.1.2 Flyttal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Övningar till avsnitt 2.1 . . . . . . . . . . . . . . . . . . . . . . . 16

2.2 Inversa funktioner . . . . . . . . . . . . . . . . . . . . . . . . . . 17Övningar till avsnitt 2.2 . . . . . . . . . . . . . . . . . . . . . . . 17

3 Numerisk derivata 193.1 Numerisk derivata . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Övningar till avsnitt 3.1 . . . . . . . . . . . . . . . . . . . . . . . 20

4 Fixpunktsiterering 214.1 Lipschitzkontinuitet . . . . . . . . . . . . . . . . . . . . . . . . . 21

Övningar till avsnitt 4.1 . . . . . . . . . . . . . . . . . . . . . . . 224.2 Fixpunktsmetoden . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Övningar till avsnitt 4.2 . . . . . . . . . . . . . . . . . . . . . . . 264.3 Newtons metod och Linjär approximation . . . . . . . . . . . . . 26

Övningar till avsnitt 4.3 . . . . . . . . . . . . . . . . . . . . . . . 29

II Svar till uppgifter 31

Endimensionell analys 1 33Svar till övningar för kapitel 1 . . . . . . . . . . . . . . . . . . . . . . . 33Svar till övningar för kapitel 2 . . . . . . . . . . . . . . . . . . . . . . . 35Svar till övningar för kapitel 3 . . . . . . . . . . . . . . . . . . . . . . . 36

iii

Page 4: Endimensionell analys - umu.se

iv INNEHÅLL

Svar till övningar för kapitel 4 . . . . . . . . . . . . . . . . . . . . . . . 37

Page 5: Endimensionell analys - umu.se

Del I

Endimensionell analys 1

1

Page 6: Endimensionell analys - umu.se
Page 7: Endimensionell analys - umu.se

Kapitel 1

Repetition - matlab

I detta kompendium går vi igenom grundläggande metoder för att använda da-torn som beräkningsverktyg. Vi har valt att göra alla beräkningar i språketmatlab. Detta språk är förhållandevis lätt att lära sig och det har ett riktutbud av inbyggda funktioner för att göra beräkningar. Det finns många pro-grammeringsspråk som ger snabbare och mer effektiva lösningar men ofta tillpriset av att det blir mer komplicerat att skriva det program som utför be-räkningen. En annan styrka hos matlab är att det har mycket bra inbyggdaverktyg för att rita grafer och visualisera resultatet av beräkningar, man behöverinte installera och konfigurera separata program för grafiken. Man kan säga attdetta val av verktyg ger goda förutsättningar för att fokusera på den matema-tiska problemlösningen istället för programmeringsdetaljer och installation avmjukvara. matlab finns i institutionens datorlab och du kommer få möjlighetatt installera programmet på en egen dator. Vi kommer förutsätta att läsarentidigare har sett grundläggande programmeringskonstruktioner som loopar ochvillkorssatser i något annat programmeringsspråk exempelvis C/C++, Pythoneller Java. Inledningsvis kommer vi inkludera uppgifter och exempel som vidbehov kan fungera som repetition.

Det finns fria alternativ till matlab, ett exempel är programmet Octavesom är mycket likt matlab men som i skrivande stund inte går att köra di-rekt under operativsystemet Windows1. Ett annat alternativ som är helt frittoch som går att använda på de flesta operativsystemen är programmet Sage.Sage använder programmeringsspråket Python för att koordinera matematiskaberäkningar inom olika områden med hjälp av ett antal specialiserade programsom ingår i själva installationen av Sage.

1.1 Inbyggda funktioner i matlabIdén att koppla ekvationer och funktioner till grafer i koordinatsystem är enav de allra viktigaste i matematiken. Vi ska börja med att gå igenom hur manrepresenterar matematiska funktioner i matlab och ritar deras grafer. Vi kom-mer ibland använda termen plotta en graf istället för att rita en graf. De flestafunktioner som du har träffat på under dina matematikstudier finns inbyggda imatlab, i tabell 1.1 ger vi några exempel på dem.

1Det ska dock gå om man installerat programmet Cygwin.

3

Page 8: Endimensionell analys - umu.se

4 KAPITEL 1. REPETITION

matematiskt matlabex exp(x)

sin(x) sin(x)

cos(x) cos(x)

tan(x) tan(x)

ln(x) log(x)

arcsin(x) asin(x)

arccos(x) acos(x)

arctan(x) atan(x)

Tabell 1.1: Förteckning över några inbyggda matlab-funktioner.

Exempel 1.1. Vi ritar grafen till f(x) = x sin(x) på intervallet 0 ≤ x ≤ 8π.Notera att matlab inte genererar ett vanligt koordinatsystem utan istället ettfönster med koordinaterna angivna längst med kanterna. Man får i regel inteorigo i mitten av bilden vilket kan ta ett tag att vänja sig vid. Vi ska snart seexempel på hur man kan styra vilket område som visas när man plottar.

Här har vi använt följande matlab-kod för att rita grafen.

x=0:0.1:8*pi;y=x.*sin(x);plot(x,y)

Vi skapar först en lista x med x-koordinater från startvärdet 0 till slutvärdet8π så att avståndet mellan punkterna ökar med 0.1 hela tiden (totalt 252 punk-ter). Sedan räknar vi ut en lista med motsvarande y-värden och avslutningsvisplottar vi med kommandot plot. En sak som är bra att lägga märke till är attvi inte använder en asterix (*) som gångertecken utan istället kombinationen aven punkt och en asterix: x.*sin(x). En förklaring till detta kommer ges senarenär du börjar använda matlab på en kurs i linjär algebra.

N

Page 9: Endimensionell analys - umu.se

1.2. M-FILER I MATLAB 5

Övningar till avsnitt 1.1

1. Rita grafen tillf(x) = ln(x)

på intervallet 0.5 ≤ x ≤ 8 med matlab.

2. Rita grafen tillf(x) = (x− 1)(x− 2)(x− 3)

på intervallet 0 ≤ x ≤ 4 med matlab.

3. Rita grafen till

f(x) = sin(x) + 13 sin(3x) + 1

5 sin(5x)

på intervallet −4π ≤ x ≤ 4π med matlab.

4. Rita grafen till f(x) = sin(x) och g(x) = cos(x) på intervallet −2π ≤ x ≤2π i samma koordinatsystem (läs mer om kommandot plot i matlabshjälpfunktion).

5. Rita en cirkel genom att sammanfoga den positiva och negativa lösningenför y till ekvationen x2 + y2 = 1. Visa området −2 ≤ x, y ≤ 2.

6. Rita en enhetscirkel genom att använda definitionen av sinus och cosinus,d.v.s. att punkterna på cirkeln ges av (cos(t), sin(t)) för 0 ≤ t ≤ 2π. Visaområdet −2 ≤ x, y ≤ 2 (läs om kommandot axis i matlabs hjälpfunk-tion).

7. Läs om funktionen floor i matlabs hjälp och plotta sedan grafen tillfunktionen på intervallet 0 ≤ x ≤ 10. Se till att antalet punkter är tillräck-ligt många för att grafen ska se korrekt ut, d.v.s. välj en liten steglängd.

8. Rita grafen tillf(x) = (x+ 4)(x− 2)(x− 4)

Se till att alla tre nollställen kommer med i plotten.

9. Läs om kommandot grid och hold on. Lägg sedan till stödlinjer i före-gående uppgift.

1.2 M-filer i matlabDe inbyggda funktionerna räcker i regel inte till för att uttrycka allt som manbehöver i matematiska modeller.

Exempel 1.2. Som exempel ska vi ta grafen i följande figur.

Page 10: Endimensionell analys - umu.se

6 KAPITEL 1. REPETITION

Funktionen är definierad styckvis på intervallet [−2, 2] och dess komplement:

f(x) ={

1, −2 ≤ x ≤ 20, för övrigt.

För att få bättre kontroll över vad som kan uttryckas med matlab ska vianvända själva programmeringsspråket i matlab. Funktionen i exemplet kanskrivas på följande vis:

function y=f(x)

if (−2 ≤ x && x ≤ 2)y = 1;

elsey = 0;

end

Programmet ovan är en s.k. M-fil (matlab-fil). Första raden

function y = f(x)

anger att vi har en funktion med indata x och utdata y. På rad fyra ges y värdet1 om −2 ≤ x ≤ 2. På rad sex får y värdet 0 om x ≤ −2 eller 2 ≤ x. På radsju avslutas villkorssatsen if. För att rita grafen i detta exempel på intervallet[−5, 5] kan vi använda kommandot fplot.

>> fplot(@f,[−5,5])>> axis([−5 5 −1 2])

Tecknet @ ger en referens (s.k. handtag2) till M-filen och kommandot axisställer in plot-fönstret så att −5 ≤ x ≤ 5 och −1 ≤ y ≤ 2. Man kan också skrivaom M-filen så att den tar en lista x som indata och returnerar en lista y iställetför att att ta ett enda tal x som indata och ge ett enda tal y som utdata.

2Jämför med en pekare till en funktion i C.

Page 11: Endimensionell analys - umu.se

1.2. M-FILER I MATLAB 7

Listing 1.1: En graf ritad med matlab.function y=fvect(x)

y=zeros(size(x));for i=1:length(x)

if (−2 ≤ x(i) && x(i) ≤ 2)y(i) = 1;

endend

I detta fall ritar vi istället grafen direkt med kommandot plot.

>> x=−5:0.1:5;>> plot(x,fvect(x))>> axis([−5 5 −1 2])

N

Om du känner dig osäker på hur dessa M-filer fungerar så bör du antingenbe din lärare om hjälp eller läsa mer om kommandona i matlabs hjälpfunktion.

Exempel 1.3. Vi tar ett exempel till där vi använder en s.k. for-loop för attplotta grafen till funktionen

f(x) = cos(x) + 13 cos(3x) + 1

5 cos(5x) + ...+ 119 cos(19x).

på intervallet −6π ≤ x ≤ 6π. matlab-koden kan skrivas på följande sätt.

x=−6*pi:0.1:6*pi;y=zeros(size(x));for n=1:10,

y = y + 1/(2*n−1).*cos((2*n−1)*x);endplot(x, y)

N

Page 12: Endimensionell analys - umu.se

8 KAPITEL 1. REPETITION

Övningar till avsnitt 1.21. Skriv en M-fil som ritar grafen till

f(x) = sin(x) + 13 sin(3x) + 1

5 sin(5x) + ...+ 145 sin(45x)

på intervallet −4π ≤ x ≤ 4π.

1.3 Filer med datapunkterEtt tredje sätt att representera en funktion på är genom att man helt enkeltskriver ner koordinaterna för ett stort antal punkter som ligger på funktionensgraf, exempelvis i en textfil. Filen är förstås inte en funktion i matematiskmening men det är i praktiken ett ganska vanligt sätt att beskriva ett sambandmellan två variabler på.

Exempel 1.4. Som exempel ska vi ta följande textfil som vi gett namnetpunkter.txt.

Listing 1.2: En textfil med namnet punkter.txt.0.0 1.00.314 0.9510.628 0.8090.942 0.5881.257 0.3091.571 −0.01.885 −0.3092.199 −0.5882.513 −0.8092.827 −0.9513.142 −1.03.456 −0.9513.77 −0.8094.084 −0.5884.398 −0.3094.712 −0.05.027 0.3095.341 0.5885.655 0.8095.969 0.951

I matlab är det enkelt att läsa in punkterna från filen om man använderverktyget för att importera data som finns i matlabs programmeny. Om mangör det kommer man få punkterna i en s.k. matris (dubbellista) som man kanse om man skriver filnamnet >> punkter på kommandoraden.

>> punkter

punkter =

0 1.00000.3140 0.95100.6280 0.80900.9420 0.5880

Page 13: Endimensionell analys - umu.se

1.3. FILER MED DATAPUNKTER 9

1.2570 0.30901.5710 01.8850 −0.30902.1990 −0.58802.5130 −0.80902.8270 −0.95103.1420 −1.00003.4560 −0.95103.7700 −0.80904.0840 −0.58804.3980 −0.30904.7120 05.0270 0.30905.3410 0.58805.6550 0.80905.9690 0.9510

Om vi nu vill plotta x-värden mot y-värden så kan vi göra som i följandeexempel.

>> x=punkter(:,1);>> y=punkter(:,2);>> plot(x,y,'o−')

Här betyder kommandot punkter(:, 1) att vi tar ut den första kolumnenav värden ur datamängden punkter. Kolontecknet kan man se som att radnum-ret är fritt att välja medans kolumnnumret är fixerat till 1. På samma sätt fårvi att punkter(:, 2) ger den andra kolumnen.

Vi har också lagt till strängen ’o-’ i plotkommandot. Ringen är den vanligabokstaven o, i strängen ger den effekten att varje datapunkt markeras med enring i grafen. Strecket som kommer direkt efter o:et är ett minustecken ochmarkerar att datapunkterna också ska förbindas med en kurva. Resultatet skabli en graf som ser ut som i detta exempel:

N

Page 14: Endimensionell analys - umu.se

10 KAPITEL 1. REPETITION

Övningar till avsnitt 1.31. Öppna en ny textfil som du ger namnet punkter.txt. Skriv in värden i

filen enligt följande:

1.0000 0−0.8090 0.58780.3090 −0.95110.3090 0.9511

−0.8090 −0.58781.0000 0

Importera filen till matlab och plotta första kolumnens värden mot denandra kolumnens.

2. Plotta figuren i uppgiften ovan igen men markera nu alla datapunkter meden ring.

1.4 Mer om M-filerI de föregående avsnitten har vi sett exempel på några M-filer som fungerarungefär som matematiska funktioner. Vi ska nu titta på några exempel därvi låter en M-fil ta en funktion f som indata. Detta är något som kommerbehövas senare i kursen. I själva verket skickar vi inte en hel funktion till M-filen utan bara en referens till den. I matlab kan man göra detta med s.k.funktionshandtag (function handle). Om vi vill skicka funktionen

f(x) = x2 − 1

så kan vi göra följande definition på kommandoraden: f=@(x)x.^2 − 1;. No-tera hur vi använder @-tecknet följt av parenteser runt variabeln x, och sedankommer själva funktionsuttrycket. Nu fungerar f som en referens till funktionenf(x) = x2 − 1 och vi kan använda f som vilken inbyggd matlab-funktion somhelst. Testa följande på matlabs kommandorad:

>> f = @(x)x.^2 − 1;>> x = 0:1:4>> f(x)

Exempel 1.5. Vi skriver en M-fil som tar en funktion f samt fyra tal a, b, c, doch s som indata. M-filen ska göra följande:

• Plotta funktionen f på intervallet [a, b] med steglängden s.

• Plotten ska visa funktionsvärden i intervallet [c, d].

• Markera det största funktionsvärdet med en ring.

Vi kallar M-filen max_plot och skriver specifikationen lite mer matlab-orienteratpå följande sätt.

Page 15: Endimensionell analys - umu.se

1.4. MER OM M-FILER 11

1 function [x, y] = max_plot(f, a, b, c, d, s)2 %3 % −−− Input −−−4 % f : function handle for function y=f(x)5 % a : lower x − limit for plot range6 % b : upper x − limit for plot range7 % c : lower y − limit for plot range8 % d : upper y − limit for plot range9 % s : step size for plotting

10 %11 % −−− Output −−−12 % [x, y] : coordinate (x, y) for the maximum of f.13 % A plot of f on the interval [a, b] with step size s and14 % function values in the range [c, d]. Furthermore the maximum15 % should be marked with a ring.16 %

Notera att denna funktion returnerar två numeriska värden; x-koordinaten ochy-koordinaten för maximumpunkten. Vi använder de inbyggda matlab-funktionernamax och plot för att lösa uppgiften.

1 function [x_max, y_max] = max_plot(f, a, b, c, d, s)23 % −−− Input −−−4 % f : function handle for function y=f(x)5 % a : lower x − limit for plot range6 % b : upper x − limit for plot range7 % c : lower y − limit for plot range8 % d : upper y − limit for plot range9 % s : step size for plotting

10 % −−− Output −−−11 % The coordinate [x_max, y_max] for the maximum of f.1213 % The interval for plotting is created.14 x = a:s:b;1516 % We put a hold on the plotting window so we can plot17 % new things without erasing the old stuff.18 hold on19 plot(x, f(x))20 axis([a b c d])2122 % The maximum y is computed and also the position i23 % of y in the list x.24 [y_max, i] = max(f(x));2526 % The corresponding x value is computed. It is positioned27 % at the i:th element in x, hence we should step i − 128 % steps of size s from the first point a.29 x_max = a + s * (i − 1);3031 % Finally we plot the maximum point.32 plot([x_max],[y_max],'o')33 end

N

Page 16: Endimensionell analys - umu.se

12 KAPITEL 1. REPETITION

Övningar till avsnitt 1.41. Skriv en M-fil som plottar grafen till y = f(x) på intervallet [a, b]. Plotten

ska i y-led omfatta ett område som är en enhet större än funktionensmaximum och en enhet mindre än dess minimum.

Page 17: Endimensionell analys - umu.se

Kapitel 2

Bisektionsalgoritmen

I detta kapitel ska vi använda en algoritm för att hitta rötter till ekvationer påformen f(x) = 0 där f är en kontinuerlig funktion.

2.1 BisektionsalgoritmenVi ska använda bisektionsalgoritmen, eller intervallhalveringsmetoden som denockså kallas. Metoden bygger på en mycket enkel princip för kontinuerliga funk-tioner: Om vi för två olika x-värden, x = a och x = b, ser att f(a) och f(b)har olika tecken så vet vi enligt satsen om mellanliggande värden att det finnsminst ett x ∈ [a, b] så att f(x) = 0. Vi delar sedan intervallet i mitten m = a+b

2och antingen är f(m) = 0 eller så identifierar ett delintervall [a,m] eller [m, b]där f(x) också har olika tecken i delintervallets ändpunkter. Därmed vet viatt det finns en lösning inom detta intervall som är hälften så stort som vårtursprungliga intervall [a, b]. Genom att återupprepa denna procedur kan vi fin-na ett godtyckligt litet delintervall inom vilket en exakt lösning existerar. Viillustrerar detta med ett exempel.Exempel 2.1. Kvadratroten ur två,

√2, är den positiva lösningen till ekvatio-

nen x2 = 2. Genom att välja

f(x) = x2 − 2 (2.1)

kan vi applicera ovanstående resonemang för att beräkna ett värde på√

2. Vinoterar att f(1) = −1 och f(2) = 2 har olika tecken. Eftersom f(x) är konti-nuerlig vet vi från satsen om mellanliggande värden att det finns en lösning tillf(x) = 0 i intervallet [1, 2]. Vi testar nu även mittpunkten x = 1.5 i intervalletoch får f(1.5) = 0.25. Eftersom f(1) = −1 och f(1.5) = 0.25 har olika teckenså vet vi att det finns en lösning till f(x) = 0 i intervallet [1, 1.5]. Om vi nufortsätter att halvera intervallet så får vi följande tabell.

i xi Xi

0 1 21 1 1.52 1.25 1.53 1.375 1.54 1.375 1.43755 1.40625 1.4375

13

Page 18: Endimensionell analys - umu.se

14 KAPITEL 2. BISEKTIONSALGORITMEN

Om vi jämför denna tabell med matlab-implementationen sqrt(2)= 1.414213562373095

, så kan vi notera att, precis som väntat, så innesluter [xi, Xi] detta värde i ettallt snävare intervall. Notera dock att även matlabs implementation är approx-imativ och har en precision på ungefär 16 decimaler. Vi ska beskriva en algoritmsom gör ovanstående beräkning tills en viss toleransnivå på precisionen har upp-nåtts. Ett sätt att kontrollera noggrannheten hos den beräknade roten är attmäta intervallets längd |Xi − xi| och fortsatta intervallhalveringen så länge detär för stort. Exempelvis så länge |Xi − xi| är större än ett tal TOL. N

Med pseudokod kan kan vi skriva bisektionsalgoritmen på följande vis:

Algoritm 2.1 Bisektionsalgoritmen i pseudokodRequire: f(x) continuous on [a, b] and f(a)f(b) < 0 (different signs at the end-points)x0 := aX0 := bi := 0while |xi −Xi| ≥ TOL dom := (xi +Xi)/2if f(m) = 0 thenxi+1 := mXi+1 := m

else if f(m)f(xi) < 0 thenxi+1 := xiXi+1 := m

else if f(m)f(Xi) < 0 thenxi+1 := mXi+1 := Xi

end ifi := i+ 1

end while

Vid en implementation av algoritm 2.1 vill man typiskt även inkludera engräns på maximalt antal iterationer så att vi inte hamnar i en evig loop, detkan exempelvis hända om toleransen TOL sätts till noll. Notera att bisektionsal-goritmen, som den är formulerad ovan, endast ger en lösning även om det skullefinnas flera rötter inom det ursprungliga intervallet.

2.1.1 ToleransEn viktig fråga att besvara är hur många gånger man behöver upprepa inter-vallhalveringen för att uppnå en given toleransnivå. Antalet upprepningar gerju ett mått på hur lång tid det tar att lösa ekvationen f(x) = 0 med bisek-tionsalgoritmen. I många fall går det mycket fort att få flera decimaler rättmen det kan ändå vara otillräckligt om ekvationslösningen är del i ett störreprogram. Ekvationen kanske måste lösas tusentals gånger på mycket kort tid.Genom bisektionsalgoritmens konstruktion vet vi att längden av det intervallsom innehåller lösningen halveras i varje iteration och därmed kan skrivas som

|xi −Xi| = |b− a|2−i (2.2)

där [a, b] är det ursprungliga intervallet.

Page 19: Endimensionell analys - umu.se

2.1. BISEKTIONSALGORITMEN 15

Om vi vill garantera att vår lösning ligger inom ett intervall som är mindreän en given tolerans TOL så kan vi notera att

|xi −Xi| < TOL ⇔ |b− a|2−i < TOL . (2.3)

Genom att välja ett i så att |b − a|2−i < TOL kan vi alltså garantera denönskade toleransen.Exempel 2.2. Säg att vi vill beräkna

√2 med en felmarginal som är högst 10−9.

Det innebär att vi kan välja TOL ≤ 10−9. Givet att vi använder samma metodoch startintervall som i exempel 2.1 kan vi nu beräkna hur många iterationervi behöver för att få det önskade resultatet.

Om vi nu väljer TOL = 10−9 så har vi från (2.3) att

|2− 1|2−i < 10−9 ⇔ i > 9 log2(10) ≈ 29.897 (2.4)

Därmed kommer iterationerna avslutas vid i = 30. Bisektionsalgoritmen ger ef-ter 30 iterationer intervallet [1.414213561452925 1.414213562384248] därgränserna helt riktigt har ett fel som är mindre än 10−9. Notera att vi kundevälja en något större tolerans om vi istället tog mittpunkten för det sista inter-vallet som vår approximation, felet skulle då bli högst 1

2 |2−1|2−i vilket innebäratt vi får ett mindre fel. N

2.1.2 FlyttalNär vi gör beräkningar i matlab går det vanligtvis bra att betrakta talen viräknar med som reella tal. I datorn lagras dock tal med ett fixt antal ettor ochnollor i så kallad flyttalsrepresentation. Detta innebär exempelvis att det finnsett största och ett minsta tal samt att bara vissa reella tal kan representerasexakt. Man kan lite vagt säga att i en normal dator med dagens prestanda kanman representera tal med ungefär 16 decimalers noggranhet om man användervanliga flyttal. Typiskt är detta inget vi behöver tänka på, men i vissa fall,exempelvis om vi vill jämföra om två flyttal är lika så måste vi tänka till.Betrakta följande exempel:Exempel 2.3. För summan a =

∑10i=1 0.1 kan vi direkt dra slutsatsen att

a = 1. Vi gör detta i matlab med följande programrader där vi med sistaraden kontrollerar om a = 1 med hjälp av matlab-operatorn ==.

1 a = 0;2 for i = 1:103 a = a + 0.1;4 end5 a == 1 % gives 1 if equal and 0 otherwise

Resultatet av att köra denna kod blir dock något överraskande ans = 0, dvsatt a 6= 1. Orsaken är att datorns flyttalsrepresentation inte kan representeratalet 0.1 exakt, vilket i sin tur betyder att a+ a+ a+ a+ a+ a+ a+ a+ a+ ainte blir exakt 1. Med detta i åtanke är det bättre att istället kontrollera omskillnaden mellan två flyttal är mindre än ett mycket litet tal. Därför kan viersätta den sista raden med abs(a − 1)< eps.

Kommandot eps returnerar datorns maskinprecision, dvs avståndet mellantvå efterföljande flyttal som kan representeras i datorn. För decimaltal utanheltalsdel, exempelvis x = 0.12345 är eps = 2.2204e−016. N

Page 20: Endimensionell analys - umu.se

16 KAPITEL 2. BISEKTIONSALGORITMEN

Övningar till avsnitt 2.1

1. Skapa matlab-filen bisection.m och implementera bisektionsalgoritmenmed följande funktionshuvud:

1 % Find root of f(x)=0 using bisection2 % −−− Input −−−3 % f : function handle for function f(x)4 % I : I=[a,b] where a and b define the start interval5 % TOL : tolerance6 % −−− Output −−−7 % X : interval for root of f(x)=08 function [x,X] = bisection(f,I,TOL)

2. Skapa den anonyma matlab-funktionen fkn1 = @(x)x^2 − 2 och tes-ta med algoritmen från föregående uppgift om du kan få fram sammanumeriska värde som i exempel 2.2. Anropet kan göras på följande sätt:

1 >> fkn1 = @(x) x^2 − 22 >> [x,X]=bisection(fkn1,[1 2],10^(−9))

Tips: Eftersom du behöver kunna se fler än fyra decimaler när du löserdessa övningar så skriv in följande kommando i matlabs terminalfönster.>> format long

3. Använd bisektionsalgoritmen för att bestämma alla rötter till följandeekvationer. (Tips: Skriv om ekvationerna på formen f(x) = 0. Lagra dessai form av anonym funktioner eller som funktionsfiler. Plotta först varjefunktion för att få en uppfattning om var rötterna finns.)

(a) x2 = 2(b) x4 = 2(c) x2 + x− 6 = 0

(d) sin(x) = 0, x ∈ [1, 10]

(e) x3 = x2

4. Skapa en variant av din bisektionskod som du döper till bisection2.m.Koden ska returnera en matris där varje rad motsvarar en iteration ochinnehåller intervallet i vilken roten kan ligga. Bekräfta sedan att du kanreproducera tabellen i exempel 2.1 med denna kod.

1 % Find root of f(x) using bisection2 % −−− Input −−−3 % f : function handle for function y=f(x)4 % I : I=[a,b] where a and b define start interval5 % TOL : tolerance6 % −−− Output −−−7 % XX : matrix where each row i is the interval [x,X] for8 % root at iteration i.9 function XX=bisection2(f,I,TOL)

Page 21: Endimensionell analys - umu.se

2.2. INVERSA FUNKTIONER 17

2.2 Inversa funktionerEn funktion är ett-till-ett på ett intervall I om g(x1) = g(x2) medför att x1 = x2för alla x1, x2 ∈ I. Detta är ett nödvändigt och tillräckligt villkor för att enfunktion f ska ha en invers f−1 på intervallet I. Man kan använda bisektionsal-goritmen för att beräkna funktionsvärden för inversen. Antag att vi vill beräknay = f−1(x) för något tal x. Enligt definitionen av invers funktion kan vi skrivaom detta som ekvationen x = f(y) där y är den okända variabeln. Denna ek-vation kan vi sedan skriva om på formen f(y) − x = 0 vilket motsvarar att viska lösa g(y) = 0 där g(y) = f(y)− x. Vi har alltså omvandlat beräkningen avy = f−1(x) till att lösa en ekvation av typen g(y) = 0. Den senare kan vi lösamed hjälp av bisektionsalgoritmen.

Exempel 2.4. Låt f(x) = x3 + x+ 1 och beräkna y = f−1(2). Man kan förstnotera att f ′(x) = x2 + 1 > 0 för alla x så f är strikt växande, vilket i sintur innebär att den måste vara ett-till-ett och alltså inverterbar. Vi skriver omekvationen på formen f(y) = 2, d.v.s. y3 + y− 1 = 0. Om vi kallar vänsterledetför g(y). Så kan vi notera att g är kontinuerlig, g(0) = −1 och g(1) = 1. Satsenom mellanliggande värde garanterar då en rot i intervallet (0, 1). En rot som vikan beräkna med bisektionsalgoritmen till y = 0.682328. Vi kan sedan verifieragenom att beräkna f(0.682328) = 2.0000004701681515 ≈ 2. N

Övningar till avsnitt 2.21. Använd din m-fil för bisektionsalgoritmen för att lösa ekvationen f(x) = y

där y är ett givet tal. Testa när f ges av f = @(x)x.^2 + x och y = 5.

2. Applicera din lösning till ovanstående uppgift för att plotta inversen tillföljande funktioner på ett lämpligt intervall:

(a) f(x) = x2

(b) f(x) =√

2(c) f(x) = sin(x)(d) f(x) = ex

3. Skapa en vektor x med x-värden på ett lämpligt intervall samt en vektory med y-värden för någon av funktionerna i uppgiften ovan. Plotta medkommandot plot(x,y) samt plot(y,x) så att de hamnar i samma figur.Jämför med plottarna från föregående uppgift. (Tips: Du kan användamatlab-kommandot hold on för att en tidigare plot inte ska försvinnanär man plottar igen i samma figur.)

Page 22: Endimensionell analys - umu.se

18 KAPITEL 2. BISEKTIONSALGORITMEN

Page 23: Endimensionell analys - umu.se

Kapitel 3

Numerisk derivata

3.1 Numerisk derivataDerivatan till en funktion f(x) i punkten där x = a definieras av gränsvärdet

f ′(a) = limh→0

f(a+ h)− f(a)h

. (3.1)

Om gränsvärdet existerar säger vi att f är deriverbar i punkten x = a. Fråndetta kan vi dra slutsatsen att om vi väljer ett tillräckligt litet h så kan viapproximera f ′(a) med differenskvoten

f ′(a) ≈ f(a+ h)− f(a)h

. (3.2)

Vi kallar detta uttryck för en numerisk derivata. Notera att uttrycket inte in-nehåller ett gränsvärde. Frågan om vad som menas med ett tillräckligt litet htar vi inte upp här utan hänvisar till en kurs i numeriska metoder.

Exempel 3.1. Vi kan nu skriva en m-fil i matlab som beräknar den numeriskaderivatan.

1 %Computes an approximate value of f'(a)2 %dfdx = approximate value of the derivative3 %f = function handle to function f(x)4 %a = value at which the derivative is computed5 %h = length of the small value over which the derivative is ...

approximated6 function dfdx=num_deriv(f,a,h)78 dfdx=(f(a+h)−f(a))/h;

Sätter vi nu f(x) = x2 kan vi enkelt beräkna ett approximativt numerisktvärde till f ′(2) på kommandoraden genom att skriva

1 >> dfdx=num_deriv(@f,2,0.01)23 dfdx =45 4.0100

19

Page 24: Endimensionell analys - umu.se

20 KAPITEL 3. NUMERISK DERIVATA

vilket kan jämföras med det exakta värdet f ′(2) = 4. N

När vi beräknar approximativa numeriska värden för en derivata kan vi ävenanvända oss av en annan differenskvot

f ′(a) ≈ f(a)− f(a− h)h

(3.3)

Här använder vi istället punkten a − h som ligger före (eller bakom) punktenx på tallinjen. Vi säger att det är en bakåt differenskvot tillskillnad från detförsta exemplet (3.2) som var en framåt differenskvot (eftersom vi utnyttjarinformation om funktionen som ligger framför värdet x = a). Det finns också encentrerad differenskvot

f ′(a) ≈ f(a+ h)− f(a− h)2h . (3.4)

Notera att avstående mellan punkterna är (a+h)−(a−h) = 2h, så vi ska alltsådela med 2h i detta fall.

Övningar till avsnitt 3.11. Skriv två m-filer num_deriv_backward.m och num_deriv_center.m, som

givet f , a och h beräknar f ′(a) numeriskt med hjälp av differenskvoterna(3.3) och (3.4).

2. Betrakta f(x) = x3 + 3x − 3. Bestäm ett numeriskt värde på f ′(2) medhjälp av centrerad differenskvot och ett värde på h som ger minst trekorrekta decimaler.

3. Studera funktionen f(x) =√x och bestäm ett numeriskt värde på f ′(0)

med framåt differenskvot (3.2) och ett valfritt värde på h.

4. Studera funktionen f(x) =√x igen och ta fram numeriska värden på f ′(0)

för h = 10−2, 10−3, 10−4, 10−5. Studera resultatet i tabellform. Vad kandu dra för slutsatser?

5. Bestäm tangenten till funktionen f(x) =√x + x/4 i punkten (4, 3) och

plotta tangenten och f(x) på intervallet [0, 8] i samma figur. Ledning: Dukan bestämma lutningen hos tangenten genom att beräkna f ′(4) exakteller numeriskt.

6. Studera funktionen f(x) = 2.7183x, beräkna f ′(3) numeriskt och jämförmed värdet f(3).

Page 25: Endimensionell analys - umu.se

Kapitel 4

Fixpunktsiterering

4.1 LipschitzkontinuitetFör att en funktion ska vara kontinuerlig i punkten där x = y måste det gälla attf(y) = limx→y f(x). Enligt definitionen av gränsvärden gäller då att vi kan hittaett δ > 0 så att |x− y| < δ ⇒ |f(x)− f(y)| < ε för varje ε > 0. Vissa funktionerf(x) uppfyller ett ännu starkare kontinuitetsvillkor kallat Lipschitzkontinuitet,vilket vi definierar i detta avsnitt.

Definition 4.1. Funktionen f(x) är Lipschitzkontinuerlig på intervallet [a, b]med Lipschitzkonstanten L, om

|f(x)− f(y)| ≤ L|x− y|, (4.1)

är uppfyllt för alla x, y ∈ [a, b]. �

Det innebär alltså att f(x) inte skiljer sig mer från värdet f(y) än konstantenL multiplicerat med skillnaden mellan x och y om x, y ∈ [a, b]. Vi kan enkeltvisa att Lipschitzkontinuerliga funktioner även uppfyller kravet på kontinuitetenligt ε, δ-definitionen. Vi har ju nämligen att

|f(x)− f(y)| ≤ L|x− y|, (4.2)

och sätter vi då δ = ε/L, ser vi att

|x− y| < δ ⇒ |f(x)− f(y)| ≤ L|x− y| < Lδ = ε. (4.3)

Det omvända, dvs att alla kontinuerliga funktioner är Lipschitzkontinuerliga,gäller dock inte.

Om funktionen f(x) är deriverbar på ett intervall [a, b] så är det lätt attbestämma ett värde på Lipschitzkonstanten. Det räcker att bestämma det max-imala värdet på absolutbeloppet av derivatan |f ′(x)|, i intervallet. Ju snabbaref(x) växer/avtar desto mer kan f(x) potentiellt avvika från f(y) då x avvikerfrån y. Precis som att en bil potentiellt kan hinna längre från startpunkten påett givet tidsintervall om den håller högre hastighet. På samma sätt kan funktio-nen/bilen aldrig avvika mer än maximala derivatan/hastigheten multipliceratmed intervallängden från startpunkten. Vi sätter alltså

L = maxx∈[a,b]

|f ′(x)|. (4.4)

21

Page 26: Endimensionell analys - umu.se

22 KAPITEL 4. FIXPUNKTSITERERING

Notera dock att man alltid kan välja ett ännu större värde på Lipschitzkonstan-ten om man vill. Alla funktioner f(x) som är Lipschitzkontinuerliga på ett givetintervall med Lipschitzkonstanten L är såklart också Lipschitzkontinuerliga påsamma intervall med alla Lipschitzkonstanter som är större än L. Det är dockoftast fördelaktigt att kunna välja L så liten som möjligt.

Exempel 4.2. Funktionen f(x) = x är Lipschitzkontinuerlig för alla x ∈(−∞,∞), eftersom f ′(x) är begränsad för alla x ∈ (−∞,∞). Mer bestämtgäller att f ′(x) = 1 för alla x, dvs vi kan sätta L = 1 och det är ju uppenbartatt

|f(x)− f(y)| = |x− y| ≤ 1 · |x− y|. (4.5)

N

Exempel 4.3. Funktionen f(x) = x2 är inte Lipschitzkontinuerlig för allax ∈ (−∞,∞), eftersom f ′(x) = 2x växer obegränsat då x → ±∞. Funktionenf(x) = x2 är alltså ett exempel på en funktion som är kontinuerlig men ejLipschitzkontinuerlig på intervallet (−∞,∞). På alla slutna begränsade intervallx ∈ [a, b] är dock f(x) = x2 Lipschitzkontinuerlig med Lipschitzkonstanten

L = maxx∈[a,b]

|2x|. (4.6)

N

Exempel 4.4. Studera funktionen f(x) = x5−2x4+3x3−4x2+5x på intervallet[−2, 2]. Genom att utföra följande kommandon i matlab

1 >> x=−2:0.01:2;2 >> dfdx=num_deriv(@f,x,0.01);3 >> L=max(abs(dfdx))45 L =67 199.5059

får vi fram ett numeriskt värde på Lipschitzkonstanten L. N

Övningar till avsnitt 4.11. Avgör om f(x) = 3x + 9 är Lipschitzkontinuerlig eller inte på intervallen

[0, 1], [−12,∞) och (−∞,∞). Bestäm en Lipschitzkonstant för de intervalldär f(x) är Lipschitzkontinuerlig.

2. Avgör om f(x) =√x är Lipschitzkontinuerlig eller inte på intervallen

[0, 1], [1, 10] och [1,∞). Bestäm en Lipschitzkonstant för de intervall därf(x) är Lipschitzkontinuerlig.

3. Avgör om f(x) = x3 − x är Lipschitzkontinuerlig eller inte på intervallen[−10, 10], [−378, 329] och (−1,∞). Bestäm en Lipschitzkonstant för deintervall där f(x) är Lipschitzkontinuerlig.

4. Bestäm en Lipschitzkonstant, L, för funktionen

f(x) = x− x3/6 + x5/120− x7/5040

Page 27: Endimensionell analys - umu.se

4.2. FIXPUNKTSMETODEN 23

på intervallet [−π/2, π/2]. Skapa sedan funktionerna

fmin(x) = f(a)− L|x− a|

ochfmax(x) = f(a) + L|x− a|

för ett valfritt värde på a ∈ [−π/2, π/2]. Plotta sedan f(x), fmin(x) ochfmax(x) i samma figur på intervallet [−π/2, π/2] och verifiera i figurenatt

fmin(x) <= f(x) <= fmax(x).

4.2 FixpunktsmetodenFixpunktsmetoden kan användas för att beräkna lösningar till ekvationer påformen g(x) = x. De x som uppfyller g(x) = x kallas för fixpunkter till funktio-nen g(x), därav namnet fixpunktsmetoden. I likhet med bisektionsalgoritmen(algoritm 2.1) startar vi med en gissning x0 och beräknar succesivt nya värdenx1, x2, ..., xn i hopp om att xn → x då n→∞. I detta fall upprepar vi följandeberäkning:

xn+1 = g(xn), n = 0, 1, 2, ... (4.7)

Vi kan skriva en matlab-fil fix_point_solver.m som utför detta

1 %Fix point solver for g(x)=x2 %x = vector containing solutions x_0, x_1,..., x_N3 %g = Function handle to function g(x)4 %x0 = starting guess5 %N = number of iterations6 function x=fix_point_solver(g,x0,N)78 x=zeros(1,N+1);9 x(1)=x0;

10 for i=1:1:N11 x(i+1)=g( x(i) );12 end

Låt oss använda denna fil i ett exempel

Exempel 4.5. Använd fixpunktsmetoden med 10 iterationer och x0 = 0 föratt lösa ekvationen e−x = x. Vi skriver då följande i matlab

1 >> g=@(x) exp(−x);2 >> x=fix_point_solver(g,0,10)34 x =5 0 1.0000 0.3679 0.6922 0.5005 0.6062 0.5454 ...

0.5796 0.5601 0.5711 0.5649

dvs x10 = 0.5649 och det ser onekligen ut som att metoden ger tal som går motett fixt värde. Vi kan även visualisera hur xn närmar sig lösningen till ekvationene−x = x, genom att skriva följande i matlab

Page 28: Endimensionell analys - umu.se

24 KAPITEL 4. FIXPUNKTSITERERING

1 >> hold on2 >> X=−0.5:0.01:1.5;3 >> plot(X,X,X,g(X))4 >> for i=1:1:10 plot([x(i) x(i) x(i+1)], [x(i) x(i+1) ...

x(i+1)],'ro−'); end;5 >> hold off

Detta ger oss figur 4.1, där vi tydligt ser hur xn spiraliserar in mot skärnings-punkten för linjen y = x och kurvan y = e−x, d.v.s. mot roten till ekvationene−x = x .

Figur 4.1: Iterativ lösning av e−x = x med fixpunktsmetoden.

N

Det är dock inte alltid så att fixpunktsmetoden konvergerar, vilket illustrerasi nästa exempel.

Exempel 4.6. Låt oss nu använda fixpunktsmetoden på ekvationen 4.5−3x = xmed x0 = 1 och 4 iterationer. Denna ekvation är visserligen lätt att lösa för handmen fixpunktsmetoden fungerar inte, vilket vi kan se här:

1 >> g=@(x) 4.5−3*x;2 >> x=fix_point_solver(g,1,4)3 x =4 1.0000 1.5000 0 4.5000 −9.0000

Dvs metoden fungerar inte på detta exempel. Det kan vi förstå om vi skriverföljande kod i matlab:

1 >> hold on2 >> X=−10:0.01:5;3 >> plot(X,X,X,g(X))

Page 29: Endimensionell analys - umu.se

4.2. FIXPUNKTSMETODEN 25

4 >> for i=1:1:4 plot([x(i) x(i) x(i+1)], [x(i) x(i+1) ...x(i+1)],'ro−'); end;

5 >>

vilket ger oss figur 4.2. Vi ser där att istället för att spiralisera in mot lösningenx = 1.125 som i figur 4.1 så spiraliserar iterationerna ut från skärningspunkten.

Figur 4.2: Fixpunktsmetoden lyckas ej lösa 4.5 − 3x = x med startgissningenx0 = 1.

N

Anledningen till att fixpunktsmetoden inte fungerar för ekvationen 4.5−3x =x är att lutningen hos funktionen g(x) = 4.5 − 3x är för brant i närhetenav lösningen. Fixpunktsmetoden är enkel att implementera, men jämfört medbisektionsalgoritmen ställs det relativt höga krav på ekvationerna för att kunnaanvända den. Det finns dock två villkor som garanterar att fixpunktsmetodenkonvergerar och dessa formulerar vi i följande sats

Sats 4.7. Låt g(x) vara en funktion som är definierad på intervallet I = [a, b]och uppfyller

(i) x ∈ I ⇒ g(x) ∈ I.

(ii) |g(x) − g(y)| ≤ K|x − y| för någon konstant 0 < K < 1 och för allax, y ∈ I.

Då har g(x) en unik fixpunkt r ∈ I så att g(r) = r och fixpunktsmetoden kon-vergerar mot detta värde givet att man startar med en gissning x0ß.

Notera att det andra villkoret är ekvivalent med att g(x) är Lipschitz-kontinuerlig på intervallet I med en Lipschitzkonstant 0 < L < 1. Om man istäl-let för att utföra ett visst antal iterationer vill köra fixpunktsmetoden till dessatt en given tolerans uppnåtts kan man använda sig av nedanstående matlab-filistället.

1 %Fix point solver for g(x)=x with a given tolerance2 %x = vector containing solutions x_0, x_1,..., x_n3 %g = Function handle to function g(x)4 %x0 = starting guess5 %N = maximum number of allowed iterations

Page 30: Endimensionell analys - umu.se

26 KAPITEL 4. FIXPUNKTSITERERING

6 %TOL = desired tolerance7 function x=fix_point_solver_TOL(g,x0,N,TOL)89 x=[x0];

10 err=abs(x0−g(x0));11 i=1;12 while (err>TOL && i≤N)13 x=[x,g( x(end) )];14 err=abs(x(end)−x(end−1));15 i=i+1;16 end

Övningar till avsnitt 4.21. Lös e−x = 2x med fixpunktsmetoden och startgissningen x0 = 0.3. Kör

10 iterationer, verkar det som att metoden konvergerar?

2. Vad händer om vi sätter x0 = −5 när vi vill lösa e−x = 2x?

3. Lös ekvationen cos2(x) = x med toleransen TOL = 10−9, hur mångaiterationer krävs? Starta med x0 = 0.5

4. Använd fixpunktsmetoden för att lösa ekvationen x3 + 10x− 10 = 0.

4.3 Newtons metod och Linjär approximationEtt sätt att approximera en funktion f(x) kring en given punkt x = a, äratt approximera f(x) med tangenten till f(x) i punkten (a, f(a)). Eftersomtangenten är en linjär funktion kallar vi detta för linjär approximation och införbeteckningen L(x) för denna funktion. Uppenbarligen gäller att L(a) = f(a)och L′(a) = f ′(a), vilket gör att L(x) beter sig ungefär som f(x) kring punkten(a, f(a)).

L(x) = f(a) + f ′(a)(x− a). (4.8)I figur 4.3 ser vi den linjära approximationen till f(x) = x2 − 2 kring x = 2.

Figur 4.3: Linjär approximation av f(x) = x2 − 2 kring x = 2.

Felet i approximationen L(x) ≈ f(x) betecknar vi med E(x), dvs E(x) =f(x) − L(x). Med hjälp av den generaliserade medelvärdessatsen kan vi visaföljande sats

Page 31: Endimensionell analys - umu.se

4.3. NEWTONS METOD OCH LINJÄR APPROXIMATION 27

Sats 4.8. Om f ′′(t) existerar för alla t i ett intervall innehållandes a och x, såexisterar en punkt s mellan a och x så att felet E(x) = f(x)− L(x) uppfyller

E(x) = f ′′(s)2 (x− a)2. (4.9)

Vi ser att ju större f ′′ är desto större kan felet bli, vilket är naturligt eftersomf ′′ styr hur mycket f ′ kan förändras.

Linjär approximation kan också användas för att uppskatta nollställen till enfunktion g(x). Den linjära approximationen L(x) till g(x) kring punkten x = x0ges av

L(x) = g(x0) + g′(x0)(x− x0), (4.10)

Om vi löser ekvationen L(x) = 0 erhåller vi en approximation till lösningen förg(x) = 0 (förutsatt att g′(x0) 6= 0)

0 = L(x) = g(x0) + g′(x0)(x− x0)⇔ x = x0 −g(x0)g′(x0) . (4.11)

Låt oss sätta x1 = x0− g(x0)/g′(x0). Detta värde uppfyller knappast g(x1) = 0men kan vara en hyfsad approximation och upprepar vi detta tillvägagångsättgenom att beräkna nollstället x = x2 till linjära approximationen av g(x) kringx = x1 kommer vi kanske ännu närmare det riktiga nollstället. Detta ledeross till att formulera följande iterativa algoritm, som kallas för Newtons me-tod (eller Newton-Rhapson’s metod), för att lösa ekvationen g(x) = 0. Givetstartgissningen x0 så fås xn+1 ur följande iterativa metod

xn+1 = xn −g(xn)g′(xn) . (4.12)

I matlab kan vi skriva funktionen newton_solver.m enligt följande

1 %Newton solver for g(x)=02 %x = vector containing solutions x_0, x_1,..., x_N3 %g = Function handle to function g(x)4 %x0 = starting guess5 %N = number of iterations6 function x=newton_solver(g,x0,N)78 x=zeros(1,N+1);9 x(1)=x0;

10 for i=1:1:N11 dgdx=num_deriv(g,x(i),10^(−6));12 if(abs(dgdx)>10^(−9)) %Assures g'(x_i) not equal to 013 x(i+1)=x(i)−g(x(i))/dgdx;14 else15 display('Derivative close to 0, iteration aborted')16 break;17 end18 end

I figur 4.4 illustreras användandet av Newton’s metod för att lösa x2 − 2 = 0.

Page 32: Endimensionell analys - umu.se

28 KAPITEL 4. FIXPUNKTSITERERING

Figur 4.4: Illustration av Newtons metod för att lösa x2 − 2 = 0.

Vi ser i figur 4.4 att metoden verkar konvergera väldigt snabbt i detta falloch detta bekräftas genom att utföra följande i matlab

1 >> g=@(x) x^2−2;2 >> x=newton_solver(g,2,5)3 x =4 2.0000 1.5000 1.4167 1.4142 1.4142 1.41425 >> x(end)−sqrt(2)6 ans =7 −2.2204e−016

dvs felet är av storleksordningen 10−16 redan efter 5 iterationer.

Det är dock inte alltid Newton’s metod konvergerar, vilket illustreras i figur4.5 där vi försöker lösa x2 − x3 + 0.13x4 = 0 med startgissningen x0 = 2.5.

Figur 4.5: Newtons metod misslyckas att lösa 2x2 − x3 + 0.13x4 = 0 med start-gissningen x0 = 2.5.

I figur 4.5 ser vi att vi fått problem eftersom g′ ändrat tecken mellan detnollstället x = 0 och vår startgissning x0 = 2.5, vilket gör att vi börjat leta i felriktning. För att kunna garantera konvergens med Newton’s metod måste vissakrav på g, g′ och g′′ ställas. Dessa sammanfattas i följande sats som dessutomger oss en feluppskattning.

Page 33: Endimensionell analys - umu.se

4.3. NEWTONS METOD OCH LINJÄR APPROXIMATION 29

Sats 4.9. Anta att g, g′ och g′′ är kontinuerliga på ett intervall I, som inne-håller xn, xn+1 och roten r till ekvationen g(x) = 0. Anta också att det finnskonstanter K > 0 och L > 0 så att följande gäller för alla x ∈ I

(i) |g′′(x)| ≤ K,

(ii) |g′(x)| ≥ L.

Då gäller

1. |xn+1 − r| ≤ K2L |xn+1 − xn|2,

2. |xn+1 − r| ≤ K2L |xn − r|2.

Villkor (i) och (ii) garanterar att lutningen inte blir för liten samt att deninte ändras för snabbt. Från (1) och (2) ser vi att vi har kvadratisk konver-gens (precis som att felet vid linjär approximation är av ordning 2) och omK/(2L) < 1 samt |xn − r| < 1 konvergerar metoden väldigt snabbt.

I praktiken använder vi sällan sats 4.7 och 4.9 för att i förväg avgöra ommetoderna kommer konvergera. Ser det ut som att metoderna konvergerar motett värde x = r och g(r) är nära 0 kan vi vara säkra på att vi hittat en lösningtill g(x) = 0. Det är ofta först i fallen då vi inte får konvergens eller om vi harväldigt långsam konvergens som vi studerar saken närmare.

Övningar till avsnitt 4.31. Beräkna den linjära approximationen L(x) till f(x) = e−x kring x = −2

och plotta L(x) och f(x) tillsammans över intervallet −3 ≤ x ≤ 1.

2. Skriv en matlab-funktion linj_approx.m som givet en funktion f , envektor X med x-värden, och ett värde a, returnerar en vektor med värdenahos den linjära approximationen L(x) kring x = a i de x-värden somligger i X. Du får använda dig av den m-filen som du skivit tidigare:num_deriv.m

3. Beräkna följande värden numeriskt med hjälp av Newtons metod.

(a)√

3(b) Lösningarna till x2 − 7x = 9.

(c) 21/3

(d) Lösningen till x+√x = 1.

4. Givet funktionenf(x) = 0.1x3 + 0.5x2 + 15x

x3 + 5x2 + 1 ,

beräkna de linjära approximationerna L1(x) kring x = 0.1, L2(x) kringx = 1.5 och L3(x) kring x = 30. Rita sedan 3 figurer, en med f(x) ochL1(x) på intervallet 0 ≤ x ≤ 3, en med f(x) och L2(x) på intervallet0 ≤ x ≤ 5 och en med f(x) och L3(x) på intervallet 0 ≤ x ≤ 50.

Page 34: Endimensionell analys - umu.se

30 KAPITEL 4. FIXPUNKTSITERERING

5. Lös ekvationen cos2(x) = 0 med Newtons metod, dels med startgissningenx0 = 1 och dels med startgissningen x0 = 4. Hur stort är felet efter 10iterationer?

6. Lös ekvationen e−x = x dels med fixpunktsmetoden och dels med Newtonsmetod. Börja med startgissningen x0 = 0 och kör 15 iterationer. Plottasedan de relativa felen (d.v.s. felets storlek i förhållande till det korrektavärdet) för de båda metoderna mot antalet iterationer. Använd lösningensom erhålls med Newtons metod efter 100 iterationer som referensvärdeoch använd semilogy för att plotta så ni får logaritmisk skala på y-axeln.

7. Sätt g(x) = x3 och lös ekvationen g(x) = 0 med Newtons metod ochstartgissningen x0 = 1. Hur stort är felet efter 20 iterationer? Varför kon-vergerar metoden långsammare för denna ekvation än för ekvationen iförra uppgiften?

Page 35: Endimensionell analys - umu.se

Del II

Svar till uppgifter

31

Page 36: Endimensionell analys - umu.se
Page 37: Endimensionell analys - umu.se

Endimensionell analys 1

Svar till övningar för kapitel 1Avsnitt 1.1 (s. 5)

1. Ett exempel på kod som plottar grafen är följande:

1 >> x=0.5:0.1:8;2 >> y=log(x);3 >> plot(x,y)

Man kan förstås ändra steglängden i x till andra värden, exempelvisx=0.5:0.01:8;.

2. Exempelvis:

1 >> x=0:0.1:4;2 >> y=(x−1).*(x−2).*(x−3);3 >> plot(x,y)

3. Vi använder den inbyggda konstanten pi för att uttrycka värdet π.

1 >> x=−4*pi:0.1:4*pi;2 >> y=sin(x)+1/3*sin(3*x)+1/5*sin(5*x);3 >> plot(x,y)

4.

1 >> x=−2*pi:0.1:2*pi;2 >> plot(x,sin(x),x,cos(x))

5.

1 >> x=−1:0.01:1;2 >> plot(x,sqrt(1−x.^2),'b',x,−sqrt(1−x.^2),'b')3 >> axis([−2 2 −2 2])

6.

33

Page 38: Endimensionell analys - umu.se

34

1 >> t=0:0.01:2*pi;2 >> plot(cos(t),sin(t))3 >> axis([−2 2 −2 2])

7.

1 >> x=0:0.001:10;2 >> plot(x, floor(x))

8. Funktionen har nollställen i x = −4, 2, 4.

1 >> x=−5:0.1:5;2 >> y=(x+4).*(x−2).*(x−4);3 >> plot(x,y)

9.

1 >> x=−5:0.1:5;2 >> y=(x+4).*(x−2).*(x−4);3 >> plot(x,y)4 >> hold on5 >> grid on

Avsnitt 1.2 (s. 8)1. Vi använder en loop för att beräkna x. Den n:te termen ges av

1(2n− 1) sin((2n− 1)x)

där n går från 1 till 23.

1 x=−6*pi:0.1:6*pi;2 y=zeros(size(x));3 for n=1:23,4 y = y + 1/(2*n−1).*sin((2*n−1)*x);5 end6 plot(x, y)

Avsnitt 1.3 (s. 10)1. Figuren ska vara ett pentagram. Se exemplet på sidan 9.

2.

1 >> x=punkter(:,1);2 >> y=punkter(:,2);3 >> plot(x,y,'o−')

Page 39: Endimensionell analys - umu.se

35

Avsnitt 1.4 (s. 12)1. Se exempel 1.5.

Svar till övningar för kapitel 2Avsnitt 2.1 (s. 16)

1. Följ pseudokoden given i algoritm 2.1 och fortsätt på följande skal:

1 % Find root of f(x) using bisection2 % −−− Input −−−3 % f : function handle for function y=f(x)4 % I : I=[a,b] where a and b define start interval5 % TOL : tolerance6 % −−− Output −−−7 % X : interval for root of f(x)=08 function X = bisection(f, I, TOL)9 a=I(1); b=I(2);

10 if f(a)*f(b) ≥ 011 disp('f(a) and f(b) have same sign!');12 X=[];13 return;14 end1516 X=[a,b];17 while abs(X(1)−X(2)) > TOL18 ???19 ???20 ???21 end

3. I uppgift (a) kan vi exempelvis plotta funktionen med kommandona:

1 >> x = linspace(−3,3,1000);2 >> plot(x,x.^2−2,'r',x,0,'b')

Från plotten ser vi att en rot finns i intervallet [−2, 0]:

1 >> X = bisection(@(x) x.^2−2,[−2,0],10^(−9))

Med TOL=10^(−9) får vi svaren (här avrundade till 6 decimalers noggran-het):

(a) x ∈ {−1.414214, 1.414214}(b) x ∈ {−1.189207, 1.189207}(c) x ∈ {−3, 2}(d) x ∈ {3.141593, 6.283185, 9.424778}(e) x ∈ {0, 1}

4. Givet att du vid varje iteration lagrar nuvarande intervall [xi, Xi] i vek-torn X kan du spara denna på en ny rad i matrisen XX genom att skriva:XX(end+1,:)=X;

Page 40: Endimensionell analys - umu.se

36

Avsnitt 2.2 (s. 17)1. Definiera en ny anonym funktion g = @(x)f(x)− y och använd bisek-

tionsalgoritmen.

2. Exempel för (a): Plotta funktionen och notera att den antagligen är in-verterbar när y ∈ [0,∞) alternativt på y ∈ (∞, 0]. Vi väljer att försökaplotta inversen på [0, 10]. Skapa en vektor av y-värden och lös sedan förvardera x-värde som i föregående uppgift.

1 a=0.0001; b=10; % interval (obs! y6=0 i uppgift a)2 y = linspace(a,b,100); % creating vector of y−values3 x = zeros(size(y)); % creating empty vector of x−values4 for i=1:length(y)5 g = @(x) f(x) − y(i);6 X=bisection(g,[a,b],10^(−9));7 x(i)=X(1); % choosing lower bound as x8 end9 plot(x,y)

Svar till övningar för kapitel 3Avsnitt 3.1 (s. 20)

1. De efterfrågade differenskvoterna kan beräknas med m-filerna

1 function dfdx=num_deriv_backward(f,a,h)23 dfdx=(f(a)−f(a−h))/h;

och

1 function dfdx=num_deriv_center(f,a,h)23 dfdx=(f(a+h)−f(a−h))/(2*h);

2. Framåt differenskvot och h = 0.0001 ger f ′(2) ≈ 15.0006.

3. Sätter vi h = 0.01 får vi f ′(0) ≈ 10.

4. Om vi låter h anta värdena 10−2, 10−3, 10−4, 10−5, 10−6 erhålls följandetabell enligt vilken det verkar som att

h 10−2 10−3 10−4 10−5 10−6

f ′(0) ≈ 10 31.6 100 316 1000

limh→0+

f(0 + h)− f(0)h

=∞

, dvs f ′(0) =∞.

Page 41: Endimensionell analys - umu.se

37

5. f ′(4) = 1/2 vilket ger att tangentens ekvation ges av y = x/2 + 1.

6. Med centrerad differenskvot och h = 0.01 fås f ′(3) ≈ 20.0864 vilket ärväldigt nära värdet f(3) ≈ 20.0859.

Svar till övningar för kapitel 4

Avsnitt 4.1 (s. 22)

1. f(x) = 3x+ 9 är Lipschitzkontinuerlig på alla intervall med Lipschitzkon-stanten f ′(x) = 3 (Det går givetvis bra att välja en större Lipschitzkon-stant också).

2. f(x) =√x är ej Lipschitzkontinuerlig på intervallet [0, 1] eftersom

limx→0+

f ′(x) =∞.

På intervallen [1, 10] och [1,∞) är dock f(x) Lipschitzkontinuerlig medLipschitzkonstanten f ′(1) = 1/2.

3. f(x) = x3−x är Lipschitzkontinuerlig på intervallen [−10, 10] och [−378, 329]med Lipschitskonstanterna 299 respektive 428651. Funktionen är inte Lipschitz-kontinuerlig på intervallet (−1,∞) eftersom limx→∞ f ′(x) =∞.

4. Lipschitzkonstanten kan väljas till 1 och a = 0 ger oss då följande figur

Page 42: Endimensionell analys - umu.se

38

Avsnitt 4.2 (s. 26)1. Vi sätter g(x) = e−x/2 så vi får ekvationen på formen g(x) = x och skriver

sedan följande i matlab

1 >> g=@(x) exp(−x)/2;2 >> x=fix_point_solver(g,0.3,10)3 x =4 0.3000 0.3704 0.3452 0.3540 0.3509 0.3520 0.3516 ...

0.3518 0.3517 0.3517 0.3517

dvs det verkar onekligen som att metoden konvergerar, vilket är väntateftersom |g′(x)| < 1 i närheten av x = 0.3.

2. Eftersom |g′(−5)| > 1 kan vi ej från sats 4.7 garantera att metoden kon-vergerar men skriver vi

1 >> g=@(x) exp(−x)/2;2 >> x=fix_point_solver(g,−5,10)3 x =4 −5.0000 74.2066 0.0000 0.5000 0.3033 0.3692 0.3456 ...

0.3539 0.3510 0.3520 0.3516

ser vi dock att fixpunktsmetoden konvergerar iaf.

3. Vi skriver

1 >> g=@(x) cos(x)^2;2 >> x=fix_point_solver_TOL(g,0.5,1000,10^(−9));3 >> length(x)

Page 43: Endimensionell analys - umu.se

39

4 ans =5 463

dvs det krävdes 463− 1 = 462 iterationer.

4. Vi måste börja med att skriva om ekvationen på formen g(x) = x ocheftersom x3 + 10x−10 = 0⇔ 1− x3

10 = x sätter vi g(x) = 1− x3

10 . Vi väljernu x0 = 1, vilket gör att metoden konvergerar

1 >> g=@(x) 1−1/10*x.^3;2 >> x=fix_point_solver(g,1,5)3 x =4 1.0000 0.9000 0.9271 0.9203 0.9221 0.9216

Om vi exempelvis sätter x0 = 5 divergerar värdena enligt

1 >> x=fix_point_solver(g,5,3)2 x =3 1.0e+005 *45 0.0001 −0.0001 0.0015

Avsnitt 4.3 (s. 29)1. Den linjära approximationen L(x) ges av

L(x) = f(−2) + f ′(−2)(x− (−2)) = e2 − e−2(x+ 2).

För att plotta skriver vi nu följande i matlab

1 >> f=@(x) exp(−x);2 >> L=@(x) exp(2)−exp(2)*(x+2);3 >> x=−3:0.01:1;4 >> plot(x,f(x),x,L(x))

och erhåller då figur 4.6.

Figur 4.6: Funktionen e−x och dess linjära approximation kring x = −2.

Page 44: Endimensionell analys - umu.se

40

2.

1 %A function computing the linear approximation L of the ...function f

2 %L = the linear approximation3 %f = function handle to function f(x)4 %a = the point around which the linear approximation is computed5 %X = vector with given x−values6 function L=linj_approx(f,a,X)78 dfdx_a=num_deriv(f,a,0.001);9 L=f(a)+dfdx_a*(X−a);

3. Jämför dina svar men inbyggda funktioner i matlabeller verifiera genomatt sätta in värden.

4. Vi kan skriva följande i matlab

1 >> f=@(x) (0.1*x.^3+0.5*x.^2+15*x)./(x.^2+5*x+1);2 >> figure(1)3 >> X=0:0.01:3;4 >> L=linj_approx(f,0.1,X);5 >> plot(X,f(X),X,L)6 >> grid on7 >> figure(2)8 >> X=0:0.01:10;9 >> L=linj_approx(f,1.5,X);

10 >> plot(X,f(X),X,L)11 >> grid on12 >> figure(3)13 >> X=0:0.01:100;14 >> L=linj_approx(f,50,X);15 >> plot(X,f(X),X,L)16 >

vilket ger oss figurerna 4.7-4.9

Figur 4.7: Funktionen f(x) och dess linjära approximation kring x = 0.1.

Page 45: Endimensionell analys - umu.se

41

Figur 4.8: Funktionen f(x) och dess linjära approximation kring x = 1.5.

Figur 4.9: Funktionen f(x) och dess linjära approximation kring x = 50.

5. Om vi skriver följande i matlab

1 >> g=@(x) cos(x).^2;2 >> x=newton_solver(g,1,10)3 x =4 1.0000 1.3210 1.4486 1.5100 1.5404 1.5556 ...

1.5632 1.5670 1.5689 1.5698 1.57035 >> pi/2−x(end)6 ans =7 4.7372e−004

samt

1 >> g=@(x) cos(x).^2;2 >> x=newton_solver(g,4,10)3 x =4 4.0000 4.4318 4.5759 4.6446 4.6785 4.6955 ...

4.7039 4.7082 4.7103 4.7113 4.71195 >> 3*pi/2−x(end)6 ans =

Page 46: Endimensionell analys - umu.se

42

Notera att vi var tvungna att jämföra med två olika lösningsvärden ef-tersom Newtons metod kommer hitta olika lösningar för de olika start-gissningarna. I båda fallen var felet av storleksordningen 10−4.

6. Innan vi kör Newton’s metod måste vi skriva om ekvationen på formene−x − x = 0. Skriver vi följande i matlab

1 >> g_fix=@(x) exp(−x);2 >> g_newton=@(x) exp(−x)−x;3 >> x_fix=fix_point_solver(g_fix,0,15);4 >> x_newton=newton_solver(g_newton,0,100);5 >> g_fix=@(x) exp(−x);6 >> g_newton=@(x) exp(−x)−x;7 >> x_fix=fix_point_solver(g_fix,0,10);8 >> x_newton=newton_solver(g_newton,0,10);9 >> its=0:1:10;

10 >> err_fix=abs(x_fix−x_newton(end))/x_newton(end);11 >> err_newton=abs(x_newton−x_newton(end))/x_newton(end);12 >> semilogy(its,err_fix,its,err_newton(1:10+1))13 >> grid on

erhålls figur 4.10

Figur 4.10: Relativa felet vid lösning av exp(−x)−x = 0 med fixpunktsiteratonoch Newtoniteration.

Det är tydligt att Newton’s metod konvergerar betydligt snabbare än fix-punktsmetoden. Vi ser även att Newton’s metod når högsta möjliga pre-cision som tillåts av datorn redan efter 5 iterationer.

7. Vi skriver följande i matlab

1 >> g=@(x) x.^3;2 >> x=newton_solver(g,1,20)3 x =4 Columns 1 through 125 1.0000 0.6667 0.4444 0.2963 0.1975 0.1317 ...

0.0878 0.0585 0.0390 0.0260 0.0173 0.0116

Page 47: Endimensionell analys - umu.se

43

6 Columns 13 through 217 0.0077 0.0051 0.0034 0.0023 0.0015 0.0010 ...

0.0007 0.0005 0.00038 >> abs(0−x(end))9 ans =

10 3.0

dvs vi har ett fel av storleksordningen 10−4 efter 20 iterationer. Anledning-en till att metoden konvergerar långsammare i detta fall är att g′(x)→ 0då vi närmar oss lösningen x = 0. Även i uppgift 4 då vi löste cos2(x) = 0hade vi långsammare konvergens eftersom d/dx(cos2(x)) också är 0 i noll-ställena. I detta fall gick det dock extra långsamt eftersom både g′ och g′′går mot 0.

Page 48: Endimensionell analys - umu.se

44