Matematikk Øvingsoppgaver i numerikk leksjon 6 Løsningsforslag

Like dokumenter
Matematikk Øvingsoppgaver i numerikk leksjon 7 Løsningsforslag

Matematikk Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 6 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 Litt oppsummering undervegs Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 for-løkker

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver uke 35

Høgskolen i Oslo og Akershus. sin 2 x cos 2 x = 0, x [0, 2π) 1 cos 2 x cos 2 x = 0 2 cos 2 x = 1 cos 2 x =

Matematikk Øvingsoppgaver i numerikk leksjon 4 m-ler

Matematikk Øvingsoppgaver i numerikk leksjon 4 Løsningsforslag

Løsningsforslag. Innlevering i BYFE/EMFE 1000 Oppgavesett 1 Innleveringsfrist: 14. september klokka 14:00 Antall oppgaver: 3.

Løsningsforslag. Innlevering i BYFE 1000 Oppgavesett 1 Innleveringsfrist: 10. oktober klokka 14:00 Antall oppgaver: 6. Oppgave 1

Matematikk Øvingsoppgaver i numerikk leksjon 5 Løsningsforslag

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver uke 40

Matematikk Øvingsoppgaver i numerikk leksjon 9. Løsningsforslag

Høgskolen i Oslo og Akershus. i=1

Matematikk Øvingsoppgaver i numerikk leksjon 6. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

Matematikk Øvingsoppgaver i numerikk leksjon 3. Løsningsforslag

Matematikk Eksamensaktuelle numerikk-oppgåver

MA1102 Grunnkurs i analyse II Vår 2014

Matematikk Øvingsoppgaver i numerikk leksjon 7. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 6. Løsningsforslag

Newtons metode er en iterativ metode. Det vil si, vi lager en funksjon. F x = x K f x f' x. , x 2

x n+1 = x n f(x n) f (x n ) = x n x2 n 3

a) f(x) = 3 cos(2x 1) + 12 LF: Vi benytter (lineær) kjerneregel og får f (x) = (sin(7x + 1)) (sin( x) + x) sin(7x + 1)(sin( x) + x) ( sin(x) + x) 2 =

Finne løsninger på ligninger numerisk: Newton-Raphson metoden og Fikspunktiterasjon MAT111, høsten 2017

Matematikk Øvingsoppgaver i numerikk leksjon 11 Eulers metode. Løsningsforslag

Høgskolen i Oslo og Akershus. a) Finn den deriverte av disse funksjonene: b) Finn disse ubestemte integralene: c) Finn disse bestemte integralene:

1. Finn egenverdiene og egenvektorene til matrisen A = 2 1 A =

Matematikk Øvingsoppgaver i numerikk leksjon 2 Løsningsforslag

Løsningsforslag. og B =

Matematikk Øvingsoppgaver i numerikk leksjon 2 Løsningsforslag

Oppgave Iterasjonen ser ut til å konvergere sakte mot null som er det eneste fikspunktet for sin x.

Matematikk Øvingsoppgaver i numerikk leksjon 1 Løsningsforslag

For det aktuelle nullpunktet, som skal ligge mellom 0 og, kan vere eit greit utgongspunkt.

BYFE DAFE Matematikk 1000 HIOA Obligatorisk innlevering 4 Innleveringsfrist Fredag 11. mars 2016 Antall oppgaver: Løsningsforslag

Prøve i Matte 1000 ELFE KJFE MAFE 1000 Dato: 02. desember 2015 Hjelpemiddel: Kalkulator og formelark

Matematikk Øvingsoppgaver i numerikk leksjon 2 Funksjoner og plotting

6 Numeriske likningsløsere TMA4125 våren 2019

LØSNINGSFORSLAG. Skriv følgende komplekse tall både på kartesisk form som a + bi og på polar form som re iθ (r 0 og 0 θ < 2π). a) 2 + 3i.

UNIVERSITETET I OSLO

Fasit MAT102 juni 2016

