F3: Funktioner (kap. 5)

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

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

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.

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.

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

Laboration: Grunderna i MATLAB

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

Sanningar om programmering

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

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

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

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

Monte Carlo-metoder. Bild från Monte Carlo

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

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

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

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

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

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

Introduktion till MATLAB

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

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

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

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

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

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

MMA132: Laboration 2 Matriser i MATLAB

Kort om programmering i Matlab

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

Ickelinjära ekvationer

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

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

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

Objektorienterad Programmering (TDDC77)

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

Kort om programmering i Python

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

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

TSBB14 Laboration: Intro till Matlab 1D

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

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 cos (3x 2 ) dx I =

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

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

Sanningar om programmering

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

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

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

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

TSKS08 Introduktionskurs i Matlab Föreläsning 2

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

Block 5: Ickelineära. ekvationer? Läroboken. Löpsedel: Icke-lineära. ekvationer. Vad visade laborationen? Vad visade laborationen?

Programmering i Matlab

TANA17 Matematiska beräkningar med Matlab

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

Introduktion till Matlab

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

Laboration 3. Funktioner, vektorer, integraler och felskattning

Matematisk Modellering

TAIU07 Matematiska beräkningar med Matlab

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

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

Lektionsanteckningar 11-12: Normalfördelningen

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

Svensk Matlab-terminologi

Stokastiska processer med diskret tid

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

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

Tentamen i Introduktion till programmering

Föreläsning 3-4 Innehåll

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

TAIU07 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab

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

Matlabövning 1 Funktioner och grafer i Matlab

Demonstration av laboration 2, SF1901

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. 9 november 2015 Sida 1 / 28

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

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

Funktioner. Linda Mannila

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

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

Syftet med den här laborationen är att du skall bli mer förtrogen med följande viktiga områden inom matematisk statistik

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Matematikcentrum 1(7) Matematisk Statistik Lunds Universitet MASB11 - Biostatistisk grundkurs HT2007. Laboration. Simulering

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

DATORÖVNING 2 MATEMATISK STATISTIK FÖR D, I, PI OCH FYSIKER; FMSF45 & MASB03. bli bekant med summor av stokastiska variabler.

Matematisk Modellering

Inlämningsuppgift 4 NUM131

Dagens föreläsning (F15)

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

Grundläggande datalogi - Övning 1

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 (Eng. default) 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 kommando- eller 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; end % if end % for n end % for m finalgear = bestm/bestn; else bestm = NaN; bestn = NaN; finalgear = NaN; error('felaktiga indata.'); end

Kuggväxel forts. Testkörning ger: >>findgear(3.14159,5,50) ans = 22 >>[m n g] = findgear(3.14159,5,50) m = 22 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; end if nargin<2 nmin = 5; end... Testkörning ger: >>[m n g] = findgear(pi,25) >>[m n g] = findgear m = 88??? Error using ==> findgear n = 28 Not enough input arguments. g = 3.1429 >>[m n g] = findgear(3.14159) >>[m n g] = findgear(17,10,50,50) m = 22??? Error using ==> findgear n = 7 Too many input arguments. g = 3.1429

Kuggväxel forts. Man kan på liknande sätt göra funktionen beroende av antalet anropsutparametrar. m = findgear(3.14159) m = 22 [m n] = findgear(3.14159) m = 22 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 getcount.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; end 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.

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 % alternative: pre-allokera pos = []; pos = zeros(2,runs); for run = 1:runs for run = 1:runs pos = [pos b(steps,0)]; pos(:,run) = b(steps,0); end end plot(pos(1,:),pos(2,:),'ko'); pos = pos(:,end); end

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(:,end)+[cos(a);sin(a)]; x = [x pos]; end if show plot(x(1,:),x(2,:),'k-'); axis equal end

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 oberoende 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 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 else disp(' f(a)f(b) > 0, ge nya a, b!'); end end 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)? else b = c; end end 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 x n+ 1 = x n f ( x f ( x n n ) )

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.

matlab-program visade: randtest: n = 100000; x = zeros(n,1); for k = 1:n x(k) = randi(100,1); end hist(x)