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

Relevanta dokument
F3: Funktioner (kap. 5)

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

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

F3: Funktioner (kap. 5)

Skapa egna funktioner

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.

F2: Styrstrukturer, programmeringsteknik (kap. 3 4)

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

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

Laboration: Grunderna i MATLAB

2 februari 2016 Sida 1 / 23

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

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

Variabler och konstanter

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

TSKS08 Introduktionskurs i Matlab Föreläsning 2

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

Sanningar om programmering

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till MATLAB

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

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

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

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

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

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

C++ Slumptalsfunktioner + switch-satsen

TDIU01 - Programmering i C++, grundkurs

Matematisk Modellering

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

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

Svensk Matlab-terminologi

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

Funktioner. Linda Mannila

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

Introduk+on +ll JavaScript if- sats, funk+oner, bilder

Föreläsning 3-4 Innehåll

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

Grundläggande datalogi - Övning 1

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

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

Tentamen i Introduktion till programmering

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

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

Kort om programmering i Matlab

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

Introduktion till Matlab

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

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

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

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 för M, DPU. Fredrik Berntsson, Linköpings Universitet. 20 november 2015 Sida 1 / 30

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

MMA132: Laboration 2 Matriser i MATLAB

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Dagens föreläsning (F15)

Sanningar om programmering

Matematisk Modellering

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

2D1339 Programkonstruktion för F1, ht 2003

TDP002 - Imperativ programmering

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

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

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

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

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

Programmeringsteknik med C och Matlab

TAIU07 Matematiska beräkningar med Matlab

LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER. 1 Inledning. 2 Eulers metod och Runge-Kuttas metod

TSBB14 Laboration: Intro till Matlab 1D

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

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

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

TANA17 Matematiska beräkningar med Matlab

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Använda Python Laboration 1 GruDat, DD1344

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

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

Kort om programmering i Python

Objektorienterad Programkonstruktion. Föreläsning jan 2017

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

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

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

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

Matlabövning 1 Funktioner och grafer i Matlab

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

REGLERTEKNIK Laboration 4

Introduktion till Matlab

Föreläsning 2 Programmeringsteknik och C DD1316

2D1339 Programkonstruktion för F1, ht 2003

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

Funktionens deklaration

Liten MATLAB introduktion

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

Transkript:

F3: Funktioner (kap. 5) Funktionsfil, funktionsanrop in- och utparametrar, anropsin- och anropsutparametrar lokala, globala och persistenta variabler lokala funktioner return variabelt antal parameterar, skönsvärde slumptal avlusning, felsökning (debugging), programprofil Funktioner forts. En funktion är en följd kommandon i en m-fil som inleds med ett funktionshuvud: function [utparameter1, ] = funktionsnamn(inparameter1, ) eller function funktionsnamn(inparameter1, ) Direkt efter funktionshuvudet skriver man dokumentationskommentarer enligt reglerna för lookfor och help. Därefter står kommandon som utförs när funktionen anropas. Funktionen anropas med: funktionsnamn(anropsinparameter1, ) eller [anropsutparameter1, ] = funktionsnamn(anropsinparameter1, ) När kommandona i funktionen har utförts till slut fortsätter exekveringen efter anropet. En funktion bör lagras i en fil med namnet funktionsnamn.m. Parametrar Parametrarna och övriga variabler i en funktion är lokala dvs. har inget med variabler med samma namn i kommandofönstret eller andra kommandoeller funktionsfiler att göra. Undantag gäller globala och persistenta variabler. Funktioner kan skrivas så att de, olika gånger, kan anropas med olika antal in- och utparametrar. En m-fil kan innehålla mer än en funktion. Funktionerna efter den första kallas lokala funktioner och de kan anropas bara i samma m-fil. Vi gör om kommandofilen för kuggväxel till en funktion: function [m n finalgear] = findgear(gear,min,max) % 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. findgear.m forts if gear>0 & max>0 & min>0 bestdiff = realmax; for m = min:max nprel = floor(m/gear); for n = nprel:nprel+1 if n<min n=min; ; if n>max n=max; ; diff = abs(m/n-gear); if diff<bestdiff bestdiff = diff; bestm = m; bestn = n; % if % for n % for m m = bestm; n = bestn; finalgear = m/n; else error('felaktiga indata.');