Løsningsforslag AA6526 Matematikk 3MX Privatister 3. mai eksamensoppgaver.org

Oppgave x d 1.0 for n from 1 by 1 to 200 do x d sin x end do

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver uke 37 og 38

Løsningsforslag. og B =

Matematikk Øvingsoppgaver i numerikk leksjon 8. Løsningsforslag

Matematikk Øvingsoppgaver i numerikk leksjon 3 Skript

UNIVERSITETET I OSLO

Innlevering i matematikk Obligatorisk innlevering nr. 4 Innleveringsfrist: 21. januar 2010 kl Antall oppgaver: 4.

UNIVERSITETET I OSLO

Newtons metode er en iterativ metode. Det vil si, vi lager en funksjon. F x = x K f x f' x

Løsningsforslag Eksamen eksempeloppgave R1 - REA Desember 2007

Matematikk 1000, 2012/2013. Eksamensaktuelle numerikk-oppgåver

Matematikk Øvingeoppgaver i numerikk leksjon 1 Å komme i gang

Matematikk Øvingsoppgaver i numerikk leksjon 8 Matriser. Løsningsforslag

Løsningsforslag. Oppgave 1 Gitt matrisene ] [ og C = A = 4 1 B = 2 1 3

Matematikk Øvingsoppgaver i numerikk leksjon 1. Løsningsforslag

Løsningsforslag AA6524 Matematikk 3MX Elever 7. juni eksamensoppgaver.org

Prøveunderveiseksamen i MAT-INF 1100, H-03

Høgskolen i Oslo og Akershus. = 2xe 2x + x 2 e 2x (2x) = 2xe 2x + 2x 2 e 2x = 2xe 2x (1 + x) e 2x + x 2 ( e 2x) 1 sin x (sin x) + 2x = cos x

Underveiseksamen i MAT-INF 1100, 17. oktober 2003 Tid: Oppgave- og svarark

BYFE DAFE Matematikk 1000 HIOA Obligatorisk innlevering 5 Innleveringsfrist Fredag 15. april 2016 kl 14 Antall oppgaver: 8

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Erfaringar med numeriske metodar i matematikk-undervisinga for dataingeniørstudentar. Haugesund, 5. juni 2018

Løsningsforslag AA6516 Matematikk 2MX - 5. mai eksamensoppgaver.org

BYFE/EMFE 1000, 2012/2013. Numerikkoppgaver uke 43

Alle svar skal grunngis. Alle deloppgaver har lik vekt.

UNIVERSITETET I OSLO

Løsningsforslag AA6524/AA6526 Matematikk 3MX Elever/Privatister - 7. desember eksamensoppgaver.org

Alle svar skal grunngis. Alle deloppgaver har lik vekt.

eksamensoppgaver.org x = x = x lg(10) = lg(350) x = lg(350) 5 x x + 1 > 0 Avfortegnsskjemaetkanvileseatulikhetenstemmerfor

Løsningsforslag AA6524 Matematikk 3MX 3. juni eksamensoppgaver.org

UNIVERSITETET I OSLO

eksamensoppgaver.org 4 2e x = 7 e x = 7 2 ln e x = ln 2 x = ln 7 ln 2 ln x 2 ln x = 2 2 ln x ln x = 2 ln x = 2 x = e 2

Forkurs, Avdeling for Ingeniørutdanning

9 + 4 (kan bli endringer)

Biseksjonsmetoden. biseksjonsmetode. Den første og enkleste iterativ metode for ikke lineære likninger er den så kalt

Løsningsforslag. Prøve i Matematikk 1000 BYFE DAFE 1000 Dato: 29. mai 2017 Hjelpemiddel: Kalkulator og formelark. Oppgave 1 Gitt matrisene.

Numerisk løsning av ikke-lineære ligninger

eksamensoppgaver.org 4 oppgave1 a.i) Viharulikheten 2x 4 x + 5 > 0 2(x 2) x + 5 > 0 Sådaserviatløsningenpådenneulikhetenblir

