MMA132: Laboration 1 Introduktion till MATLAB De flesta numeriska metoder låter oss få en tillräckligt bra lösning på ett matematiskt problem genom att byta ut komplexa matematiska operationer med kombinationer av enklare operationer. I praktiken betyder detta att man byter ut abstrakt och komplex teori som det är svårt och tidsödande att arbeta med mot stora mängder enkla beräkningar. Den främsta fördelen med detta är att vi idag har tillgång till maskiner som kan utföra många beräkningar snabbt och korrekt: datorer. Under de här laborationerna så skall vi använda datorer, mer specifikt den populära programvaran MATLAB för att undersöka olika numeriska metoder och fenomen på ett sätt som är mer praktiskt än at räkna med penna och papper och mer likt det sätt som man arbetar med numeriska metoder som ingenjör. Denna första laboration skall utföras under 4 timmar. Laborationen kan göras på egen hand med rekommeras att göras i par. Laborationen består av ett antal exempel på funktioner i MATLAB och hur dessa används. Tanken är att ni under laborationens gång skall jobba parallellt med handledningen och experimentera lite utifrån exemplen på egen hand. Denna laboration är menad att introducera MATLABs mest grundläggande funktioner och visa hur man kan använda MATLAB för att snabbt lösa vanliga matematiska problem. Ett allmänt tips för laborationen och övningsuppgifterna är att tänka igenom precis vad du vill göra (det kan också vara en bra idé att skriva ner detta) innan du börjar skriva MATLAB-kod för att lösa en övningsuppgift eller testa ett laborationsexempel. 1
Laboration 1 Denna laboration behandlar några grundläggande funktioner i MATLAB: beräkning av aritmetiska uttryck, lagring av värden i variabler, lagring av vektorer och matriser samt lösning av linjära ekvationssystem. För den som har tid över finns också exempel på hur man kan arbeta med polynom i MATLAB. Det kanske enklaste sättet att komma igång med MATLAB är att arbeta igenom ett par exempel och läsa ett par problem. Ni ska gå igenom följande exempel och sen göra övningarna som finns i slutet av handledningen. Använd gärna hjälp-funktionen i MATLAB för att läsa mer om de kommandon som används och se fler exempel på hur de kan användas och vad det finns för liknande kommandon. Introduktion till MATLAB MATLAB är ett kraftfullt och komplext program som används för olika typer av tekniska beräkningar. Det är inte helt lätt att lära sig och även den som har använt programmet i flera år upptäcker med jämna mellanrum funktioner som de inte visste om och nya sätt att lösa problem. De här labbarna förutsätter inte att man kan någonting om MATLAB och är uppbyggda som att man får pröva sig fram med olika exempel på vad programmet kan göra. Var beredd på att saker inte alltid kommer att fungera på första försöket. När något går fel så försöker MATLAB ofta berätta vad det är som inte fungerar. Se ett exempel i figur 2. Läs och försök förstå dessa felmeddelanden i så stor utsträckning som möjligt. MATLAB har också en bra inbyggd hjälpfunktion Har du erfarenhet av programmering så kan det vara värt att titta på sidan 6 innan du börjar med Exempel 1. Här och på sidan 6 finns det bilder på hur programmet ser ut där några användbara eller viktiga saker är markerade. Om du inte kommer ihåg var någon finns eller inte förstår vad ett visst ord betyder så kan du se om det finns här. Figur 1: Huvudvy i MATLAB. Vad siffrorna markerar kan man läsa i tabell 1. 2
1 Kommandofönstret (Command Window): Här skrivet du in dina kommandon och här skrivs dina resultat ut. 2 Här kan du se vilken mapp som MATLAB för tillfället letar efter m-filer i och vad som finns i den mappen. 3 Här kan du se de variabler som är är definierade just nu och vilken sorts variabel de är och ibland deras värde. 4 Här kan du se din kommando historia. Om du lyckades göra något för en stund sen men har glömt hur så kan du titta efter här. 5 Här kan du klicka för att komma åt den inbyggda hjälpfunktionen. Tabell 1: Förklaring till siffrorna i figur 1 Figur 2: Kommandofönster med felmeddelande. Att anropa en funktion i MATLAB I Matlab finns många färdiga funktioner, både matematiska formler och andra typer av funktioner. Ordet funktion i MATLAB betyder inte riktigt samma sak i MATLAB som i matematiken (du läsa mer om funktioner på sidan 9) men vi går inte in på de tekniska detaljerna här. Funktioner i MATLAB används på följande sätt: Namn på variabel du vill spara resultatet i = namn på funktionen( variabler du vill skicka in ) Exempel: om vi vill räkna ut vad y = sin ( π 2 ) är så skriver vi y = sin(pi/2) i kommandofönstret och får svaret y = 1 Vissa funktioner skickar tillbaka mer än ett svar och då måste man ange en lista på variabler att spara resultatet i: [utvariabel 1, utvariabel 2 o.s.v.] = namn på funktionen( invariabel 1, invariabel 2 o.s.v. ) 3
Exempel 1: MATLAB som avancerad miniräknare Det är enkelt att använda MATLAB för att beräkna olika matematiska uttryck. Prova att skriva 2 + 2*3 i kommando-fönstret. Resultatet av en uträkning kan sparas i en variabel. Prova att skriva resultat = 2 + 2*3 i kommando-fönstret. Du kan få fram ett värde som har sparats i en variabel genom att skriva variabelns namn på kommandoraden. Bekräfta detta genom att skriva resultat på kommandoraden. Vill man beräkna samma uttryck flera gånger är det bra att använda variabler eftersom de kan stoppas in i matematiska uttryck precis som siffror. Prova att skriva resultat*3 i kommando-fönstret. Nu är det dags att se hur MATLAB kan beräkna värdet av en matematisk funktion för flera värden på en gång. För att beräkna värdet av y = t 2 för t = 0, t = 1 och t = 2 så måste vis först definiera vilka t-värden MATLAB skall använda. Detta gör vi med hjälp av en lista, ibland kallad vektor (på engelska array, list eller vector). I MATLAB skapas listor genom att skriva in deras element, skilda med antingen mellanslag eller komma, mellan []. Prova att skriva t=[0 1 2] i kommandofönstret. Vi vill nu beräkna värdet på y. Prova att skriva y = t.^2 i kommandofönstret. Notera punkten mellan t och ^. Denna punkt är där därför att vi vill ta varje element i listan upphöjt till två. Skulle punkten inte vara där skulle MATLAB tolka y = t 2 som att du vill ta listan t och matrismultiplicera den med sig själv. Detta kommer naturligtvis inte att fungera. Prova gärna på egen hand vad som händer om du försöker använda +, -, * och / på antingen två listor eller en lista och ett tal. Vad händer när du sätter punkter framför? För att rita en graf över det beräknade värdena av y = t 2 så skriv plot(t,y) i kommandofönstret. Eftersom vi har beräknat värdet i så få punkter blir grafen inte särskilt slät. För att få en bättre graf vill vi beräkna funktionsvärdet i fler punkter. För att skapa en lista med många punkter kan man skriva [första värde i listan:steglängd:sista värde i listan] i kommandofönstret. Skapar man en lista med många värden kan det vara opraktiskt att MATLAB skriver ut alla värden. Vill man att MATLAB inte skall skriva ut resultatet av en beräkning eller definition kan man sätta ; sist på raden. Prova att skriva 4
t = [0:0.1:2]; i kommandofönstret. Nu kan nya värden av y beräknas genom att återigen skriva y = t.^2 i kommandofönstret. Rita också upp den nya grafen genom att skriva plot(t,y). Det är också enkelt att beräkna värdet av andra funktioner för värdena i t, för att få fram en lista på värden för z = t skriv z = sqrt(t); i kommandofönstret. Vi kan också rita upp flera grafer i samma fönster. Prova att skriva plot(t,y,t,z) i kommandofönstret. Övning 1 Rita en fin graf för funktionerna f(x) = e x2 (tips: kolla in MATLAB-kommandot exp) och g(x) = 1 1 för 2 x 2 i samma bild. 1+x 2 5
Viktigt verktyg: m-filer Om du har en komplicerad beräkning att göra kan det bli mycket att skriva i kommandofönstret. Det kan också vara besvärligt att spara allting du har skrivit i kommandofönstret, speciellt eftersom man då också sparar de gånger man har råkat skriva fel. Ett bättre alternativ är ofta att använda sig av m-filer. En m-fil är en vanlig text-fil som man har skrivit MATLAB-kommandon i. Genom att skriva namnet på filen i kommandofönstret kommer MATLAB att köra kommandona i den ordning de dyker upp i filen. Det finns vissa regler som måste följas för att en m-fil skall fungera. Varje rad i filen fungera om den hade skrivits i kommandofönstret (MATLAB hjälper dig faktiskt med att kontrollera detta, fråga din handledare). Filen kan inte heller heta vad som helst, namnet får inte innehålla några specialtecken, såsom?,! eller mellanslag. Filnamnet får heller inte börja med en siffra (men siffror senare i namnet går bra). För att MATLAB skall kunna hitta filen måste mappen som filen finns i vara vald som Current Folder längst upp i MATLAB-fönstret. Skapa en ny m-fil genom att klicka på (File New Script) och skriv in de kommandon som användes i det av de tidigare exemplen du tyckte mest om. Spara filen och skriv sedan in namnet på filen i kommandofönstret för att göra om exemplet. Figur 3: MATLABs inbyggda textredigerare. 1 Här skriver du dina kommandon. För det mesta så betyder ny rad nytt kommando, undantaget är matriser där kommandot slutar på den rad där matrisen avslutas (med ]). Om du har ett väldigt långt kommando så kan du skriva... och sen fortsätta med kommandot på nästa rad. 2 Här finns knappar för att skapa ny fil, öppna fil och spara fil. 3 Du kan köra din fil genom att klicka på Run". Kom ihåg att resultatet kommer i ett annat fönster. 4 Om du öppnar flera filer så lägger sig de här som flikar. 5 MATLABs textredigerare försöker upptäcka fel innan du kör filen. Rött betyder att filen inte kommer att gå att köra, orange att de kan orsaka problem men att filen kan köras och grönt betyder att MATLAB inte hittat några fel (det finns dock fel som MATLAB inte kan hitta). 6 Här kan du se på vilken rad och i vilken kolumn du skriver just nu. Tabell 2: Förklaring till siffrorna i figur 3 6
Figur 4: Kommandofönster med felmeddelande från m-fil. De gröna pilarna visar var du kan se vilken fil som felet skett i, vilken rad i filen felet skett på samt vilken kolumn som felet skett i. I slutet av laboration 1 introducerades m-filer. Dessa var filer där vi kunde skriva in flera MATLABkommandon och köra dem efter varandra vilket för det mesta är mer praktiskt än att arbeta direkt i kommandofönstret. För denna laboration är det rekommerat att du använder m-filer i så stor utsträckning som möjligt. Skapa en ny m-fil genom att klicka på (File New Script) och skriv in de kommandon som användes i det av de tidigare exempel du tyckte mest om. Spara filen och skriv sedan in namnet på filen i kommandofönstret för att göra om exemplet. Ibland kan det vara svårt att komma ihåg precis vad det var man gjorde i en m-fil. Då kan man skriva kommentarer i den. Kommentarer skriver man genom att sätta % först på raden. Det kan t.ex. se ut så här: % Det här är en kommentar. % Nu skall jag räkna ut 2+2 x = 2+2 % Hoppas att det blir fyra m-filer är bra om man vill läsa flera liknande problem eller vill spara sina lösningar till senare. Om det är en speciell metod man vill använda många gånger kan det vara bättre att skriva en funktion (se sidan 9). 7
Exempel 2: Polynom i MATLAB Man kan beräkna värdet av polynom i MATLAB på samma sätt som andra funktioner men det finns en del inbyggda funktioner i MATLAB som gör att polynom kan representeras ast med en lista av koefficienter. Polynomet p(t) = t 3 2t + 1 kan representeras med vektorn [1 0-2 1]. Värdet på polynomet kan beräknas med hjälp utav kommandot polyval. För att beräkna värdet av p(t) för samma värden på t som vi använde i föregåe exempel och rita upp resultatet skriv t = [0:0.1:2]; poly_coeff = [1 0-2 1]; p = polyval(poly_coeff,t); plot(t,p) i en m-fil. Döp m-filen till något lämpligt och kör den för att få fram resultatet. Ett annat användbart kommando är roots som hittar rötterna till ett polynom. Prova att skriva r = roots(poly_coeff) i kommandofönstret. Jämför resultatet med bilden av polynomet du ritade upp tidigare. Det kan vara lättare att se var rötterna finns om du skriver grid i kommandofönstret. Det finns många inbyggda kommandon som kan användas för att jobba med polynom i MATLAB. Ett exempel är kommandot conv som kan användas för att multiplicera två polynom. conv är en förkortning av convolution, faltning på svenska. Om du inte redan vet vad detta så slå gärna upp det på din fritid, det kan mycket väl dyka upp i senare matematik kurser. Det finns också ett kommando som låter dig dividera polynom, deconv 1, för att få reda på mer om hur dessa kommandon fungerar, slå upp dom med MATLABs hjälpfunktion. Övning 2 Låt p(x) = x 7 + 2x 6 + x 2 + 2x och q(x) = x 4 + x 3 + 3x 2 + 5x + 2. Hitta ett enkelt sätt att beräkna koefficienterna f ör polynomet r(x) = p(x)q(x) m.h.a. kommandot conv och leta sedan upp rötterna till r(x) med kommandot roots. Rita upp r(x) för 1,5 x 1,5 och kolla med bilden så att rötterna du fått verkar rimliga. 1 Denna metod saknas i Freemat. 8
Funktioner Funktioner i MATLAB liknar funktioner i matematiken. Funktioner kan ses som små datorprogram som tar emot en (eller flera) variabler och skickar tillbaka en (eller flera) andra variabler. Under förra labben har ni redan använt flera olika funktioner, t.ex. exp, plot och deconv. Nedan finns en bild av hur funktioner fungerar. x x,y z = f(x) f z function [a,b] [a,b] = function(x,y) Figur 5: Illustration som visar likheterna mellan en matematisk funktion och en MATLAB-funktion. Det finns flera sätt att skapa funktioner i MATLAB. Vill man skapa en enkel funktion kan man använda inline eller @. För att få en funktion som beräknar f(x) = sin(x) + cos(x) kan man skriva f1 = inline( sin(x)+cos(x), x ) eller f2 = @(x) sin(x) + cos(x) Du kan sedan beräkna värdet av dessa funktioner för x = 1 genom att skriva t.ex. f1(1) eller f2(1). Notera att även om du har använt variabeln x i definitionen av funktionen så kan du fortfarande använda x utanför funktionen utan att det blir några problem. De variabler du definierar inuti funktionen syns helt enkelt inte utanför funktionen. Detta kan vara speciellt användbart när du använder en funktion som någon annan har skrivit. Viktigt: Det är viktigt att hålla reda påom en variabel är en funktion eller en lista. Om f1 är funktionen vi nyss definierade så ger f1(n) värdet av funktionen för x = n men om f1 vore en lista skulle f1(n) ge det n:te elementet i listan. Detta innebär t.ex. att f1(1.5) skulle fungera bra om f1 är en funktion men dåligt om f1 vore en lista. Det fungerar på samma sätt för funktioner av flera variabler och matriser. f(x,y) för en funktion ger f(x,y) men f(x,y) för en matris ger elementet som finns i den x:te raden och y:te kolonnen. För mer avancerade funktioner får man skriva en speciell m-fil. Första raden i m-filen skall vara skriven på detta sätt: function [ variabler du vill skicka tillbaka ] = namn på funktionen( variabler du vill skicka in ) Namnet på funktionen måste 2 vara samma som namnet på m-filen!. Om du vill ha en funktion som räknar ut värdena för en annan funktion får hundra värden mellan a och b och dessutom ritar upp grafen för dessa värden så kan du skriva så här: 2 Rent teknisk sett så fungerar funktionen ändå men den måste anropas med namnet på m-filen istället för namnet på funktionen. 9
function [f_val] = plot_example(f,a,b) % Funktion som beräknar värdet av f % för hundra värden mellan a och b % samt ritar grafen för dessa värden. % Skapa lista med hundra värden mellan % a och b. h = (b-a)/100; x = a:h:b; % Beräkna värden för f, vi antar att % f klarar av att räkna med listor f_val = f(x); % Rita grafen plot(x,f_val) % Markera axlar på ett bra sätt title('grafen för funktionen') xlabel('x') ylabel('funktionsvärde') På sidan 2.1-2.2 i Egnesund kan du läsa om intervallhalveringsmetoden som kan användas för att lösa icke-linjära ekvationer. Denna metod finns redan implementerad som en funktion i MATLAB och heter fzero. Om vi tittar på fzero i MATLABs hjälp så ser vi att funktionen skall användas så här: x = fzero(f,x0) Där x är lösningen, f är funktionen och x0 är en första gissning. Om vi vill kan vi också använda funktionen på det här sättet [x,fval] = fzero(f,[a b]) där x är lösningen, fval är funktionens värde i lösningen, f är funktionen och vi tror att lösningen skall finnas mellan a och b. Rita upp funktionen f1 eller f2 mellan x = 2 och x = 2 med hjälp av plot_example. Titta på grafen och välj lämpliga värden på a och b. Se om du kan hitta ett nollställe genom att skriva [x,fval] = fzero(f,[a b]). Övning 3 Skriv en MATLAB-funktion som tar en funktion och två värden som in-argument och sedan ritar upp funktionen mellan de två värdena och hittar ett nollställe mellan nollställena med hjälp av funktionen fzero. Kom ihåg att välja funktioner och intervall så att det verkligen finns ett nollställe när du testar funktionen, t.ex. kan du testa med funktionen f = @(x) sin(x) och se om du kan hitta rätt nollställe mellan a = 1 och b = 1. 10
Exempel 2: Villkor och loopar Tidigare i kursen har vi talat om iterativa metoder för lösning av linjära ekvationer (intervallhalveringsmetoden, Newton-Raphson metoden, sekantmetoden och fixpunktsmetoden). Alla dessa metoder byggde på att göra en enkel beräkning flera gånger efter varandra. I denna del skall vi lära oss hur vi kan få MATLAB att arbeta iterativt. for-loopar Ett sätt att få MATLAB att upprepa en viss beräkning flera gånger är att använda en for-loop. En for-loop konstrueras på följande sätt: for index variabel t.ex. i = lista t.ex. list Här står de MATLAB-kommandon som utför den beräkning som vi vill göra. Oftast så skjuts de in lite för att det ska bli tydligt vad som är inuti och vad som är utanför for-loopen. Kommandona körs en gång per element i listan list och om i dyker upp i något kommando så kommer det att vara motsvarande värde i list. Om man vill skriva ett program som utför en beräkning n gånger kan man skriva for i = 1:n Här står de MATLAB-kommandon som som man vill köra n gånger. Låt oss testa att skriva en for-loop genom att skriva en funktion som räknar ut fakulteten av ett tal. n! = n (n 1) (n 2)... 2 1 En m-fil för detta kan se ut som följer (prova gärna och se om du kan skriva den på ett annat sätt): function f = factorial_calc(n) % factorial_calc beräknar fakulteten % av ett positivt heltal med hjälp av % en for-loop % 0! = 1 f = 1; % Här multipliceras värdena 1 till n % med varandra i en for-loop. % Notera att för MATLAB så betyder % 1:n och [1:1:n] samma sak for i = 1:n % i kommer att variera från 1 till n % Första varvet kommer f = 1*1 % Andra varvet kommer f = 1*2 % Tredje varvet kommer f = 2*3 % Tredje varvet kommer f = 6*4 o.s.v f = f*i; 11
Om du byter ut i = 1:n mot i = 1:2:n kommer du att få en funktion som räknar ut produkten av alla udda tal mellan 1 och n f(n) = m (m 2)... 5 3 1 där m = n om n är udda och m = n 1 om n r jämn Om vi istället vill skriva en funktion som räknar ut produkten av alla element i en lista så kan vi enkelt ordna det function f = list_prod(list) % Beräknar produkten av alla elementen i list f = 1; for i = list f = f*i; Jämför den här funktionen med funktionen för fakultet och se till att du förstår skillnaden. I MAT- LAB finns det också färdiga funktioner för fakultet och produkt av elementen i en lista, de heter factorial respektive prod. Villkor När man utför numeriska beräkningar är det inte alltid man vet i förväg hur många gånger man vill utföra en beräkning utan man vill enkelt fortsätta tills svaret är tillräckligt bra. Man kan få MATLAB att kolla hur bra en lösning är åt oss. Först vill vi kunna jämföra tal med varandra, det finns det ett antal olika kommandon för i MATLAB a < b a < b a mindre än b a <= b a b a mindre än eller lika med b a > b a > b a större än b a >= b a b a större än eller lika med b a == b a = b a lika med b Tabell 3: Tabell över olika kommandon för att jämföra saker i MATLAB. Det finns en viktig skillnad mellan a = b och a == b. När bara ett likhetstecken, =, används säger vi att vi vill spara värdet till höger i variabeln till vänster. När två likhetstecken används, ==, så jämför värdet i variabeln på höger sida med variabeln på vänster sida och ser om dom är lika. När vi skriver a == b så kommer resultatet att bli antingen 0 (om a b) eller 1 (om a = b). Prova och skriv följande i kommandofönstret: 1 < 2 15 + 7 <= 12 3*5 == 15 Blir svaren vad du förväntade dig? Om man jämför två listor med varandra så kommer jämförelserna att göras elementvis. Vi kan också använda jämförelser för att bara göra något när ett visst villkor är uppfyllt med hjälp 12
av en if-sats. if-satser skrivs på följande vis: if jämförelse Här står de MATLAB-kommandon som bara skall utföras om jämförelsen är sann (villkoret är uppfyllt) Det finns också en variant av if-satsen där vi kan få MATLAB att bete sig på olika sätt beroe på om villkoret är uppfyllt eller inte. if else jämförelse Här står de MATLAB-kommandon som bara skall utföras om jämförelsen är sann (villkoret är uppfyllt) Här står de MATLAB-kommandon som bara skall utföras om jämförelsen är falsk (villkoret är inte uppfyllt) Vi kan bygga ut funktionen för fakultetsberäkning som vi tidigare skrev: function f = factorial_calc(n) % factorial_calc beräknar fakulteten % av ett positivt heltal med hjälp av % en for-loop % 0! = 1 f = 1; % Kontrollera att n är ett positivt tal if n > 0 % Här multipliceras värdena 1 till n % med varandra i en for-loop. % Notera att för MATLAB så betyder % 1:n och [1:1:n] samma sak for i = 1:n % i kommer att variera från 1 till n % Första varvet kommer f = 1*1 % Andra varvet kommer f = 1*2 % Tredje varvet kommer f = 2*3 % Tredje varvet kommer f = 6*4 o.s.v f = f*i; % Vad skall vi göra om n inte är positivt else % Kommandot disp skriver ut text i % kommandofönstret disp('n måste vara större än 0') f = 0; 13
while-loopen Nu när vi vet hur jämförelser fungerar kan vi också få MATLAB att fortsätta göra samma sak, om och om igen tills ett visst villkor har uppfyllts. Detta görs enklast med en så kallad while-loop: while jämförelse Här står de MATLAB-kommandon som utf ör den beräkning som vi vill göra. MATLAB kommer att utföra dessa om och om igen tills jämförelsen inte är sann längre. Med en while-loop kan man enkelt implementera de iterativa metoder som vi användes för attt lösa icke-linjära ekvationer i kapitel två och gruppuppgift 1. Nedan finns en enkel implementation av Newton-Raphson metoden för att lösa x 3 2x 2 + 1 = 0. function y = newton_raphson(x) % Funktion som numerisk löser % x^3-2*x^2+1 = 0 % med Newton-Raphsons metod och % startvärde x. % Här bestämmer vi att vi vill ha % 3 korrekta decimaler i vårt svar. eps = 0.0005; % Vi låter y vara den 'nya lösningen' % och x vara den 'gamla lösningen'. % Vi få ta till ett litet knep för att % se till att MATLAB skall räkna fram % en ny lösning minst en gång. x_new = x; x = x_new + 2*eps; % Här använder vi Newton-Raphsons metod. % Vi avgör hur bra uppskattningen är % genom att jämföra de två senaste iterationerna. while abs(x_new-x) > eps % Vår 'nya lösning' blir vår 'gamla lösning' % inför nästa varv. x = x_new; % Beräkning av funktionens värde och derivata % för den gamla lösningen. f = x^3-2*x^2+1; f_p = 3*x^2-4*x; % Beräkning av ny lösning. x_new = x - f/f_p; Notera att denna implementation inte skyddar mot Newton-Raphson metodens instabilitet överhuvudtaget. Det betyder att man kan välja ett startvärde x sådant att man aldrig hittar någon lösning. Detta innebär att programmet aldrig kommer att sluta köra. Om du skulle råka ge ett sådant startvärde och MATLAB slutar svara, tryck på ctrl-c så kommer du att avbryta körningen 3. 3 Om du använder FreeMat så avbryter du skript och funktioner med ctrl-b 14
Har du tid över under laborationen så får du gärna prova att förbättra funktionen (tips: du kan använda en if-sats och kommandot return för att sätta ett maximalt antal interationer), eller skriva en ny funktion som använder sig av sekantmetoden istället. Om du tittar på kursens Blackboard-sida finns också ett par lite mer avancerade implementationer av Newton-Raphsons metod och sekantmetoden (under Laborationer Laboration 1 Intressanta m-filer) om du är intresserad. Övning 4 Skriv en MATLAB-funktion som använder sekantmetoden för att lösa icke-linjära ekvationer. Funktionen skall ta fyra argument, f, x0, x1, tol. f skall vara en funktion, x0 och x1 skall vara första gissningar och tol skall vara den tillåtna felgränsen E f. Funktionen skall kunna följande: Returnera en punkt x sådan att f(x) = 0 ± E f med sekantmetoden. Om funktionen inte hittat en tillräckligt bra lösning efter 1000 iterationer så skall den ge upp. Extra utmaning om du vill: Funktionen skall rita upp f(x) över ett lämpligt intervall och markera alla gissningar som sekantmetoden har givit. 15