Skapa egna funktioner

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

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

F3: Funktioner (kap. 5)

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

F3: Funktioner (kap. 5)

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

Introduktion till MATLAB

Villkor if, switch. F2: Styrstrukturer, programmeringsteknik (kap. 3 4) If-kommando forts. If-kommando forts.

Motivering för programmering. F1: Introduktion, Matlabrepetition (kap. 1 2) Att kunna programmera. Interpreterat/kompilerat

Introduktion till Matlab

Laboration: Grunderna i MATLAB

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

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

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

MMA132: Laboration 1 Introduktion till MATLAB

Kursinnehåll. Introduktion till kursen. Hederskodex. Programmering

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

Variabler och konstanter

2 februari 2016 Sida 1 / 23

Kort om programmering i Matlab

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

Villkor, if, switch. F2: Styrstrukturer, programmeringsteknik (kap. 3 4) If-kommando forts. If-kommando forts.

Villkor if, switch. F2: Styrstrukturer, programmeringsteknik (kap. 3 4) If-kommando forts. If-kommando forts.

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

REGLERTEKNIK Laboration 4

Funktioner. Linda Mannila

Matlabövning 1 Funktioner och grafer i Matlab

TSBB14 Laboration: Intro till Matlab 1D

Introduktion till Matlab

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

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

Introduktion till Matlab

MMA132: Laboration 1 & 2 Introduktion till MATLAB

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

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

Matlabövning 1 Funktioner och grafer i Matlab

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

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

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

TANA17 Matematiska beräkningar med Matlab

Kort om programmering i Python

Matematisk Modellering

Introduktion till Matlab

Introduktion till Matlab

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

Sanningar om programmering

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

TANA17 Matematiska beräkningar med Matlab

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

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

Laboration: Grunderna i Matlab

F2: Styrstrukturer, programmeringsteknik (kap. 3 4)

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Introduktion till Matlab

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

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Matematisk Modellering

Liten MATLAB introduktion

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

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

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 3-4 Innehåll

MATLAB övningar, del1 Inledande Matematik

Programmering i Matlab

4.3. Programmering i MATLAB

Kursuppläggning. F1: Introduktion, Matlabrepetition (kap. 1 2) Motivering för programmering. Att kunna programmera

Introduktion till Matlab Föreläsning 2

Beräkningsverktyg HT07

Matematisk Modellering

MMA132: Laboration 2 Matriser i MATLAB

Tentamen i Introduktion till programmering

TAIU07 Matematiska beräkningar med Matlab

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

Introduktion till Matlab

Linjär algebra med tillämpningar, lab 1

F1: Introduktion, Matlabrepetition (kap. 1 2)

TMV156/TMV155E Inledande matematik E, 2009

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

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

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

FY021G Ingenjörsvetenskap MATLAB och regressionsanalys

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

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

Polynomanpassningsprogram

1 Funktioner och procedurell abstraktion

Deklarationer/definitioner/specifikationer

Introduktion till Matlab

Motivering för programmering. F1: Introduktion, Matlabrepetition (kap. 1 2) Att kunna programmera. Interpreterat/kompilerat

Introduktion till Matlab

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

Instruktion för laboration 1

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

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

TDP002 - Imperativ programmering

Programmeringsteknik med C och Matlab

Transkript:

F3: Funktioner (kap. 5) 1 Skapa egna funktioner Funktioner och funktionsanrop Funktionsargument in- och utargument aktuella in- och utargument Tillämpningsexempel - Kuggväxel Lokala, globala och persistenta variabler Varierande antal argument, standardvärden Underfunktioner Tillämpningsexempel - Slumpvandring Polynom, summor och evalueringsfunktioner Effektivitet Skapa egna funktioner 2 MATLAB har en mekanism som är speciellt utformad för att lättare utveckla ett program genom en uppdelning i separata deluppgifter. Varje deluppgift kan skrivas som en funktion. Syftet med skapa egna funktioner är att abstrahera att bortse från detaljer: Dela upp programmet i mindre hanterbara delar lättare att överblicka och testa. Lös ett delproblem en gång för alla skriv en funktion. Den kan återanvändas i andra program vid senare tillfälle. Olika programmerare kan skriva olika delar av programmet om man först (gemensamt) bestämmer sig för strukturen. Om man kommer på ett bättre sätt att lösa delproblemet behöver inte det påverka resten av programmet (man skriver bara om funktionen inuti)

