MATLAB - en kompakt introduktion av Tore Gustafsson



Relevanta dokument
SCILAB/SCICOSLAB - en kompakt introduktion av Tore Gustafsson

Introduktion till MATLAB

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

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

MMA132: Laboration 1 Introduktion till MATLAB

Beräkningsvetenskap föreläsning 2

TAIU07 Matematiska beräkningar med Matlab

Introduktion till Matlab

Funktioner och grafritning i Matlab

MATLAB handbok Introduktion

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

Matlabövning 1 Funktioner och grafer i Matlab

Matlabövning 1 Funktioner och grafer i Matlab

Lab 1, Funktioner, funktionsfiler och grafer.

TSBB14 Laboration: Intro till Matlab 1D

TEKNISKA HÖGSKOLAN Matematik Fredrik Abrahamsson. Introduktion till MATLAB

3.3. Symboliska matematikprogram

MAM283 Introduktion till Matlab

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

Laboration: Grunderna i MATLAB

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

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

TANA17 Matematiska beräkningar med Matlab

4.3. Programmering i MATLAB

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

Du kan söka hjälp efter innehåll eller efter namn

Beräkningsverktyg HT07

TAIU07 Matematiska beräkningar med Matlab

4.4. Mera om grafiken i MATLAB

Matriser och Inbyggda funktioner i Matlab

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

M0043M Integralkalkyl och Linjär Algebra, H14, Matlab, Föreläsning 1

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

Textsträngar från/till skärm eller fil

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

MMA132: Laboration 1 & 2 Introduktion till MATLAB

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

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

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

Mer om funktioner och grafik i Matlab

KPP053, HT2016 MATLAB, Föreläsning 2. Vektorer Matriser Plotta i 2D Teckensträngar

Laboration: Vektorer och matriser

4 Numerisk integration och av differentialekvationer

MAPLE MIKAEL STENLUND

Matlabövning. Matlab har en enkel syntax och många av er har använt programmet tidigare. Inga deklarationer behövs.

Programmeringsteknik med C och Matlab

16 Programmering TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

MATLAB. Vad är MATLAB? En kalkylator för linlär algebra. Ett programspråk liknande t.ex Java. Ett grafiskt verktyg.

Variabler och konstanter

MMA132: Laboration 2 Matriser i MATLAB

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

varandra. Vi börjar med att behandla en linjes ekvation med hjälp av figur 7 och dess bildtext.

Omtentamen i DV & TDV

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

Matematisk Modellering

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: minuter beroende på variant Material: TI-82/83/84 samt tärningar

Ickelinjära ekvationer

Linjär algebra med tillämpningar, lab 1

NATIONELLT PROV I MATEMATIK KURS E HÖSTEN 1996

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

(a) Skriv en matlabsekvens som genererar en liknande figur som den ovan.

Introduktion till Matlab

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

ATT RITA GRAFER MED KOMMANDOT "PLOT"

Matriser och Inbyggda funktioner i Matlab

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

TANA17 Matematiska beräkningar med Matlab

Mer om funktioner och grafik i Matlab

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

LABORATION I MAPLE MIKAEL STENLUND

R AKNE OVNING VECKA 1 David Heintz, 31 oktober 2002

1 Funktioner och procedurell abstraktion

Matematisk Modellering

Lab 2, Funktioner, funktionsfiler och grafer.

k 1 B k 2 C ges av dx 1 /dt = k 1 x 1 x 1 (0) = 100 dx 2 /dt = k 1 x 1 k 2 x 2 x 2 (0) = 0 dx 3 /dt = k 2 x 2 x 3 (0) = 0

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

Introduktion till Matlab Föreläsning 1. Ingenjörsvetenskap

Introduktion till MATLAB

MATLAB Matrix laboratory

Abstrakt algebra för gymnasister

LABORATIONSHÄFTE NUMERISKA METODER GRUNDKURS 1, 2D1210 LÄSÅRET 03/04. Laboration 3 3. Torsionssvängningar i en drivaxel

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

At=A' % ' transponerar en matris, dvs. kastar om rader och kolonner U' % Radvektorn U ger en kolonnvektor