Løsningsforslag for eksempeloppgave REA3026 Matematikk S1 - April eksamensoppgaver.org

Løsningsforslag AA6516 Matematikk 2MX Privatister 10. desember eksamensoppgaver.org

Matematikk Øvingeoppgaver i numerikk leksjon 1 Å komme i gang

Ikke lineære likninger

Løsningsforslag til prøveunderveiseksamen i MAT-INF 1100, H-03

MAT-INF 2360: Obligatorisk oppgave 3. Løsningsforslag

Løsningsforslag. Innlevering i BYFE 1000 Oppgavesett 4 Innleveringsfrist:??? klokka 14:00 Antall oppgaver: 5, 20 deloppgaver.

Prøve i Matte 1000 BYFE DAFE 1000 Dato: 03. mars 2016 Hjelpemiddel: Kalkulator og formelark. Alle svar skal grunngis. Alle deloppgaver har lik vekt.

Øvingsforelesning i Matlab TDT4105

Løsningsforslag B = 1 3 A + B, AB, BA, AB BA, B 2, B 3 C + D, CD, DC, AC, CB. det(a), det(b)

Løsningsforslag Matematikk 2MX - AA mai 2007

UNIVERSITETET I OSLO

Løsningsforslag. 7(x + 1/2) 5 = 5/6. 7x = 5/ /2 = 5/6 + 3/2 = 14/6 = 7/3. Løsningen er x = 1/3. b) Finn alle x slik at 6x + 1 x = 5.

EKSAMEN I EMNET Løsning: Mat Grunnkurs i Matematikk I Mandag 14. desember 2015 Tid: 09:00 14:00

UNIVERSITETET I OSLO

Transkript:

Matematikk 1000 Øvingsoppgaver i numerikk leksjon 6 Løsningsforslag Oppgave 1 Tredjegradslikninga a) Vi viser her hvordan det kan gjøres både som funksjonsl og som skript. Vi starter med funksjonla: 1 function X=TredjeGradFunk(a,b,c,d) 2 3 % Funksjon som løser tredjegradslikning % ax^3+bx^2+cx+d=0. 5 % Input er parametrene a, b, c, d. 6 % Funksjonen gir de tre løsningene, x_1, x_2 og x_3 7 % som output. Her har vi valgt å gi de tre 8 % løsningene som komponentene i en vektor 9 10 % Kontrollerer at det faktisk ér en tredjegradslikning 11 if a==0 12 disp('dette er ikke ei tredjegradslikning') 13 return 1 end 15 16 % Tilordner parametre som inngår i løsningsformelen 17 u=[1 (-1+sqrt(3)*i)/2 (-1-sqrt(3)*i)/2] 18 Delta0=b^2-3*a*c 19 Delta1=2*b^3-9*a*b*c+27*a^2*d 20 % Stor C. NB! Ulik input-variabelen c. 21 C=((Delta1+sqrt(Delta1^2-*Delta0^3))/2)^(1/3) 22 23 % Løsninga 2 X=-1/(3*a)*(b+u*C+Delta0./(u*C)); 1