Introduktion till funktioner i MATLAB Det finns två typer av Matlabfiler (M-filer): Scriptfiler: en samling satser som lagras i en fil. Exekveras som om kommandona skrivits in i kommandofönstret Script-filer delar kommandofönstrets arbetsminne Funktionsfiler: en speciell sorts M-fil som kan ta emot indata i samband med anropet (inparametrar) och returnera ett resultat (utparametrar) till det anropande programmet Funktionen använder ett eget arbetsminne 3 Funktionsfiler 4 I en funktionsfil inleds första raden (funktionshuvudet) i M-filen med ordet function och därefter kommer utargument (eller parametrar ) och funktionsnamn med inargument enligt följande generella form: function [y1, y2, ] = fnamn(x1, x2, ) En funktion utan utargument får följande funktionshuvud: function fnamn(x1, x2, ) På första raden direkt efter funktionshuvudet skriver man dokumentations-kommentarer enligt reglerna för lookfor och help. Därefter följer funktionskroppen, dvs de satser och kommandon som utförs i tur och ordning när funktionen anropas. En funktion bör lagras i en fil med namnet funktionsnamn.m

Anrop av funktioner - värdeöverföring 5 En funktion anropas från kommandofönstret, ett script eller från en annan funktion med formen: funktionsnamn(aktuella_inargument) eller aktuella_utargument = fnamn(aktuella_inargument) Vid anropet skickas indata som tas emot av inargumenten, dvs aktuella argumentens värde kopieras i tur och ordning till motsvarande inargument. När funktionen har exekverat färdigt (när sista satsen eller kommandot return utförts): kopieras utargumentens värde till motsvarande aktuella_utargument-variabler raderas alla argument och variabler i funktionen Undantag gäller för globala och persistenta variabler. Därefter fortsätter exekveringen i den anropande funktionen med satserna efter anropet. Kuggväxelexemplet som funktion 6 Vi gör om scriptfilen för kuggväxeln (som vi studerade i kap. 2) till en funktion i filen findgear.m Så här ser funktionshuvudet med kommentarer ut: function [m n finalgear] = findgear(gear,min,max) % FINDGEAR Beräknar optimala kugghjul för en given utväxling % Hittar det kugghjulspar som bäst approximerar en given utväxling. % [m n finalgear] = findgear(gear,min,max) % hittar den bästa approximationen m/n till % gear för m och n mellan min och max för % positiva min, max och gear. H1 comment line, displayed by lookfor command H1 + remaining comment lines (until first blank line), display by help command

Kuggväxelexemplet, funktionskropp besttol = realmax; if gear>0 & max>0 & min>0 for m = min:max nprel = floor(m/gear); for n = nprel:nprel+1 if n<min n=min; end; if n>max n=max; end; tol = abs(m/n-gear); if tol<besttol besttol = tol; bestm = m; bestn = n; end % if end % for n end % for m m = bestm; n = bestn; finalgear = m/n; else error('felaktiga indata.'); end; end % function findgear New feature in MATLAB 7 Recommended in PENG 7 Kuggväxelexemplet, funktionsanrop 8 Testkörning ger: >> [m n g] = findgear(3.14159,5,50) m = 22 n = 7 g = 3.1429 >> findgear(3.14159,5,50) ans = 22 >> findgear(3.14159,5,-50)??? Error using ==> findgear Felaktiga indata.