2.4. Teckensträngar och logiska uttryck

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

Introduktion till MATLAB Föreläsning 1

Språket Python - Del 1 Grundkurs i programmering med Python

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

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

Lösningsförslag Tentamen i Beräkningsvetenskap I, 5.0 hp,

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Matriser. Vektorer. Forts. Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Laborationstillfälle 1 Lite mer om Matlab och matematik

Översikt över Visual Basic

Matematisk programvara. Föreläsning 7 Matlab. Användning av Matlab. Matlab

Mer om linjära ekvationssystem

Introduktion. Exempel Övningar Lösningar 1 Lösningar 2 Översikt

Grundläggande programmering med C# 7,5 högskolepoäng

Transkript:

6.1.7 1 ÅBO AKADEMI TEKNISKA FAKULTETEN MATLAB - en kompakt introduktion av Tore Gustafsson MATLAB 1 är ett interaktivt programpaket för numeriska beräkningar. Matlab står för matrix laboratory och är således konstruerat speciellt för matrisberäkningar. Matlab används via några interaktiva fönster. De viktigaste är "Command window" i Matlabs huvudfönster, "M-file editor" och "Help". I "Command window" kan man ge beräkningsinstruktioner och detta är det normala stället för beräkningsresultaten. Det rekommerade arbetssättet är att skriva ner instruktionerna för att lösa ett problem i en speciell instruktionsfil, som kallas m-fil, därför att förlängningen skall vara ".m". M-filerna innehåller egentligen datorprogram skrivna i Matlabs eget programmeringsspråk. M-filerna skrivs och editeras lämpligen med Matlabs egen editor, "M-file editor". Referenser för programmeringen fås ur fönstret "Help". Här hittar vi t.ex. "Getting started", som nybörjaren bör studera. Även en van Matlabanvändare behöver hjälp med instruktionerna. Dessa hittar han i "Help" under rubrikerna "Reference" och "Matlab function reference" (kan variera från version till version). Följande arbetssätt rekommeras: öppna "Command window", "M-file editor" och "Help" och placera dem på skärmen så att alla tre fönstren samtidigt är synliga. Välj sedan den katalog du vill använda som arbetsområde (välj "current directory" uppe i Matlabs huvudfönster). Skriv de instruktioner som behövs för beräkningen i en m-fil med hjälp av "M-file editor" och med "Help" som referens. Lagra filen och utför instruktionerna genom att i "Command window" skriva filens namn (observera att förlängningen bortlämnas). M-filen bör ha ett namn med förlängningen ".m". Bokstäverna å, ä och ö får inte förekomma i filnamnet, som heller inte får börja med en siffra. Matlab styrs av alfanumeriska radvisa instruktioner. Normalt avslutas en instruktion till Matlab med radslutet. Om man önskar fortsätta instruktionen på nästa rad skrivs tre punkter (...) i slutet av raden. Variabler Alla variabler är i princip av typen "matris med flyttalselement". En variabel har ett namn beståe av bokstäver och siffror. Bokstäverna å, ä och ö får inte förekomma, inte heller en siffra som första tecken. En variabel "deklareras" i och med att den tilldelas ett värde. Matrisens dimension slås fast i och med att variabeln tilldelas en given matris. Dess dimension kan ändras genom att tilldela den ett nytt värde. Tilldelning a =.5 definierar en skalär a (= 1x1-matris) och ger den värdet,5. Observera att Matlab använder decimalpunkt, inte decimalkomma! A = [1 3; 4 5 6; 7 8 9] definierar en 3x3 matris A med elementen som givits mellan hakparenteserna [ och ]. Semikolon (;) åtskiljer raderna. Det lönar sig i allmänhet att skriva ned större matriser en rad i gången. Efter semikolon behöver man inte skriva tre punkter (...) för att fortsätta instruktionen: A = [ 1 3; 4 5 6; 7 8 9] Matriselement kan bestå av uttryck eller funktioner: b = [-1.3; sqrt(3); (1++3)*4/5] resulterar i matrisen (vektorn) b till höger. 3 A = 4 5 6 7 8 9 1,3 b = 1,731 4,8 1 MATLAB är ett varumärke ägt av The MathWorks, Inc.