En tilsvarende skript-versjon kan se slik ut: 1 % Skript som løser tredjegradslikning 2 % ax^3+bx^2+cx+d=0. 3 % Input er parametrene a, b, c, d. % Skriptet gir de tre løsningene, x_1, x_2 og x_3 5 % som output. Her har vi valgt å gi de tre 6 % løsningene som komponentene i en vektor 7 8 % Gir koeffisientene fra kommandovinduet 9 a=input('gi a: '); 10 b=input('gi b: '); 11 c=input('gi c: '); 12 d=input('gi d: '); 13 1 % Kontrollerer at det faktisk ér en tredjegradslikning 15 if a==0 16 disp('dette er ikke ei tredjegradslikning') 17 return 18 end 19 20 % Tilordner parametre som inngår i løsningsformelen 21 u=[1 (-1+sqrt(3)*i)/2 (-1-sqrt(3)*i)/2]; 22 Delta0=b^2-3*a*c; 23 Delta1=2*b^3-9*a*b*c+27*a^2*d; 2 % Stor C. NB! Ulik input-variabelen c. 25 C=((Delta1+sqrt(Delta1^2-*Delta0^3))/2)^(1/3); 26 27 % Løsninga 28 X=-1/(3*a)*(b+u*C+Delta0./(u*C)) Vi tester implementeringa vår. Vi kan jo begynne med å se om den nner røttene til (x 1)(x 2)(x 3) = x 3 6x 2 + 11x 6: >> format compact >> TredjeGradFunk(1,-6,11,-6) ans = 1.0000 + 0.0000i 3.0000 + 0.0000i 2.0000-0.0000i Dette stemte jo bra. Hva så med tredjegradspolynomet 2x 3 + x 1? >> X=TredjeGradFunk(2,0,1,-1) X = 0.5898 + 0.0000i -0.299-0.8723i -0.299 + 0.8723i Vi har funnet én reell løsning og to komplekse som er de komplkskonjugerte av hverandre. 2

Figur 1: Tredjegradspolynomet 2x 3 + x 1 sammen med den ene reelle rota vi fant. At den reelle løsninga ser ut til å stemme, ser vi av gur 1. Vi kan også kontrollere løsningene ved å sette dem inn i polynomet: >> 2*X.^3+X-1 ans = 1.0e-1 * 0.1776 + 0.0000i 0.2220 + 0.0555i 0.2220-0.0555i Vi ser at vi får (så godt som) null for alle tre løsningene. b) Løsninga vår skal i prinsippet fungere for alle mulige verdier av a, b, c og d dersom vi fra og med linje 23 i funksjonsla over setter inn dette i stedet: % Løsninga if Delta0==0 & Delta1==0 X=-b/(3*a); elseif Delta0==0 & Delta1<0 C=Delta1^(1/3); X=-1/(3*a)*(b+u*C+Delta0./(u*C)); else X=-1/(3*a)*(b+u*C+Delta0./(u*C)); end % Spesialtilfelle: 3 like røtter % Endrer C i dette tilfellet Men dette viser seg å ikke fungere så godt i praksis. Om vi for eksempel setter b = 3, a = c = 1 og d = 1, får vi at 0 = 0 og 1 32. Dette tilsvarer tilfellet i elseif-satsen over. Men når vi tester, får vi følgende svar: >> TredjeGradFunk(1,sqrt(3),1,-1) 3

