Notis I koden för exemplen förekommer kommentarer. Kommentarer i Matlabkoden identieras med prexet %. Kommentarer är text/kod som Matlab bortse från. Alltså all text/kod som ligger till höger och på samma rad som % tolkas ej som Matlab-kod. Jämförelse operatorer: mindre än <, större än >, lika med ==, mindre eller lika med <=, större än eller lika med >= For-sats/slinga Vid all programmeringsarbete förekommer det alltid operationer som upprepas. För att undvika och skriva samma sak era gånger om nns det s.k. slingor. For och while är slingor som används itigt. I fortsättningen kommer sats användas istället för slinga. Skillnaden mellan for- och while-satsen är att for-satsen utför en sats ett bestämt antal gånger eller tills ett villkor ej uppfylls medan while ast har ett villkor, och kan därför utföra en sats oändligt antal gånger. Ett konkret exempel på en upprepning är summering av en talserie. För att summera ex. alla naturliga tal upp till ett givet tal n kan man i Matlab lösa detta genom stegvis summering: sum = sum + 1; sum = sum + 2;... sum = sum + (n-1); sum = sum + n; Att summera på detta sätt är tidskrävande och ineektivt! Om ett upprepande mönster och möjligtvis en varierande variabel kan identieras kan istället en for-sats användas. I exemplet identieras en tilldelning och en addition av en stegvis ökande variabel i varje steg. En for-sats har följande utsee: for (räknare) Sats "Upprepat mönster" Vid exekveringen ökar räknaren sitt värde. Om räknarens värde uppfyller ett villkor utförs satsen. Därefter ökar räknaren sitt värde och kontrollera att 1
villkoret fortfarande är uppfyllt och satsen utförs på nytt. Detta fortsätter så länge villkoret är uppfyllt. Villkoret är m.a.o till för att begränsa antalet upprepningar for-satsen ska göra. För summering av de naturliga talen kommer for-satsen att se ut så här: for (i=1:n) sum = sum + i; Variabeln i är räknaren som räknar från 1 till n och villkoret är att i <= n. Kolonnotation har använts i exemplet vilket medför att villkoret automatiskt är inbakat i uttrycket för räknaren, i=1:n. Kolonnotationen får variabeln (räknaren) i att ökas med 1 efter varje upprepning tills i=n. Hade istället problemet varit att summera alla tal mellan 0 och n med steglängden 0,1 hade räknaren istället skrivits som i=0:0.1:n. I fallet ovan där steglängden är 1 kunde räknare lika väl ha varit i=0:1:n. Men eftersom steglängden 1 är så pass vanlig är det tillåtet att utelämna steglängden. Ett annat exempel på summation: n 2 i = 2 1 + 2 2... 2 n 1 + 2 n i=1 Här identieras lätt den upprepande operationen, addition, och den varierande variabeln i. I Matlab kan denna summation lösas med for-satsen. Detta är gjort nedan, med ett medvetet fel. Var är felet? for (i=1:n) sum = 2^i; Nästlade for-satser Ibland är det befogat att använda sig av två räknare istället för en som i fallen ovan. Exempel på detta är genomgång av alla element i en matris. Ett matriselement identieras genom rad- och kolonnummer, ex. i Matlab A(n,m). Om en räknare används, dvs en for-sats, nns ast möjligheten att röra sig inom elementen i en rad eller kolonn. För att ta sig igenom alla element i en n x n matris måste då n st for-satser skrivas, en för varje rad eller kolonn. 2
Och upprepning är åter ett faktum. För att eliminera upprepningar kan ju en for-sats användas bara det nns ett upprepande mönster och en varierande varabel. Och denna gång är det upprepande mönstret en for-sats och den varierande variabeln rad- eller kolonnummer. Det nns alltså två for-satser nu; exempelvis en inre for-sats för att röra sig kolonnvis och en yttre för att kunna röra sig radvis. Samma resonemang kan göras för trediemsionella materiser, som kräver tre for-satser för att gå igenom alla element. % skapar en 10x10 matris med ettor % och därefter sätter alla element=0 med for-sats matris=ones(10,10); % yttre for-sats for j=1:10 %inre for-sats a(i,j)=0; Om ast en for-sats hade använts för att tas sig igenom matrisen hade det sett ut så här: matris=ones(10,10); a(1,i)=0; a(2,i)=0;... a(9,i)=0; a(10,i)=0; While-satsen En while-sats är identiskt for-satsen förutom det att while-satsen inte har en räknare: 3
while (villkor) Sats "Upprepat mönster" För en for-sats är alltid antalet upprepningar känt. En while-sats saknar däremot ett bestämt antal upprepningar och har ast ett villkor. Därför är det möjligt att en for-sats upprepar sina satser ett oändligt antal gånger, dvs så länge villkoret uppfylls. Ett exempel på en oändlig exekvering (ej önskvärd): sum=0; while (sum >= 0) sum = sum + 1; Villkoret i denna while-sats kommer alltid att uppfyllas därför summeras sum upp till ett gigantiskt tal. Det går utmärkt att nästla while- med for-sats, med samma resonemang som för nästlade for-satser! Villkorlig styrning Med if-satsen kan en villkorlig styrning inom en for- eller while-sats göras. Denna sats förklaras lättast med exempel. %Exemplet visar hur en enhetsmatris kan skapas %mha for- och if-satsen %Skapar en kvadratisk matris med nollor matrix = zeros(10); for (i=1:10) for (j=1:10) %kollar om radnr. är lika med kolnnr. %sätt i så fall detta element till 1 if (j==i) matrix(i,j) = 1; 4
Flera if-satser kan förekomma i en och samma for/while-sats. Sen nns även elseif och else som används i kombination med if. Break-kommandot används även itigt när man vill avbryta och lämna en pågåe exekvering av en slinga. Exempel: for (räknare) if (villkor) break; %lämnar for-satsen omedelbart %elseif-villkoret kontrolleras ast om if:s villkor ej uppfylls elseif (villkor) sats; %om varken if eller elseif-villkoret uppfylls utöfrs else-satsen else sats; 5