Tore Gustafsson Matlab - en kompakt introduktion Matlab känner en konstant pi = 3,1415965358979 A = 4 7 5 8 4 s = 1,3 1 3 6 1 Matlab känner en konstant i i = 1 Kolon (:) är en operator i MATLAB för att tilldela en sekvens av tal till en matris eller vektor, t.ex x = 1:5 resulterar i x = [1 3 4 5], dvs varje element i sekvensen inkrementeras med ett. I ett uttryck med två kolon anger uttrycket mellan kolonen hur mycket talvärdet skall ökas i varje steg i sekvensen, y = : pi/4 : pi resulterar i y = [,,7854 1,578,356 3,1416]. Matriselement anges med index inom parentes, t.ex. som A(,3) eller b(). Första indexet anger raden och andra indexet kolumnen. Ett a index anger elementets ordningsföljd oberoe om det är en radvektor eller kolumnvektor. Vi kan t.ex. ändra värdet på elementet i rad 3, kolumn 3 i den tidigare specificerade matrisen A med instruktionen A(3,3) = 1 Små och stora tal skrivs i traditionellt e-format: s = 1.3e-4 Komplexa tal är tillåtna i alla funktioner z = 3 + 4*i Uttryck Matematiska operatorer + addition - subtraktion * multiplikation / högerdivision \ vänsterdivision ^ exponent ' transponering c = b T b = [ 1,3 1,731 4,8] = 7,73 d = 4 7 c f 5 8 x = 1 1 3 6 x = 1 3 1,3 1,731 4,8 En MATLAB-sats är ofta av formen variabel = uttryck eller enbart uttryck. Ett uttryck består av variabler och aritmetiska operatorer och/eller funktioner. T.ex. c = b' * b ger inre produkten b T b = 7,73. Satsen fungerar så att uttrycket till höger om likhetstecknet evalueras, varefter räkneresultatet tilldelas variabeln till vänster om likhetstecknet. Observera att likhetstecknet i Matlab alltid betyder tilldelning. Likhetstecknet innebär inte att vi har en ekvation såsom i matematiken. T.ex. instruktionen n = n + 1 innebär att värdet av n ökas med ett. Normalt skrivs resultatet genast ut på skärmen, ett semikolon (;) efter uttrycket förhindrar utskrift Högerdivision och vänsterdivision är för skalärer identiska, är samma som d = c / f d = f \ c, dvs c divideras med f. För matriser gäller att x = A \ b är en lösning till ekvationen A x = b. Om A är kvadratisk innebär division en direkt Gausselimination av A, annars innebär operationen en minsta-kvadrat-lösning till ekvationen.