Kuggväxel forts. Testkörning ger: findgear(3.14159,5,50) ans = 22 [m n g] = findgear(3.14159,5,50) n = 7 g = 3.1429 findgear(3.14159,5,-50)??? Error using ==> findgear Felaktiga indata. Parametrar forts. Anropsinparametrarna är uttryck. Vid anropet kopieras uttryckens värde till motsvarande inparameter. När funktionen har exekverat färdigt kopieras utparametrarna till motsvarande anropsutparametrar. Anropsutparametrarna får vara färre än utparametrarna. Funktionen har exekverat färdigt när sista kommandot eller sista kommandot före nästa funktion har utförts eller när kommandot return utförts. Vi ändrar funktionen så att skönsvärdena för max och min är 100 resp. 5. För sådant använder man funktionerna nargin, nargout, nargcheck, error, warning och inputname. function [m n finalgear] = findgear(gear,min,max) % 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. Skönsvärde för max % och min är 100 resp. 5. msg = nargchk(1,3,nargin); error(msg); if nargin<3 max = 100; if nargin<2 min = 5;... Kuggväxel forts. Testkörning ger: [m n g] = findgear(pi,25) m = 88 n = 28 g = 3.1429 [m n g] = findgear(3.14159) 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.

Man kan på liknande sätt göra funktionen beroe av antalet anropsutparametrar. m = findgear(3.14159) [m n] = findgear(3.14159) n = 7 Global variabel Programmera en räknare som kan stegas (med count) och avläsas (med getcount). Själva räknaren måste nås av båda funktionerna. Vanliga variabler i funktioner är ju lokala. Vi gör en variabel, COUNTER, global. Man brukar skriva globala variabler med versaler. I filen count.m: function count % Stegar räknaren COUNTER global COUNTER if isempty(counter) COUNTER = 0; COUNTER = COUNTER+1; I filen getcout.m: function c = getcount % Avläser räknaren COUNTER global COUNTER c = COUNTER; Global variabel forts. Testkörning: getcount ans = [] count; count; getcount ans = 2 COUNTER??? Undefined function or variable 'COUNTER' En variabel som ska sparas mellan anrop men bara behöver nås i en funktion kan istället göras persistent. Slumpvandring Programmera Brownsk rörelse/slumpvandring med lika sannolikhet för alla riktningar, förflyttning sträckan 1 per steg och start i origo. Låt filen brown.m innehålla: function pos = brown(steps,runs) % Simulerar Brownsk rörelse/slumpvandring. % pos = brown(steps) ritar en vandring med steps % steg. % pos = brown(steps,runs) ritar slutpunkterna av % runs stycken vandringar med vardera steps steg.

Slumpvandring forts. msg = nargchk(1,2,nargin); error(msg); if nargin==1 pos = b(steps,1); else pos = []; for run = 1:runs pos = [pos b(steps,0)]; plot(pos(1,:),pos(2,:),'ko'); pos = pos(:,); Slumpvandring forts. Som lokal funktion i samma funktionsfil: 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(:,)+[cos(a);sin(a)]; x = [x pos]; if show plot(x(1,:),x(2,:),'k-'); Testkör: Slumpvandring forts. brown(100); ger följande diagram: Slumpvandring forts. och brown(100,1000); ger:

Slumpvandring forts. Området med slutpunkter efter n steg har praktiskt taget radien n. Kommandofiler kan inte innehålla lokala funktioner. Utöver lokala funktioner kan man ha»privata» funktioner. Funktionen rand ger ett värde som är större än eller lika med 0 och mindre än 1. Felsökning igen När programmet inte ger önskat resultat: Läs koden. Om ett fel hittas, rätta det och testa igen, annars lägg in spårutskrifter eller brytpunkter för att se i vilken ordning kommandona utförs och vissa variablers mellanresultat (ta bort ;, lägg in disp eller keyboard). 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 och returnerar tid sedan senaste tic. Effektivitet 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. Använda Matlab i rapport Det finns möjlighet att skriva Matlab så att körning av programmet skapar ett dokument som innehåller förklarande text, programavsnitt och resultat från körningen. Dokumentet kan göras i olika format såsom HTML, XML, MSWord, Latex. Varje cell blir ett avsnitt med det som står efter %% som rubrik. Textdelar inom $$ $$ tolkas som TeX, text inom sätts som fastbreddstext, <<filnamn>> sätter in en bild, * text sätter in ett element i en oordnad lista, och # text sätter in ett element i en numrerad lista, HTML-kod kan sättas in direkt, *text* ger halvfet och _text_ ger kursiv text. Funktioner kan hanteras om man inte utför dem vid publiceringen. Spara, kör och skapa dokument. Utför markerad cell. Utför markerad cell och markera nästa cell.

Utför hela programmet Lägg in en cellbörjan. Visa cellförteckning. Visa info om celler.