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

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

F3: Funktioner (kap. 5)

F3: Funktioner (kap. 5)

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

Skapa egna funktioner

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.

F2: Styrstrukturer, programmeringsteknik (kap. 3 4)

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

Laboration: Grunderna i MATLAB

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

Sanningar om programmering

2 februari 2016 Sida 1 / 23

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

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

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

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

Monte Carlo-metoder. Bild från Monte Carlo

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

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

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

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

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

Objektorienterad Programmering (TDDC77)

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

MMA132: Laboration 2 Matriser i MATLAB

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

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

TSBB14 Laboration: Intro till Matlab 1D

Introduktion till MATLAB

Kort om programmering i 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:

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

Föreläsning 3-4 Innehåll

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

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

LABORATION 2. Trapetsregeln, MATLAB-funktioner, ekvationer, numerisk derivering

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

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

Kort om programmering i Python

Grundläggande datalogi - Övning 1

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

TSKS08 Introduktionskurs i Matlab Föreläsning 2

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

Sanningar om programmering

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

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

Introduktion till Matlab

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

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

) + γy = 0, y(0) = 1,

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

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Newtons metod. 1 Inledning. 2 Newtons metod. CTH/GU LABORATION 6 MVE /2013 Matematiska vetenskaper

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

Objektorienterad Programmering (TDDC77)

Funktioner. Linda Mannila

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

HI1024 Programmering, grundkurs TEN

TAIU07 Matematiska beräkningar med Matlab

Ickelinjära ekvationer

LABORATION cos (3x 2 ) dx I =

Matlabövning 1 Funktioner och grafer i Matlab

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

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

Laboration 3: Stora talens lag, centrala gränsvärdessatsen och enkla punktskattningar

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

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

Matlabövning 1 Funktioner och grafer i Matlab

Svensk Matlab-terminologi

MATLAB övningar, del1 Inledande Matematik

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

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

Laboration 3. Funktioner, vektorer, integraler och felskattning

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

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

Programmering i Matlab

Tentamen i Introduktion till programmering

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

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

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

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

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

Matematisk Modellering

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

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

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

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Matematikcentrum 1(6) Matematisk Statistik Lunds Universitet MASB11 - Biostatistisk grundkurs VT2014, lp3. Laboration 2. Fördelningar och simulering

Introduktion till Matlab

Deklarationer/definitioner/specifikationer

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

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

Introduktion till 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 syns bara för funktionerna i den m-filen. Vi gör om kommandofilen för kuggväxel till en funktion: function [bestm bestn finalgear] = findgear(gear,nmin,nmax) % Hittar det kugghjulspar som bäst % approximerar en given utväxling. % [m n finalgear] = findgear(gear,nmin,nmax) % hittar den bästa approximationen m/n till % gear för m och n mellan nmin och nmax för % positiva nmin, nmax och gear. if gear>0 & nmax>0 & nmin>0 bestdiff = realmax; for m = nmin:nmax nprel = floor(m/gear); for n = max(nprel,nmin):min(nprel+1,nmax) diff = abs(m/n-gear); if diff<bestdiff bestdiff = diff; bestm = m; bestn = n; % if % for n % for m finalgear = m/n; 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 nmax och nmin blir 100 resp. 5. För sådant använder man funktionerna nargin, nargout, nargcheck, error, warning och inputname. function [m n finalgear]=findgear(gear,nmin,nmax) % % positiva nmin, nmax och gear. Skönsvärde % för nmax och nmin är 100 resp. 5. msg = nargchk(1,3,nargin); error(msg); if nargin<3 nmax = 100; if nargin<2 nmin = 5;... Testkörning ger: [m n g] = findgear(pi,25) [m n g] = findgear m = 88 n = 28 g = 3.1429??? Error using ==> findgear Not enough input arguments. [m n g] = findgear(3.14159) [m n g] = findgear(17,10,50,50) n = 7 g = 3.1429??? Error using ==> findgear Too many input arguments. Kuggväxel forts. Man kan på liknande sätt göra funktionen beroe av antalet anropsutparametrar. m = findgear(3.14159) [m n] = findgear(3.14159) n = 7