Matlab - en kompakt introduktion Tore Gustafsson 3 Elementvisa operationer (Array operations) Elementvisa operatorer utför aritmetiska operationer element för element på matriser eller vektorer. T.ex. om x = [ 1 3] och y = [4 5 6] så ger operationen z = x.^ y resultatet z = [ 1 3 79], medan om exponenten är skalär, z = x.^ resulterar i z = [ 1 4 9]. Variablerna i högerledet kan vara vektorer eller matriser, men alla bör ha samma dimension. Resultatet blir då en vektor eller matris med denna samma dimension. Addition och subtraktion behöver inte specificeras som elementvisa därför att addition och subtraktion av matriser enligt definition utförs elementvis. Elementvisa operatorer + addition - subtraktion.* multiplikation./ högerdivision.\ vänsterdivision.^ exponent Matematiska funktioner Matlab innehåller ett otal elementära matematiska funktioner samt vektor-, matris- och polynomtransformationer. Funktionerna sin, cos, exp etc fungerar elementvis med vektorer eller matriser som argument, medan för motsvarande matrisfunktioner finns skilda funktioner, t.ex. matrisexponentialfunktionen expm. alfa = : pi/ : *pi x = sin(alfa) resulterar i x = [, 1,, -1,, ]. Listan till höger ger några vanliga funktioner. Matlabs manual innehåller många fler. En snabb metod att kontrollera hur en matlabfunktion skall användas är att i instruktionsfönstret ge instruktionen help, t.ex. help atan resulterar genast i en grov anvisning för funktionen ifråga. Några matematiska funktioner i Matlab e x exp(x) ln x log(x) log 1 x log1(x) x abs(x) x sqrt(x) sin x sin(x) cos x cos(x) tan x tan(x) arcsin x asin(x) arccos x acos(x) arctan x atan(x) arctan (x/y) atan(x,y) Egna funktioner i m-filer Egna funktioner programmeras med Matlabs uttryck i m-filer, där första utförbara raden är en deklarationsrad, som deklarerar m-filen som en Matlabfunktion. Vi vill t.ex. beräkna integralen = 3 x Q cos( x) e dx. I Matlabs fönster "Help" väljer vi MATLAB /Reference / Functions by Category / Function Functions - Nonlinear Numerical Methods och där hittar vi funktionen quadl för numerisk integration. Quadl behöver integranden som en matlabfunktion. Det mest generella sättet är att skriva ner integranden som en funktion i en m- fil. För detta exempel kan vi kalla m-filen "integrand.m" och därmed har vi introducerat en ny matlab-funktion med namnet "integrand". M-filen ser ut så här: % integrand.m - funktion för quadl function y = integrand(x) y = cos(x).* exp(x); Integralen beräknas sedan med quadl. Integrandfunktionen specificeras i quadl:s argument som ett "handtag", med funktionsnamnet föregått av ett snabel-a (@). Q = quadl(@integrand,, 3) Andra och tredje argumentet för quadl är nedre respektive övre integrationsgränsen. Egna funktioner i m-filer - Första delen av filnamnet fungerar som namn för funktionen. - % anger att resten av raden är en kommentar. - Första utförbara raden i funktionsfilen är en deklarationsrad. - Deklarationsraden måste börja med ordet function. - Andra ordet är den variabel som tilldelas funktionsvärdet. - Efter likhetstecknet ges funktionens namn (samma som första delen av filnamnet) och funktionens argument inom parentes. - Sedan följer beräkning av funktionsvärdet.

Matlab - en kompakt introduktion Tore Gustafsson 4 Quadl kräver att man använder elementvisa operatorer i funktionen ty argumentet x till integranden innehåller samtidigt flera värden. Det lönar sig att avsluta raderna i funktionen med semikolon. Detta förhindrar att resultatet skrivs ut varje gång som funktionen utförs. Diagram f(x) 5-5 -1-15 Integrandens graf -.5 1 1.5.5 3 x - plot(x,y,'-') ritar heldragen linje - plot(x,y,'--') ritar streckad linje - plot(x,y,'o') märker ut de givna punkterna med cirklar - plot(x,y,'k') ritar en heldragen svart linje. hold on hold off plot(x,y) ritar diagram. Ett diagram med grafen av funktionen "integrand", definierad i filen integrand.m, erhålls med följande sekvens: x = :.1 : 3; y = integrand(x); clf plot(x,y) title('integrandens graf') xlabel('x') ylabel('f(x)') Den första raden bildar en vektor med 31 ekvidistanta x-värden, och den andra raden beräknar motsvarande funktionsvärden, som lagras i variabeln y. clf raderar en eventuell tidigare figur. plot(x, y) ritar ett linjediagram med räta linjer mellan (x, y)-par i vektorerna x och y. Diagrammet skalas automatiskt. De tre sista raderna sätter till en titel ovanför diagrammet och storheter på x- och y-axeln. Önskar man rita flera kurvor i samma diagram med olika plot-instruktioner bör man efter den första kurvan ge instruktionen hold on. Diagram kan i Windows överföras via klippbordet till ett textbehandlingsprogram genom att i figurfönstret ur menyn "Edit" välja "Copy Figure". Diagrammet kan sedan överföras till textbehandlingsprogrammet med "paste". Räknenoggrannhet och utskrift Matlab räknar med ca 15 siffrors noggrannhet. Detta gäller emellertid inte för alla funktioner. T.ex. numerisk lösning av differentialekvationer med funktionen ode3 ger en relativt fel mindre än 1 3 och ett absolut fel mindre än 1 6 i resultatet. Önskas högre noggrannhet måste detta specificeras skilt. Likaså beräknar quadl integraler med en felgräns 1 6. Oberoe av räknenoggrannheten skrivs resultatet ut med ett fast antal siffror. Det normala formatet är "short", som skriver resultatet med fyra decimaler. Om det normala formatet för talvärden inte är tillfredsställande kan man välja format short 5 siffror t.ex. 1.3333 format short e 5 siffror med exponent t.ex. 1.3333E+ format long 15 siffror t.ex. 1.33333333333333 format long e 15 siffror med exponent 1.33333333333333E+ Mera om matriser A = 4 7 3 d = 6 5 8 3 6 1 g = [ 4 5 6] F = 4 5 6 7 8 1 Undermatriser kan specificeras med vektorer som index, t.ex d = A(1:,3) ger en x1-matris, dvs rad 1 och ur kolumn 3 ur A. Observera att indexeringen av matriser startar från 1, inte från som i vissa programmeringsspråk. Ett ensamt kolon som index betecknar alla element i motsvarande rad eller kolumn: g = A(,:) F = A(:3,:)

