MMA132: Laboration 1 & 2 Introduktion till MATLAB



Relevanta dokument
MMA132: Laboration 1 Introduktion till MATLAB

MMA132: Laboration 2 Matriser i MATLAB

Laboration: Grunderna i MATLAB

Introduktion till Matlab

En introduktion till MatLab

Linjär algebra med tillämpningar, lab 1

Introduktion till MATLAB

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Användarhandledning Version 1.2

Introduktion till Matlab

Laboration: Grunderna i Matlab

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Matlabövning 1 Funktioner och grafer i Matlab

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Matlabövning 1 Funktioner och grafer i Matlab

Newtons metod och arsenik på lekplatser

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Beräkningsvetenskap föreläsning 2

TAIU07 Matematiska beräkningar med Matlab

Lägg märke till skillnaden, man ser det tydligare om man ritar kurvorna.

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Matlabföreläsningen. Lite mer och lite mindre!

Introduktion till Matlab

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

Introduktion till Matlab

TSBB14 Laboration: Intro till Matlab 1D

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Hjälpmedel: MATLAB

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Introduktion till Matlab

Department of Physics Umeå University 27 augusti Matlab för Nybörjare. Charlie Pelland

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Matriser och vektorer i Matlab

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 18:e augusti klockan

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

Tentamen i Beräkningsvetenskap I/KF, 5.0 hp,

DN1240, Numeriska metoder. Laboration 0 (frivilliga delar) (dvs uppgifterna behöver inte redovisas) Introduktion till UNIX och MATLAB

Introduktion till Matlab

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

TANA17 Matematiska beräkningar med Matlab

Ickelinjära ekvationer

Laboration: Vektorer och matriser

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

TANA17 Matematiska beräkningar med Matlab

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 13:e januari klockan

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

TMV156/TMV155E Inledande matematik E, 2009

TAIU07 Matematiska beräkningar med Matlab

LABORATION cos (3x 2 ) dx I =

Datorlaboration :: 1 Problembeskrivning ::

Newtons metod. 1 Inledning. CTH/GU LABORATION 3 MVE /2014 Matematiska vetenskaper

Newtons metod. 1 Inledning. 2 Newtons metod. CTH/GU LABORATION 6 MVE /2013 Matematiska vetenskaper

a = a a a a a a ± ± ± ±500

Matematisk Modellering

2 februari 2016 Sida 1 / 23

Instruktion för laboration 1

MATLAB handbok Introduktion

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 1: TIDSSERIER.

DN1212/numpp Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

TANA17 Matematiska beräkningar med Matlab

Gruppuppgifter 1 MMA132, Numeriska metoder, distans

SF1520, Numeriska Metoder och Grundläggande Programmering för K2 Lab1.

Linjära ekvationssystem i Matlab

Matematisk Modellering

OBS! Snabbinsatt Matlab-intro vissa fönsterhanteringsdetaljer kan vara fel men gör gärna Matlab-uppgifterna. DN1240, Numeriska metoder för OPEN1.

Tentamen i Beräkningsvetenskap I och KF, 5.0 hp,

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

DN1212, Numeriska metoder & grundläggande programmering. Laboration 1 del 1-3 (frivilliga delar) Del 1-3 (dvs upg ) behöver inte redovisas

Akademin för utbildning, kultur och kommunikation MMA132 Numeriska Metoder Avdelningen för tillämpad matematik Datum: 2 juni 2014

SF1520, Numeriska Metoder och Grundläggande Programmering för K2 Lab1.

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

Matriser och Inbyggda funktioner i Matlab

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

Introduktion till Matlab

Datorövning 1 Fördelningar

Syftet med den här laborationen är att du skall bli mer förtrogen med följande viktiga områden inom matematisk statistik

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Numeriska metoder, grundkurs II. Dagens program. Hur skriver man en funktion? Administrativt. Hur var det man gjorde?

Moment Viktiga exempel Övningsuppgifter

Laboration 3. Funktioner, vektorer, integraler och felskattning

Introduktion till Matlab

Kort om programmering i Matlab

Instruktion för laboration 1

% Föreläsning 4 22/2. clear hold off. % Vi repeterar en liten del av förra föreläsningen:

Matriser och Inbyggda funktioner i Matlab

Beräkningsvetenskap och Matlab. Vad är MATLAB? Vad är MATLAB? Användningsområden. Vad är MATLAB? Grunderna i Matlab. Beräkningsvetenskap == Matlab?

Tillämpning: Bildinterpolation. Ekvationslösning. Integraler. Tillämpning: En båt. Räkning med polynom. Projekt. Tentamensinformation.

Tentamen för kursen TME135 Programmering i Matlab för M1

LABORATION 2. Trapetsregeln, MATLAB-funktioner, ekvationer, numerisk derivering

Akademin för utbildning, kultur och kommunikation MMA132 Numeriska Metoder Avdelningen för tillämpad matematik Datum: 17 januari 2013

Transkript:

MMA132: Laboration 1 & 2 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. I slutet av varje exempel finns ett övningsproblem som ni skall lösa. Lösningarna på dessa problem skall sedan redovisas i en labbrapport. Rapporten bör vara mellan 2 och 5 sidor lång per laboration (4-10 sidor per labbtillfälle) och skall innehålla all MATLAB-kod som är nödvändig för att lösa uppgifterna. Det skall också framgå tydligt vilken del av koden som gör vad. Om din rapport innehåller figurer skall det vara tydligt vad det är det ritar upp och som som anges på x- och y-axeln. 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 7 innan du börjar med Exempel 1. Här och på sidan 7 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. 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