ans = Inf -Inf Inf Grunnen er at datamaskina ikke klarer å skille mellom tall som er eksakt null og tall som er veldig nær null. Litt enkelt kan man si at denne grensa går ved maskinpresisjonen, som man får opp når man skriver `eps' i kommandovinduet. Typisk er denne av størrelsesorden 10 16, men som navnet tilsier, vil dette variere fra maskin til maskin. Man kan ta hensyn til dette på denne måten: % Løsninga if abs(delta0)<1e-1 & abs(delta1)<1e-1 X=-b/(3*a); % Spesialtilfelle: 3 like røtter elseif abs(delta0)<1e-1 & Delta1<0 C=Delta1^(1/3); % Endrer C i dette tilfellet X=-1/(3*a)*(b+u*C+Delta0./(u*C)); else X=-1/(3*a)*(b+u*C+Delta0./(u*C)); end Her har vi sagt at dersom 0 < 10 1, skal vi regne den for å være null. Når vi nå tester skriptet, vil det fungere: >> x=tredjegradfunk(1,sqrt(3),1,-1) -1.1076-0.918i 0.831-0.0000i -1.1076 + 0.918i >> x.^3+sqrt(3)*x.^2+x-1 ans = 1.0e-15 * 0.2220-0.1i -0.1110-0.297i -0.1-0.3331i Her har vi også kontrollert løsningene; vi ser at x 3 + 3x 2 +x 1 < 10 15 for alle de tre løsningene, så det må vel være godkjent. Oppgave 2 Halveringsmetoden igjen a) I skriptet vårt fra leksjon 5 skal altså linje 13 erstattes med while abs(b-a)>1e-3. Når vi gjør det, ser skriptet slik ut: 1 % Implementering av halveringsmetoden for likninga 2 % sqrt(x)-cos(x)=0 med a=0 og b=pi/2 som start-grenser 3 % Grenser 5 a=0; 6 b=pi/2; 7

8 % Funksjonsverdier 9 Fa=sqrt(a)-cos(a); 10 Fb=sqrt(b)-cos(b); 11 12 % Starter for-løkke som kjøres 10 ganger 13 while abs(b-a)>1e-3 1 c=(a+b)/2; % Midtpunktet 15 Fc=sqrt(c)-cos(c); % Funksjonsverdi i midtpunktet 16 if Fa*Fc<0 17 b=c; % Setter ny b til c 18 else 19 a=c; % Setter ny a til c 20 end 21 end 22 23 % Regner ut nytt midtpunkt og skriver svaret til skjerm 2 x=(a+b)/2 Vi kjører skriptet: >> Halvering 0.616 Vi kk et noe annet svar enn det vi kk i leksjon 5; der kk vi 0.620 med 10 iterasjoner. Selv om vi ikke vet om dette svaret er mer eller mindre nøyaktig enn det svaret vi kk sist, har dette svaret en klar fordel: Vi vet at feilen ikke er større enn 0.001. Eller, siden vi har regna ut midtpunktet mellom a- og b-verdiene vi kk til slutt, vet vi at feilen er mindre enn 0.0005. while-løkka har nemlig kjørt helt til intervallet [a, b] har bredden 0.001. Selvsagt kan vi sette dette tallet enda lavere og få et mer nøyaktig svar. Om vi endrer linja til while abs(b-a)>1e-5, får vi dette svaret: >> format long >> Halvering 0.6171629950902 Her har vi skrevet ut svaret vårt med litt ere desimaler. Dette poenget står ganske sentralt i kurset: Selv om vi bare nner en tilnærma løsning, kan vi få løsninga til å være så nøyaktig som vi selv måtte ønske. Og da er det kanskje ikke så farlig at den ikke er eksakt... b) 2x Vår nye f(x) blir altså f(x) = 2x x. Siden f(0) = og f() = 2, og f er kontinuerlig, må f ha minst ett nullpunkt på intervallet [0, ]. Vi justerer a og b tilsvarende i linje 5 og 6, og oppdaterer f(x) i linje 9, 10 og 15. I while-linja setter vi nøyaktigheten til 2 10 5. Med disse endringene blir skriptet vårt seende slik ut: 5

1 % Implementering av halveringsmetoden for likninga 2 % 2x-sqrt(x)-=0 med a=0 og b= som start-grenser 3 % Grenser 5 a=0; 6 b=; 7 8 % Funksjonsverdier 9 Fa=2*a-sqrt(a)-; 10 Fb=2*b-sqrt(b)-; 11 12 while abs(b-a)>2e-5 13 c=(a+b)/2; % Midtpunktet 1 Fc=2*c-sqrt(c)-; % Funksjonsverdi i midtpunktet 15 if Fa*Fc<0 16 b=c; % Setter ny b til c 17 else 18 a=c; % Setter ny a til c 19 end 20 end 21 22 % Regner ut nytt midtpunkt og skriver svaret til skjerm 23 x=(a+b)/2 Vi kjører skriptet og får (med mange desimaler) >> Halvering 2.83070983886719 Likninga kan løses eksakt. Det er en andregradslikning ikke i x men i x. Om vi lar u = x, slik at u 2, får vi 2u 2 u = 0 u = ( 1) ± ( 1) 2 2 ( ) 2 2 1 + 33 ( 1 + ) 2 ( ) 2 33 1 + 33 = 16 = 1 ± 33 Vi har her benyttet oss av at x ikke kan være negativ. Vi sammenligner løsninga vår med det eksakte svaret: >> Eksakt=(1+sqrt(33))^2/16; >> Eksakt-x ans = -6.53069651729618e-07 6

Feilen er altså 6.53 10 7 ; vi er godt innenfor. c) Vi lager ei funksjonsl som implementerer f(x). Vi kan godt velge å bruke den siste funksjonen, 2x x : 1 function f=funktilinthalv(x) 2 3 % Funksjon som vi skal finne nullpunktet til % Blir brukt av skriptet Halvering.m 5 6 %f=sqrt(x)-cos(x); 7 f=2*x-sqrt(x)-; Her ser vi også at vi har gamle-funsjonen, f(x) = x cos(x) på lur; det er fort gjort å kommentere inn denne og ut den andre. (Ta bort prosenttegnet i linje 6 og sett det inn i linje 7.) Vi kan nå referere til denne funksjonen i halveringsmetode-skriptet vårt (linje 13, 1 og 18): 1 % Implementering av halveringsmetoden for likninga 2 % FunkTilIntHalv(x)=0, der funksjonen er gitt i ei eiga 3 % Funksjonfil. a og b er start-grensene for metoden. 5 % Grenser 6 a=0; 7 b=; 8 9 % Presisjon 10 Pres=2e-5; 11 12 % Funksjonsverdier 13 Fa=FunkTilIntHalv(a); 1 Fb=FunkTilIntHalv(b); 15 16 while abs(b-a)>pres 17 c=(a+b)/2; % Midtpunktet 18 Fc=FunkTilIntHalv(c); % Funksjonsverdi i midtpunktet 19 if Fa*Fc<0 20 b=c; % Setter ny b til c 21 else 22 a=c; % Setter ny a til c 23 end 2 end 25 26 % Regner ut nytt midtpunkt og skriver svaret til skjerm 27 x=(a+b)/2 På den måten er det enklere å oppdatere skriptet når vi skal løse andre likninger senere. Her har vi også denert presisjonen, Pres, i ei eiga linje (linje 10). Variabelen Pres dukker opp igjen i while-linja (linje 16). 7

d) Før while-løkka lager vi oss en variabel vi kan kalle teller og setter denne til å være 0. Inni while-løkka lar vi denne øke med 1 for hver gang, teller=teller+1;. Til slutt, etter while-løkka, skriver vi teller til skjerm. Med dette kan skriptet se slik ut: 1 % Implementering av halveringsmetoden for likninga 2 % FunkTilIntHalv(x)=0, der funksjonen er gitt i ei eiga 3 % Funksjonfil. a og b er start-grensene for metoden. 5 % Grenser 6 a=0; 7 b=; 8 9 % Presisjon 10 Pres=2e-5; 11 12 % Teller antall iterasjoner 13 teller=0; 1 15 % Funksjonsverdier 16 Fa=FunkTilIntHalv(a); 17 Fb=FunkTilIntHalv(b); 18 19 while abs(b-a)>pres 20 c=(a+b)/2; % Midtpunktet 21 Fc=FunkTilIntHalv(c); % Funksjonsverdi i midtpunktet 22 if Fa*Fc<0 23 b=c; % Setter ny b til c 2 else 25 a=c; % Setter ny a til c 26 end 27 teller=teller+1; 28 end 29 30 % Regner ut nytt midtpunkt og skriver svaret til skjerm 31 x=(a+b)/2 32 % Skriver antall iterasjoner til skjerm 33 Iterasjoner=teller Vi tester at det fungerer: >> Halvering 2.83070983886719 Iterasjoner = 19 Vi måtte iterere 19 ganger for å oppnå den presisjonen vi ville ha. 8

Oppgave 3 Newtons metode (og litt til) x n+1 = x n f(x n) f (x n ). a) Med f(x) = x cos x blir iterasjonsskjemaet seende slik ut: xn cos x n x n+1 = x n 1. 2 x n + sin x n Newtons metode er nok enklest å implementere som ei for-løkke: 1 % Skript som implementerer Newtons metode 2 3 % Bestemmer x_0 x=1; 5 6 for i=1:5 7 x=x-(sqrt(x)-cos(x))/(1/(2*sqrt(x))+sin(x)) % Iterasjonsformel 8 end Her har vi bestemt oss for å starte med x 0 = 1 og bruke 5 iterasjoner. Vi tester: >> format long >> NewtonMetFor 0.657318198203377 0.617610525097 0.6171371002502 0.6171370872883 0.6171370872883 Etter bare 5 iterasjoner har vi tydeligvis fått svaret med 15 desimaler! Her har vi ksert antall iterasjoner på fårhånd uten å vite hvor mange vi strengt tatt trenger. Dersom vi ønsker å bare iterere så mange ganger vi trenger for en gitt presisjon, kan vi bruke ei while-løkke. I skriptet NewtonMetWhile.m har vi implementert dette: % Skript som implementerer Newtons metode % Bestemmer x_0 x=1; 9

% Preisjon Pres=1e-5; % Lager en variabel for forrige x-verdi xgml=100; while abs(x-xgml)>pres xgml=x; x=x-(sqrt(x)-cos(x))/(1/(2*sqrt(x))+sin(x)); % Iterasjonsformel end % Skriver svaret til skjerm x Her får vi bare skrevet det endelige svaret til skjerm uten å måtte se utregninga for hver iterasjone: >> NewtonMetWhile 0.6171370872883 Merk at vi i linje 10 har tilordna et nokså tilfeldig tall til variabelen xgml. Pass på at tallet er tilstrekkelig ulikt x 0 i linje til at while-løkka kommer i gang. b) Som i oppgave 2 innfører vi en variabel som teller antall iterasjoner: 1 % Skript som implementerer Newtons metode 2 3 % Bestemmer x_0 x=1; 5 6 % Preisjon 7 Pres=1e-5; 8 9 % Teller antall iterasjoner 10 teller=0; 11 12 % Lager en variabel for forrige x-verdi 13 xgml=100; 1 15 while abs(x-xgml)>pres 16 xgml=x; 17 x=x-(sqrt(x)-cos(x))/(1/(2*sqrt(x))+sin(x)); % Iterasjonsformel 18 teller=teller+1; 19 end 20 10

21 % Skriver svaret til skjerm 22 x 23 % Skriver antall iterasjoner til skjerm 2 Iterasjoner=teller Vi kjører skriptet igjen: >> NewtonMetWhile 0.6171370872883 Iterasjoner = Her klarte vi oss med bare iterasjoner for å få (minst) re rette desimaler. Typisk vil Newtons metode gi et nøyaktig svar etter langt færre iterasjoner enn halveringsmetoden; vi sier at den konvergerer raskere. Men halveringsmetoden har en klar fordel: Den er mye mer idiotsikker. Dersom vi har kontrollert at f(a) og f(b) har ulike fortegn og at f(x) er kontinuerlig på [a, b], kan vi være helt sikre på at vi har funnet et riktig nullpunkt med halveringsmetoden. Slik er det ikke med Newtons metode. Hvis vi har å gjøre med en funksjon som gir veldig høye verdier for den deriverte, kan vi få at x n+1 x n selv om vi slett ikke har noe nullpunkt. Dessuten kan det hende at metoden ikke går mot noen bestemt verdi i det hele. Vi ser også at iterasjonsformelen bryter sammen dersom f (x n ) = 0. Hvis den deriverte er nær 0, vil vi typisk nne et helt annet nullpunkt enn det vi sikta oss inn på da vi valgte x 0 ; der er ingen garanti for at Newtons metode, når den fungerer, vil gi det nullpunktet som ligger nærmest vårt valg av x 0. Med halveringsmetoden, derimot, har vi i utgangspunktet sikra at nullpuktet skal ligge mellom a og b. Så hva bruker vi i praksis, da halveringsmetoden eller Newtons metode? -Stort sett Newtons metode. c) Vi skal nå nne nullpunkt for funksjonen 2x x, som har derivert 2 1 2. Vi oppdaterer iterasjonsformelen i linje 17: x x=x-(2*x-sqrt(x)-)/(2-1/(2*sqrt(x))); Om vi beholder x 0 og presisjonen Pres vi hadde fra før, nner vi svaret etter iterasoner: >> NewtonMetWhile 2.8307033081725 Iterasjoner = Hadde vi starta med x 0 = 3, hadde det holdt med 3 iterasjoner. 11

d) Vi skal altså løse likninga g(x). Om vi itererer på x n+1 = g(x n ) og får at x n+1 x n, har vi jo at x n g(x n ), og likninga er løst tilnærma. e) Vi starter med likninga cos x som også kan skrives som cos 2 x eller arccos x. Vi lager ei enkel for-løkke og tester begge formuleringene: 1 % Skript som forsøker å løse ei likning ved fikspunkt-iterasjon; 2 % x_{n+1}=f(x_n) 3 % Start-verdi 5 x=1; 6 7 for i=1:7 8 x=(cos(x))^2 9 end Vi prøver: >> FiksPunktFor 0.29192658172629 0.91717209958988 0.36975922832551 0.8690555288063 0.16387293352056 0.8361285521021 0.9073772577787 Dette ser dårlig ut. Ut fra de 7 første iterasjonene er det vanskelig å se om det konvergerer i det hele tatt. Om vi prøver med 50 iterasjoner, får vi 0.66567, med 100 iterasjoner får vi 0.666, med 500 får vi 0.6171. Det viser seg at det går mot rett svar men ikke fort! Om vi prøver oss med den andre formuleringa, arccos x, derimot, går det ikke i det hele tatt; svaret blir komplekst. Den andre likninga, 2x kan omformuleres til ( + x)/2 eller til (2x ) 2. Vi velger x 0 = 5 og prøver den første varianten: 1 % Skript som forsøker å løse ei likning ved fikspunkt-iterasjon; 2 % x_{n+1}=f(x_n) 3 % Start-verdi 12

5 x=5; 6 7 for i=1:7 8 x=(+sqrt(x))/2 9 end 10 I kommandovinduet får vi: >> FiksPunktFor 3.11803398879895 2.88289778110638 2.8895910139 2.839237273831 2.8319961651886 2.830899967863 2.83073172901953 Dette ser jo nt ut. Fullt så nt går det ikke med den andre varianten: >> FiksPunktFor 36 62 8551536 2.920785865181262e+16 3.12396028097062e+33.65777866102903e+67 8.677960822055000e+135 Selv om man her lett får intrykk av at dette er ei rimelig laus kanon av en metode, er det absolutt en nyttig metode i visse sammenhenger. 13

Ekstra-oppgave: Bursdag samme dag Ut fra hintet vi får, kan vi se at sannsynligheten for at n elever har bursdag på ulike datoer blir 365 365 36 365 363 365 n + 1.... 365 365 Spørsmålet er: Hva må n være for at dette produktet skal bli mindre enn 1/2? Det kan vi nne ut på ere måter. En måte kan være å lage et lite skript med ei while-løkke der vi for hver iterasjon multipliserer med neste faktor helt til produktet bikker 1/2. Dette kan gjøres slik: 1 % Skript som regner ut hvor mange elever det må være i en 2 % skoleklasse for at der mest sannsynlig vil være minst to 3 % elever med bursdag på samme dag 5 % Setter sannsynligheten P til én 6 P=1; 7 % Setter antall elever til null 8 elever=0; 9 10 while P>1/2 11 elever=elever+1; % Øker antall elever med 1 12 P=P*(365-elever+1)/365; % Oppdaterer sannsynlighet 13 end 1 15 % Skriver resultatet til skjerm 16 elever Vi kjører skriptet, som vi har kalt SammeBursdag.m, i kommandovinduet: >> SammeBursdag elever = 23 Med andre ord må vi regne med det i en skoleklasse med 23 eller ere elever vil være elever med samme fødselsdag. 1