Matlab - en kompakt introduktion Tore Gustafsson 5 En matris kan sättas ihop av ett antal undermatriser, t.ex. b1 = [4 6 8]; b = [1 3 ]; c1 = [ ; 7]; B = [[ b1 ; b ] c1 ].Då det är tvetydigt om en vektor är en radvektor eller kolumnvektor föredrar Matlab radvektorer. T.ex. instruktionerna h(1) = 1 h() = resulterar i en radvektor h = [ 1 ]. Önskar vi bestämma en kolumnvektor elementvis kan vi skriva h(1,1) = 1 h(,1) = Dimensionen av en matris eller vektor X erhålls med instruktionen [m, n] = size(x) Tre speciella matriser definieras med Z = zeros(m,n), som ger en mxn-matris fylld med nollor, E = ones(m,n), som ger en mxn-matris fylld med ettor och I = eye(n), som ger en identitetsmatris av dimensionen nxn. Diagonalmatriser konstrueras enkelt med instruktionen F = diag(d), där d är en vektor. Funktionerna det, norm, rank, cond beräknar matrisens determinant, norm, rang respektive konditionstal. Funtkionen inv inverterar en matris. Se "Matrix Functions - Numerical Linear Algebra" i "Help" för närmare instruktioner, eller skriv en instruktion av typen help det i instruktionsfönstret för en snabbreferens. b 1 = [ 4 6 8] b [ 1 3 ] = c = 1 7 4 B = 1 6 3 8 Exempel: >> size(b) ans = 4 7 Exempel: E = ones(3,1) I = eye(3) D = [E I] ger matrisen 1 D = 1 1 1 1 Exempel: d = [1 3]' F = diag(d) ger matrisen D = 3 Olinjära ekvationer Iterativ lösning av skalära olinjära ekvationer kan utföras med fzero. x = fzero(@funktion,x) fzero beräknar här iterativt ett nollställe x för en given funktion, definierad i en m-fil med namnet funktion.m, utgåe från en given gissning x. Exempel. Bestäm en lösning till ekvationen ( x 3) 1 = i närheten av x = 1. Vi skriver en m-fil, som definierar funktionen vars värde skall vara noll, och kallar den funk.m. Filen ser ut såhär: % funk.m - funktion för fzero function y = funk(x) y = (x-3).^ - 1; Lösningen fås med följande instruktion i "Command window" eller i huvudprogrammet: x = fzero(@funk,1) Observera att vi i m-filen använder elementvisa operationer, och tillåter sålunda att argumentet x kan vara en vektor. Matlab kan inte lösa ekvationer! fzero löser egentligen inte ekvationer, utan söker nollställen för funktioner. Ekva tionen måste alltså först skrivas i normalformen f(x) =, dvs med en nolla i högra membrum. Funktionen f(x) specificeras i m-filen, som ges som argument åt fzero.