Globala variabler Programmera en räknare som kan stegas med anrop till 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: I filen getcout.m: function count function c = getcount % Stegar räknaren COUNTER % Avläser räknaren COUNTER global COUNTER global COUNTER if isempty(counter) c = COUNTER; COUNTER = 0; COUNTER = COUNTER+1; 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. Om matlab-kommandona exist och isempty : exist( varnamn ) - obs! inparametern ska vara en sträng! är sann om namnet varnamn är en variabel i arbetsplatsen, en funktion, en m-fil...: help exist ger: EXIST Check if variables or functions are defined. EXIST('A') returns: 0 if A does not exist 1 if A is a variable in the workspace... 5 if A is a built-in MATLAB function 6 if A is a P-file on MATLAB's search path 7 if A is a directory 8 if A is a Java class ISEMPTY(var) (obs! var är ett variabelnamn, inte en sträng!) är sann om variabeln finns men är tom (0x0) ISEMPTY True for empty array. ISEMPTY(X) returns 1 if X is an empty array and 0 otherwise. An empty array has no elements, that is prod(size(x))==0. Kommandot global COUNTER skapar en tom variabel, åtkomlig för alla funktioner som gör global COUNTER; den blir tom, och kan testas med ISEMPTY.

Slumpvandring Programmera Brownsk rör/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ör/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); % alternativ - undvik % dynamisk minnesallokering pos = []; pos = zeros(2,runs); for run = 1:runs for run = 1:runs pos = [pos b(steps,0)]; pos(:,run) = b(steps,0); plot(pos(1,:),pos(2,:),'ko'); % MYCKET snabbare Slumpvandring forts. Som lokal funktion i samma funktionsfil: function pos = b(steps,show) % Simulerar en slumpvandring med steps steg % och plottar den om show är sant. pos = [0;0]; x = pos; % kolonn (x;y) for k = 1:steps a = rand*2*pi; % Rekt.fördeln. på [0,2pi] pos = x(:,)+[cos(a);sin(a)]; x = [x pos]; if show plot(x(1,:),x(2,:),'k-'); axis equal Testkör: brown(100) brown(100,1000)

Slumpvandring forts. Området med slutpunkter efter n steg har praktiskt taget radien n, en illustration till Centrala Gränsvärdessatsen och egenskaper hos normalfördelningen: o Summan av n oberoe stokastiska variabler med medelvärde m och varians! närmar sig N(mn, n!) då n blir stor. Medelvärdet av sin och cos är noll, och variansen 1 / 2. Så x n och y n blir normalfördelade med varians n / 2. 2 2 2 o Därmed också xn + yn = r, varav rotations-symmetrin hos bilden. Kommandofiler kan inte innehålla lokala funktioner. Utöver lokala funktioner kan man ha»privata» funktioner. Felsökning igen När programmet inte ger önskat resultat: Läs koden. Prova att köra med andra indata När ett fel hittas, rätta det och testa igen leta efter ett fel i taget! 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). Intervallhalvering Det finns ett särskilt fönster för att skapa profil för ett program, dvs. uppgifter om hur många gånger programmets olika delar/rader har exekverats, 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. Intervallhalvering TÖ1 Uppgift: Finn nollställe till f(x), givet två startgissningar a, b sådana att f(a) f(b) < 0 Algoritm: 1. c = (a+b)/2; 2. om f(c) f(a) > 0 a = c annars b = c 3. om abs(b-a) > tolerans, gå till 1, annars klart matlab Antag att funktionen f är definierad och heter f_test % intervall-halvering: finn nollställe till f_test(x) % Preludier: kontrollera f(a)f(b)<0 och sätt tolerans while 1 a = input('a: '); b = input('b: '); if f_test(a)*f_test(b) < 0 % OK break disp(' f(a)f(b) > 0, ge nya a, b!'); tol = 1e-6;

matlab k = 0; while abs(b-a)>tol k = k+1; c = (a+b)/2; if f_test(c)*f_test(a) > 0 %?? 2 f-eval per steg? a = c; % vi har ju redan f(a)? b = c; disp(['rot: ',num2str(c),' #iter.: ',num2str(k)]); Effektivitet - algoritm Alltid konvergens under givna förutsättningar, men Det krävs ca. log2( b-a /tol) evalueringar av f Det räcker att f är kontinuerlig Snabbare algoritmer använder mera information om f, t.ex Newton xn+ 1 = xn " f ( xn) f!( xn) Effektivitet - maskinen 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 (se F2 om celler) 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.