Exempel att testa. Stora problem och m-filer. Grundläggande programmering 4. Informationsteknologi. Informationsteknologi.

Relevanta dokument
Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while

Stora problem och m-filer

Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while

Sanningar om programmering. Sanningar om programmering. Programmeringsprocessen. Att skriva program i Matlab. Programmeringsprocessen

Sanningar om programmering. Ett vardagsexempel. Ett vardagsexempel (forts.) Grundläggande byggstenar i algoritmer/program. Programmet som recept

Sanningar om programmering

Sanningar om programmering. Programmeringsprocessen. Sanningar om programmering. Att skriva program i Matlab. Programmeringsprocessen

Sanningar om programmering. Sanningar om programmering. Programmeringsprocessen. Att skriva program i Matlab. Programmeringsprocessen

Sanningar om programmering. Sanningar om programmering. Programmeringsprocessen. Att skriva program i Matlab. Programmeringsprocessen

MATLAB Matrix laboratory

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

Vad är MATLAB? Användningsområden. Var kan man köra MATLAB? MATLAB-miljön: avsluta. MATLAB-miljön: Start. Informationsteknologi. Grunderna i MATLAB

Beräkningsverktyg HT07

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

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

Introduktion till MATLAB

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

Variabler och konstanter

Funktioner forts. F3: Funktioner (kap. 5) Parametrar. findgear.m forts

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

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

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

Introduktion till Matlab

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

Matriser. Vektorer. Grunderna i MATLAB 2. Informationsteknologi. Informationsteknologi.

Laboration: Grunderna i MATLAB

TSBB14 Laboration: Intro till Matlab 1D

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

MATLAB. En kort praktisk introduktion. Olof Hultin FAFA Omarbetad efter original av Henrik Persson

F3: Funktioner (kap. 5)

Matriser och Inbyggda funktioner i Matlab

Sanningar om programmering

Introduktion till Matlab

F3: Funktioner (kap. 5) Funktioner forts. Parametrar

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

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

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

Introduktion till MATLAB, med utgångspunkt från Ada

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

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

Matlabövning 1 Funktioner och grafer i Matlab

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

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

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

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

Kort om programmering i Matlab

Matriser och Inbyggda funktioner i Matlab

Laboration: Grunderna i Matlab

Introduktion till Matlab

Instruktion för laboration 1

Uppgift 1 (grundläggande konstruktioner)

Programdesign. Dokumentera. Dokumentera

2 februari 2016 Sida 1 / 23

Introduktion till Matlab

Skapa egna funktioner

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Introduktion till Matlab

Introduktion till Matlab

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

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

Matlabövning 1 Funktioner och grafer i Matlab

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

Introduktion till Matlab

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

TANA17 Matematiska beräkningar med Matlab

Börja programmera. Kapitel 4 i kompendiet Jämförande uttryck Villkorssatser Loopar (slingor) Funktioner. Läs inte avsnitt 4.2.3

MMA132: Laboration 2 Matriser i MATLAB

Introduktion till Matlab

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

Programmering i Matlab

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

Matriser och vektorer i Matlab

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 4 december 2015 Sida 1 / 26

Introduktion till MATLAB

Matematisk Modellering

TANA17 Matematiska beräkningar med Matlab

Laboration 2: 1 Syfte. 2 Väntevärde och varians hos en s.v. X med fördelningen F X (x) MATEMATISK STATISTIK, AK FÖR BYGG, FMS 601, HT-08

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

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

Liten MATLAB introduktion

Planering Programmering grundkurs HI1024 HT 2014

Introduktion till Matlab

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Introduktion till Matlab

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

Laboration 3. Funktioner, vektorer, integraler och felskattning

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Laboration 3. Funktioner, vektorer, integraler och felskattning

Matematisk Modellering

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

MMA132: Laboration 1 Introduktion till MATLAB

Vad är MATLAB? Vad är MATLAB? Vad är MATLAB? Användningsområden. Att börja använda MATLAB. Informationsteknologi. Grunderna i MATLAB

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Datorövning 1: Introduktion till MATLAB