6 Tore Gustafsson Matlab - en kompakt introduktion y ( x 3) e = xy = 1 Matlabs normalform: x ( x 3) e 1 = x1x 1 = x x = 1 x x y x f ( x) = ( x1 3) e x1x 1 >> x = fsolve(@ekvsys,[;]) Optimization terminated successfully: Relative function value changing by less than OP- TIONS.TolFun x = 1.6447897385951.68981179 >> Fsolve. Med fzero kan vi enbart lösa skalära ekvationer. Olinjära ekvationssystem löses med funktionen fsolve ur optimization toolbox. Fsolve använder som standard Gauss-Newtons metod för att lösa ekvationen f(x) =. Vektorfunktionen f(x) bör ges i form av en m-fil. Exempel. Bestäm en lösning till ekvationssytemet y ( x 3) e = xy = 1 i närheten av origo. Vi skriver en m-fil, som definierar funktionen vars värde skall vara noll, och kallar den ekvsys.m. Filen ser ut såhär: % ekvsys.m - ekvationssystem för fsolve. function f = ekvsys(x) f(1,1) = (x(1) - 3)^ - exp(x()); f(,1) = x(1)*x() - 1; Lösningen fås med följande instruktion i "Command window" eller i huvudprogrammet: x = fsolve(@ekvsys,[;]) där andra argumentet är startvärdet för iterationen, en vektor [ ] T. Ordinära differentialekvationer Ordinära differentialekvationer kan lösas numeriskt med funktionen ode45. Funktionen ode45 använder en Runge-Kutta-metod av 4:e och 5:e ordningen för numerisk lösning av begynnelsevärdesproblem. Funktionen ode45 löser ett system av 1:a ordningens differentialekvationer, skrivet i formen dy f ( t, y) dt =, med begynnelsetillståndet y vid ett värde t = t. y är tillståndsvektorn, t är den oberoe variabeln och f är en vektorfunktion. [t, y] = ode45(@funktion, [t tf], y); löser differentialekvationen definierad i en m-fil funktion.m från t = t till t = tf och med begynnelsevärdet y(t) = y. M-filen "funktion.m" har två argument: t, som är en skalar och y, som är en kolumnvektor. Den skall sedan returnera värdet på funktionen f(t, y) i form av en kolumnvektor. y1 = y1(1 y ) y y = y1 y y = 1 y dy f ( t, y) dt = f ( t, y) = y1 (1 y ) y y1 Exempel. Vi skall lösa differentialekvationen y 1 = y1(1 y ) y y = y1 mellan < t < med begynnelsetillståndet y 1 () =, y () =,5. Differentialekvationen skrivs i normalformen ovan. Funktionen f(t, y) definieras i m-filen som vi kallar "diffek.m" med följande innehåll: % diffek.m - beräknar högerledet av en diffe- % rentialekvation function f = diffek(t,y) f = [y(1)*(1-y()^)-y(); y(1)];

y Matlab - en kompakt introduktion Tore Gustafsson 7 En grafisk lösning erhålls genom att i Matlabs instruktionsfönster (eller i huvudprogrammet) ge instruktionerna 1 y = [.5]'; [t, y] = ode45(@diffek, [ ], y); -1 plot(t,y') - xlabel('\itt') -3 ylabel('\ity') 5 1 t 15 3 Flödeskontroll i Matlabprogram Instruktionerna "for - ", "if - (else -)" och "while - " kan användas för flödeskontroll i Matlabprogram. Instruktionerna mellan for och utförs upprepade gånger medan variabel tar ett värde i gången ur uttryck. T.ex. for k = 1:5 x(k,1) = log(k); bildar en vektor x som innehåller 5 element: naturliga logaritmerna av 1,, 3, 4 och 5. Om värdet av uttryck är sant ( ) utförs instruktionerna mellan if och, annars utförs intruktionen efter. If - kan kompletteras med else. Då utförs antingen den första satsen instruktioner eller den andra satsen instruktioner beroe på om uttryck är sant eller falskt. T.ex. if x >, y = log(x) else y = -inf ger y värdet ln x om x >, annars får y värdet. Instruktionerna mellan while och utförs upprepade gånger så länge uttryck är sant. T.ex. k = while k < 1 k = k + 1; ökar värdet på k tills k = 1 varefter instruktionen efter utförs. Räkneslingan utförs alltså 1 gånger och resulterar ast i att k = 1 efter slingan. Flödeskontroll kräver logiska uttryck. Ett logiskt uttryck (variabel) får värdet 1 då det är sant och värdet då det är falskt. De logiska operatorerna jämför matriser elementvis. T.ex. k = L = k < 1 ger resultatet L = 1 (k och L är skalärer), medan x = [1 5.3]; L = (x == [1 1 1]) ger resultatet L = [1 ]. for variabel = uttryck instruktion... instruktion if uttryck instruktion... instruktion if uttryck instruktioner else instruktioner while uttryck instruktioner Logiska operatorer < mindre än > större än == lika med <= >= ~= olika & och eller ~ inte Anonyma funktioner Enkla egna funktionsuttryck kan definieras som anonyma funktioner (anonymous function) på en rad i den m-fil, varifrån funktionen anropas. T.ex. integrationsexemplet ovan kunde skrivas på två rader, först en anonym funktion som definierar integranden, sedan anropet till quadl, y = @(x) cos(x).*exp(x); Q = quadl(y,, 3)