Exempel 2: Matriser i MATLAB MATLAB är en förkortning av MATrix LABoratory. Detta namn valdes eftersom MATLAB är mycket bra på att hantera matriser. Listor i MATLAB är egentligen matriser med bara 1 rad (eller bara 1 kolonn). Prova att skriva A = [1 2 3; 0 1 6; 7 8 1] i kommandofönstret. Prova nu att skriva B = [1 2 3 0 1 6 7 8 1] i kommandofönstret. Jämför de två matriserna med varandra. Det är också enkelt att transponera och invertera matriser. Prova att skriva C = A och D = inv(a) i kommandofönstret. Fundera ut vilket kommando som gör vad. Man kan också lösa linjära ekvationssystem med MATLAB. Om ekvationssystemet kan skrivas Ax = y där A är den matris som vi tidigare lagrade i variabel A och så kan du lösa ekvationssystemet genom att skriva y = [1;2;3]; x = A\y 1 y = 2 3 i kommandofönstret. Om du vill kan även använda inversen du räknade ut tidigare för att lösa systemet. Lös ekvationssystemet Övning 2 1.456x 1 + 2.846x 2 + 0.987x 3 = 1.983 2.238x 1 7.998x 2 + 3.226x 3 = 4.762 3.738x 1 + 0.937x 2 = 2.116 6

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 7

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. 8

Extra del att göra om du har tid över: 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 kommandofönstret. 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. Extra övning om du har tid över 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. 9

Laboration 2 Syftet med den här laborationen är att bli bekant med fler av MATLABs grundläggande funktioner, såsom funktioner, villkor och loopar. Dessa grundläggande funktioner skall också användas för numerisk lösning av icke-linjära ekvationssystem. Mer om m-filer 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 at skriva en funktion. Exempel 1: 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 10

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: 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: 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. 11

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 1 Om du tittar på sidan 3.14 i kompiumet så skrivs formeln för en iteration med Jacobis metod på matrisform i ekvation (3.35). Skriv en funktion som heter jacobi och som tar emot tre argument: en matris, M, en svarsvektor, y, och en ungefärlig lösning, x, och skickar tillbaka en ny gissning framräknad med Jacobis metod. För att testa er funktion kan ni skriva: M = [8 1 3; 2 10-1; 2 1 15] y = [119; 131; 167] x0 = [10; 10; 10] x1 = jacobi(m,y,x0) Om ni får resultatet x1 = 9.8750 12.1000 9.1333 så fungerar er funktion som den ska. 12

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; 13

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 14

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; 15

Här kan du tillräckligt för att göra övning 2! 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 2 x 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. z = -1:0.01:2; fv = z.^3-2*z.^2+1; %plot(z,fv) % 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. y = x; x = y + 1; % Här använder vi Newton-Raphsons metod. % Vi avgör hur bra uppskattningen är % genom att titta på funktionsvärdet. while abs(y^3-2*y^2+1) > eps % Vår 'nya lösning' blir vår 'gamla lösning' % inför nästa varv. x = y; % 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. y = x - f_p/f 16

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. Här kan du tillräckligt för att göra övning 3! 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 2 Intressanta m-filer) om du är intresserad. Övning 2 Skriv en ny funktion (hitta på ett bra namn själv) som kan ge en ungefärlig lösning på ett linjärt ekvationsystem med hjälp av Jacobis metod. Metoden skall ta en matris, en svarsvektor, en ungefärlig lösning och ett heltal, n, som inargument och skicka tillbaka en ny ungefärlig lösning framräknad med n iterationer av Jacobis metod. Tips: återanvänd lösningen till uppgift 1 och slå upp MATLAB-funktionen norm. Kom också ihåg att använda en diagonaldominant matris när ni testar funktionen (Som en extra utmaning till den som vill: se till att funktionen kollar om matrisen är diagonaldominant och låter bli att räkna om den inte är det). 3 Om du använder FreeMat så avbryter du skript och funktioner med ctrl-b 17

Extra övningar att göra om ni har tid 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. Funktionen skall rita upp f(x) över ett lämpligt intervall och markera alla gissningar som sekantmetoden har givit. MATLAB-funktioner kan också användas för att illustrera olika fenomen. Från Blackboard kan du ladda ner filen interpmkv.m. Där finns en liten demonstration av hur resultatet från minsta-kvadrat-metoden varierar med grad på det passade polynomet och att om man använder tillräckligt högt grad så får man Lagrange-interpolation. För att köra demonstrationen: Ladda ner filen och lägg den i samma mapp som de andra filer du använt i laborationen. Skriv interpmkv i kommandofönstret och tryck på enter. MATLAB kommer nu att rita upp en figur med några punkter markerade. Om du trycker på mellanslag kommer MATLAB att rita in ett passat polynom av grad 1. Om du trycker på mellanslag igen kommer MATLAB att rita in ett passat polynom av grad 2. Fortsätter du trycka på mellanslag så kommer programmet att fortsätta att rita upp passade polynom av högre och högre grad tills du når grad 8, detta polynom interpolerar alla punkterna. Kör demonstrationen och spara den slutgiltiga bilden. I labbrapporten skall du lägga in bilden och skriva en kort kommentar om vilken grad på polynomet som du tror är mest användbar och varför. 18