TAIU07 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Transkript:

Grundläggande programmering 4 stefan@it.uu.se - Huvudprogram och underprogram - Egna funktioner - Olika typer av fel - Lite om effektiv programmering Exempel att testa Programmen för några vardagsproblem finns i filer i Ping Pongs Dokument LitetLotteri.m GissaTal.m laxamatematik.m gloslaxa.m (och underprogrammen glostest.m, matainglosor.m, KollaGlosor.m De är ej perfekta, men de ger idéer om hur program kan se ut Testa och kör Försök förstå vad som händer i programmen Stora problem och m-filer Hittills har vi haft en m-fil (kommandofil) för varje program när vi löst ett problem eller skrivit MATLAB-kod direkt i kommandofönstret Större problem måste delas upp i delproblem, var och en med egen algoritm. Större program blir uppdelade i fler delprogram (underprogram), dvs flera m-filer per problem (funktionsfiler och kommandofiler). En av M-filerna (kommandofil) utgör själva huvudprogrammet detta styr problemlösningen och anropar funktionerna. 1

Huvudprogram och underprogram Underprogram 1 Huvudprogram Underprogram 2 Underprogram 3 Huvudprogrammet är (vanligen) en kommandofil Huvudprogram anropar underprogram Underprogram är kommandofiler eller funktionsfiler. Funktioner vanligast och oftast att föredra Huvudprogram och underprogram I Ping Pong finns inlagt ett program som utför glostest (kopiera och testa) Har följande struktur: GlosTest.m KollaGlosor.m gloslaxa.m MataInGlosor.m I detta exempel är både huvudprogrammet och underprogrammen kommandofiler Huvudprogram och underprogram Så här ser gloslaxa.m ut (ungefär): val = menu('vad vill du göra?, Öva','Mata in', 'Avsluta'); if val == 3 Anrop av annan fil, disp('nu avslutar vi.'); underprogrammet elseif val == 1 disp('nu ska vi öva på glosor.'); GlosTest; elseif val == 2 disp('nu skall du mata in glosor.'); MataInGlosor; else disp( Fel värde. Vi avslutar!'); 2

Huvudprogram och underprogram Programmet GissaTal har följande struktur (programmet finns i Ping Pong): lastal.m GissaTal.m Huvudprogrammet kommandofil och underprogrammet en funktion. Enbart ett underprogram. Huvudprogram och underprogram När man har lite större problem delar man upp i delproblem Varje delproblem löses för sig oberoe av det större problemet Man behöver på det sättet bara ha kontroll över ett delproblem i taget Delproblemen blir vanligen en egen Matlabfunktion, eller flera funktioner (delproblemen kan innehålla egna underprogram) Kommandofiler och funktioner En kommandofil är ett sätt att lagra kommandon som annars skulle skrivits interaktivt. Genom att köra filen så exekveras alla kommandon i den. Inga parametrar. Funktioner kan liknas vid en svart låda. Man stoppar in indata (inparametrar) och får som resultat utdata (utparametrar). indata utdata Den svarta lådan har egna variabler, för mellanlagring av data, som vi utanför ej behöver bry oss om (eller kan se) 3

Kommandofiler och funktioner Skriv i filen MinFil.m följande: % En kommandofil x0 = 0; x1 = 2*pi; n = 100; x = linspace(x0,x1,n); y = cos(x)+sin(x); plot(x,y) Kommandona körs nu genom kommandot >> MinFil Vill man ändra t ex intervallet från 0 till pi behöver man bara ändra x1, sedan köra filen igen. Kommandofiler och funktioner Skriv i filen cossin.m följande funktion: function [x, y] = cossin(x0, x1, n) % [x, y]=cossin(x,y,n) % Beräknar cos(x)+sin(x) på [x0 x1] i % n punkter x = linspace(x0,x1,n); y = cos(x)+sin(x); plot(x,y) Funktionen anropas t ex genom: >> xstart=0; xslut=pi; n=100; >> [a,b] = cossin(xstart,xslut,n); Kommandofiler och funktioner >> [x1, y1] = cossin(xstart,xslut,n); function[x, y] = cossin(x0, x1, n) x = linspace(x0,x1,n); y = cos(x)+sin(x); plot(x,y) Utanför funktionen i funktionen utanför funkt xstart x0 xslut x1 n n x x1 y y1 4

Kommandofiler och funktioner Olika anrop till samma funktion >> [t, u] = cossin(0,2*pi,50); eller >> [a, b] = cossin(0,2*pi,50) Medför att a och b skrivs ut (inget semikolon) eller >> a1 = 0; a2 = 2*pi; >> cossin(a1,a2,50); Utdata lagras inte i någon variabel Kommandofiler och funktioner Observera också att >> [t, u] = cossin(0,2*pi,50); Leder till att variablerna t och u bildas, se t ex workspace. Allt som sker inne i funktionen är internt. medan användning av kommandofilen >> MinFil skapar många variabler (allt som sker i kommandofil påverkar hela MATLAB. Kommandofiler och funktioner En funktion måste alltid börja med funktionshuvud, t ex function [x, y] = cossin(x0, x1, n) utparametrar Obs! inled alltid med function inparametrar Alla variabler inne i funktionen är lokala, dvs existerar inte utanför funktionen ( utanför = MATLAB i övrigt, t ex kommandofönstret) Alla variabler i en kommandofil är globala Filnamn måste överensstämma med funktionsnamn, dvs här cossin.m 5

Kommandofiler och funktioner Kommandofiler är ofta specifika för ett visst problem som skall lösas. Kan vara svåra att återvända Funktioner är lättare att återanvända i flera program för olika problem av liknande sort (jmfr Matlabs inbyggda funktioner) Att skriva funktioner tänk först på vad som ska in och vad som ska ut ur funktionen = in- och utparametrar Ha inga onödiga utskrifter, vanligen bara varningsutskrifter användaren bestämmer om något ska skrivas ut eller ej Kommandofiler och funktioner Det finns många inbyggda (fördefinierade) funktioner i MATLAB Exempel: if abs(sum(x)) > 10 plot(x,y) Egentligen är abs, sum, plot funktioner i filerna abs.m, sum.m, plot.m Funktioner exempel Matematiska funktionen f(x) = sin(x)cos(x) blir så här som MATLAB-funktion Anropas med function f = sincos(x) % f = sincos(x) % Beräknar sin(x)*cos(x) f = sin(x)*cos(x); >> x = 0.5; y = sincos(x) y = 0.4207 Här: en in och en utparameter 6

Funktioner exempel Funktionen fungerar inte för vektorer >> x = linspace(0,2*pi); y=sincos(x)??? Error using ==> * Inner matrix dimensions must agree. Error in ==> C:\...\sincos.m On line 2 ==> f = sin(x)*cos(x); Vilket är problemet? Funktioner exempel Måste ändra till elementvisa operationer! function f = sincos(x) % f = sincos(x) % Beräknar sin(x)*cos(x) f = sin(x).*cos(x); >> x = linspace(0,2*pi); >> y=sincos(x); Nu fungerar det bra! Funktioner exempel Funktion som beräknar medelvärdet av två tal. function z = medelfunk(x, y) % z = medelfunk(x,y) % Beräknar medelvärdet av två tal, x, y z = ( x + y )./2; Anrop från kommandofilen main.m: a=2; b=6; c = medelfunk(a,b); disp(['medel = ', num2str(c)]); Ger vid körning resultatet >> main medel = 4 Här: två in och en utparameter 7

Funktioner exempel Inledande kommentarer i funktioner visas då man använder help-kommandot (precis som i kommandofiler) >> help medelfunk z = medelfunk(x,y) Beräknar medelvärdet av två tal, x, y Kommentaren bör beskriva hur man anropar funktionen och kort vad den gör man ska kunna använda funktionen bara genom hjälptexten Funktioner exempel function rita_graf x = linspace(0,1); y = x.*sin(x); plot(x,y); Här: ingen in och ingen utparameter Okänt antal parametrar En funktion kan ha egenskapen att den anropas med olika antal parametrar olika gånger. nargin = antal inparametrar vid anrop nargout = antal utparametrar vid anrop Ex) function [x, y] = cossin(x0, x1, n) % [x, y]=cossin(x,y,n) % Beräknar cos(x)+sin(x) på [x0 x1] i % n punkter if (nargin==2), n=100; x = linspace(x0,x1,n); y = cos(x)+sin(x); plot(x,y) 8

Okänt antal parametrar Kan nu anropas med t ex >> [x, y] = cossin(0, 2*pi); då sätts n till 100 i funktionen eller t ex >> [x, y] = cossin(0, 2*pi, 200); Ett sätt att ha s k defaultvärden i funktioner Underfunktioner, privata funktioner Funktioner kan givetvis anropa andra funktioner Men man kan även ha privata funktioner, dvs funktioner i funktioner s k underfunktioner där Underfunktioner ligger i samma fil som huvudfunktionen Underfunktionen bara kan bara anropas av sin huvudfunktion. Man kan bara ha en huvudfunktion per fil. Olika sorters fel Det finns tre typer av fel, s k buggar som kan inträffa i program Syntaxfel Ett grammatiskt fel. Kan ej översätta MATLABkoden till "datorkod". Felmeddelanden från inte alltid så lätta att tolka. Exekveringsfel Fel som uppkommer under körningen och medför att programmet "kraschar", dvs slutar exekvera, kallas exekveringsfel eller runtimefel. Logiska fel Programmeraren har tänkt fel, men programmet kör. Svårupptäckt. 9

Vanliga syntaxfel i MATLAB Skrivfel, t ex plott(x,y); Utelämnade tecken t ex multiplikationstecknet, *: 3(x+5) eller if ~( (x > 0) & (y < pengar*17) eller if ( x = 1 ) Felstavad identifierare skyldigmig = 50; if SkyldigMig > 100 Oidentifierade variabler t ex glömt nollställa sum for i=1:5, sum=sum+i;, sum Vanliga syntaxfel i MATLAB Glömd punkt vid elementvisa operationer, ger??? Error using ==> ^ Matrix must be square. Skriver else if, istället för elseif Slarv med kolon, komma, semikolon Goda råd vid programmering 1. Ha enbart en sats per rad 2. Indentera (flytta in text) på vettigt sätt. 3. Använd blanka rader för att dela upp koden i segment, t ex före/efter block 4. Använd vettiga identifierarnamn (variabel, funk) 5. Dokumentera gärna identifierare och förklara 6. Dokumentera delar av koden, tänk på syftet 7. Ha ett "dokumentationshuvud" i början av filen Kanske fel kan undvikas om koden uppfyller detta 10

Goda råd Effektiv programmering: I största möjliga grad bör vektoroperationer användas Ex) Antag att f = (f 1, f 2,,f n ) skapats och vi vill beräkna f 1 +2f 2 + +2f n-1 +f n % Metod 1 tmp = f(1); for k = 2:n-1 tmp = tmp + 2*f(k); sum = tmp + f(n) Goda råd Effektiv programmering: Ex forts) Utnyttja att sum är en s.k. skalärprodukt mellan (1,2,,2,1) och (f 1, f 2,,f n ) T % Metod 2 sum = [1 2*ones(1,n-2) 1]*f ; Metod 2 är mycket snabbare! Tecknet i f betyder transponat, dvs f T Goda råd Effektiv programmering: Behandla vektorer och matriser som vilka variabler som helst. Skriv generellt. Undvik att skriva funktioner som bara fungerar för ett problem. Undvik siffror inne i loopar och inne i program. Använd bokstäver och sätt konstanter och parametrar initialt i koden. 11

Goda råd Effektiv programmering [m,n] = size(a); for i = 1:m är bättre än t ex for j = 1:n A(i,j) = A(i,j)- for i = 1:500 for j = 1:400 A(i,j) = A(i,j)- 12