Varierande antal argument 9 Funktioner kan anropas med olika antal argument från gång till gång. För att hantera detta använder man funktionerna nargin, nargchck och error nargin en funktion som returnerar antalet aktuella inargument som den anropades med msg = nargchk(min,max,nargin); används för att kontrollera antalet inargument till en funktion inte är för få eller för många. Argumentet nargin ger aktuella antalet argument. Om detta ligger utanför intervallet som begränsat av min och max returnerar nargchk en felsträng, annars en tom matris error(msg); Skriver ut ett felmeddelande och strängen msg på skärmen och avbryter exekveringen av den aktuella M-filen. Funktionen anropas om antalet argument är felaktigt Varierande antal argument forts. Vi ändrar funktionen findgear så att standardvärdena (defaultvärdena) för max och min är 100 resp. 5. function [m n finalgear] = findgear(gear,min,max) % % Standardvärden för max % och min är 100 resp. 5. % Ccheck for a legal number of input arguments msg = nargchk(1,3,nargin); % nargchk returnerar tom sträng eller feltext till msg error(msg); % utskrift av msg, dvs feltexten eller ingenting if nargin<3 max = 100; end if nargin<2 min = 5; end... Testkörning ger: [m n g] = findgear(pi,25) m = 88 n = 28 g = 3.1429 [m n g] = findgear(3.14159) m = 22 n = 7 g = 3.1429 [m n g] = findgear??? Error using ==> findgear Not enough input arguments. [m n g] = findgear(17,10,50,50)??? Error using ==> findgear Too many input arguments. 10

Variablers räckvidd och livslängd lokala, globala och persistenta variabler Variabler har en räckvidd och livslängd. Räckvidden avgör var en variabel kan användas, medan livslängden avgör hur länge (i tiden) den existerar. I funktionsfiler är parametrar och variabler lokala. Räckvidden för en variabel sträcker sig bara till den egna funktionen Detta innebär att en variabel i en funktionsfil med samma namn som en variabel i MATLAB:s arbetsarea är en helt annan variabel. Det finns dock ett undantag, och det gäller variabler som deklareras med kommandot global. En variabel som deklareras som global i en funktion är tillgänglig i alla funktioner där den också deklarerats global. Normalt bevaras inte värdet på en lokal variabel mellan anrop av en funktion. En variabel som ska behålla sitt värde mellan anrop men bara behöver nås i en funktion kan istället göras persistent. 11 Globala variabler - exempel Programmera en räknare som kan stegas (med funktionen count) och avläsas (med funktionen getcount). Själva räknarvariabeln måste nås av båda funktionerna. Vanliga variabler i funktioner är lokala. Vi gör en variabel, COUNTER, global (man brukar skriva globala variabler med versaler). function count % Stegar räknaren COUNTER. global COUNTER if isempty(counter) COUNTER = 0; end COUNTER = COUNTER+1; end % function count Funktionen finns i filen count.m 12 function c = getcount % Avläser räknaren COUNTER. global COUNTER c = COUNTER; end % function getcount Funktionen finns i filen getcount.m Testkörning: getcount ans = [] count; count; getcount ans = 2 COUNTER??? Undefined function or variable 'COUNTER'

Underfunktioner och privata funktioner Man kan skapa underfunktioner (nested functions) i sina funktioner. Dessa underfunktioner ligger i samma M-fil som huvudfunktionen (men längre ned) och kan enbart anropas av huvudfunktionen och av andra underfunktioner i M-filen. Scriptfiler kan inte innehålla lokala funktioner. Utöver underfunktioner kan man ha privata funktioner. Denna typ av funktioner är M-filer som läggs i en katalog med namnet private. De privata funktionerna kan endast anropas av funktioner som befinner sig i katalogen över private 13 Ex: Slumpvandring 14 Exempel: Programmera en s.k. brownsk rörelse, dvs en slumpvandring med lika sannolikhet för alla riktningar, förflyttning med sträckan 1 per steg och med start i origo. För diagramritningen används kommandot plot Inparametrarna består i sin enklaste form av endast av x- och y-koordinaterna för den datamängd man vill presentera grafiskt. plot(x,y) ritar vektorn y mot x. De ordnade talparen (x j och y j ) ritas ut. Den horisontella axeln är x-axel och den lodräta är y-axel Ett anrop med plot(x,y,str) anger str färg och form på punkter och linjer