8 Tore Gustafsson Matlab - en kompakt introduktion Syntaxen för anonyma funktioner är funktionshandtag = @(argumentlista) matlabuttryck. Nästlade funktioner Man kan även skriva funktioner inne i andra funktioner. Dessa funktioner kallas nästlade (nested functions). Fördelen med nästlade funktioner är att man klarar sig med ett mindre antal m-filer. En annan fördel är att den yttre funktionens variabler är kända i de inre funktionerna. Alla nästlade funktioner avslutas med ordet. Exempel. Vi skall beräkna integralen för c = 1;,9;,8;...;. Huvudprogram: = 3 cx Q( c) cos( x) e dx for c = 1:-.1: Q = berintegral(c) M-filen berintegral.m ser ut på följande sätt: % berintegral.m - beräknar integral för c. function q = berintegral(c) q = quadl(@coscx,, 3); function y = coscx(x) y = cos(x).*exp(c.*x); Mera om variabler och funktioner global x y z Variabler i Matlab är lokala. Detta betyder att en variabels värde är känt ast i den funktion där variabeln har givits ett värde. Globala variabler kan definieras med instruktionen global. Globala variablers värden är dock fortfarande kända ast i de funktioner där de är definierade som globala. Instruktionen global måste således finnas i alla funktioner inklusive huvudprogrammet. Matlabfunktioner av typen quadl, fzero och ode45 kräver att användaren bildar en egen matlabfunktion med de argument som funktionen ifråga kräver. Vill man få in i funktionen värden på egna variabler som beräknas i en annan del av programmet, kan man antingen använda sig av globala variabler, eller låta bli att skriva funktionen i en egen m-fil, utan istället använda anonyma eller nästlade funktioner. Felsökning Matlabs m-fileditor har innehåller funktioner för felsökning i matlabprogram, såsom insättning av stoppunkter och utförning av matlabprogram ett steg i gången. För enklare beräkningsuppgifter rekommeras hellre följande procedurer: - skriv några få rader i gången varefter programmet testas genom att utföras i "Command window" - uttryck du är osäker på kan testas genom att kopiera uttrycket till "Command window" och utföra det där - kontrollera viktiga variablers värden och dimensioner genom att tillfälligt ta bort semikolon på den rad där de beräknas, eller sätt in ny rader med enbart variabelns namn för att få en utskrift. T.ex. kan vi kontrollera att parametern c fungerar som den bör i funktionen coscx genom att låta dess värde skrivas ut medan funktionen utförs. - pröva att dina funktioner fungerar genom att beräkna något funktionsvärde från "Command window". Kom ihåg att du måste ge argumenten inom parentes. - alla variabler som definierats i huvudprogrammet är tillgängliga i "Command window" och finns listade i fönstret "Workspace". Kontrollera dimensionerna. Många fel beror på felaktiga dimensioner, t.ex. att variabeln är en radvektor i stället för en kolonnvektor.