Slumpvandring - huvudfunktion 15 function pos = brown(steps,runs) % Simulerar Brownsk rörelse/slumpvandring. % pos = brown(steps) ritar en vandring med steps antal steg. % pos = brown(steps,runs) ritar slutpunkterna för runs % stycken vandringar med vardera steps steg. msg = nargchk(1,2,nargin); error(msg); if nargin==1 pos = b(steps,1); % en vandring med plottning else pos = []; for run = 1:runs pos = [pos b(steps,0)]; % en vandring utan plottning end plot(pos(1,:),pos(2,:),'ko'); b är en nested function pos = pos(:,end); end Slumpvandring - underfunktion Underfunktionen placeras i samma funktionsfil: 16 function pos = b(steps,show) % Simulerar en slumpvandring % och plottar den om show är sant. pos = [0;0]; x = pos; for i = 1:steps a = rand*2*pi; pos = x(:,end)+[sin(a);cos(a)]; x = [x pos]; end if show plot(x(1,:),x(2,:),'k-'); end end % function b end % function brown

Slumpvandring - anrop med ett argument Ett anrop med ett argument ritar en vandring och ger följande diagram: >> brown(100); 17 Slumpvandring - anrop med två argument 18 Ett anrop med två argument ger följande diagram: >> brown(100,1000);

Slumpvandring - kommentarer Kommentarer: Funktionen rand ger ett värde som är större än eller lika med 0 och mindre än 1. Området med slutpunkter efter n steg har praktiskt taget radien roten ur n. 19 Polynom i MATLAB MATLAB lagrar ett polynom som en radvektor. Elementen representerar koefficienterna i polynomet med fallande ordning på potenserna. polyval(p, x) beräknar värdet av polynomet p Om p är en skalär så returneras värdet av polynomet för punkten x. Om x är en vektor så returneras värdena för vart och ett av elementen. Med p(x) = x 4 +5x 3 2x 2 +7x 11 kan vi beräkna: p = [1 5-2 7-11]; val1 = polyval(p,1) % värdet för x = 1 val1 = 0 val2 = polyval(p,[2 3 5 7 9]) val2 = 51 208 1224 4056 10096 Nollställen till polynomet p, dvs lösningarna till ekvationen p(x) = 0, kan bestämmas med roots(p) (Resultatet kan bli komplexvärt): roots1 = roots(p) roots1 = -5.6366-0.1817 + 1.3851i -0.1817-1.3851i 1.0000 20

Summor och evalueringsfunktioner En aritmetisk serie a, a+s, a+2*s,..., a+(n-1)*s kan vi summera med f = 1:99; summa = sum(f) summa = 4950 21 Funktionsfunktioner och evaluering av strängar, forts 22 I MATLAB kan man skriva en generell funktion F genom att skicka en annan funktion f i en sträng som indata. MATLAB-kommandon kan skrivas och lagras som strängar. Dessa kommandosträngar kan evalueras med hjälp av kommandot eval Formler kan lagras som text. Summaformeln är: (a+a+(n-1)*s)*n/2 Vi lagrar summaformeln i variabeln str. str = '(2*a+(n-1)*s)*n/2'; a=1; s=1; n=99; eval(str) ans = 4950 eval(str) funktionen eval utför de kommandon som finns i strängen str och returnerar resultatet

Effektivitet Det finns ett särskilt fönster för att skapa profil för ett program, dvs. för att samla in och visa uppgifter om hur många gånger programmets olika delar har exekveras och om hur lång exekveringstid som går åt för respektive del. Kommandot tic startar tidtagning och toc avläser tid sedan senaste tic. Med kommandot pcode sparas p-koden som en fil med tillägget.p. Det finns hjälpmedel för att kombinera MATLAB med andra språk såsom C, Fortran, Java och Ada. 23