Stora problem och m-filer

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

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

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

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

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

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:

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

Variabler och konstanter

Beräkningsverktyg HT07

Sanningar om programmering

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

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

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

Introduktion till MATLAB

Laboration: Grunderna i MATLAB

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

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

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

TSBB14 Laboration: Intro till Matlab 1D

2 februari 2016 Sida 1 / 23

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

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

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

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

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

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

Instruktion för laboration 1

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

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

DD1361 Programmeringsparadigm. Carina Edlund

Värmedistribution i plåt

F3: Funktioner (kap. 5)

Matematisk Modellering

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

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Dagens föreläsning (F15)

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

Programmeringsteknik med C och Matlab

MMA132: Laboration 2 Matriser i MATLAB

Introduktion till Matlab

Kort om programmering i Matlab

JAVAUTVECKLING LEKTION 4

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

Planering Programmering grundkurs HI1024 HT 2014

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

Matlabövning 1 Funktioner och grafer i Matlab

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

Matematisk Modellering

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

Programdesign. Dokumentera. Dokumentera

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

TDIU01 - Programmering i C++, grundkurs

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

Matriser och Inbyggda funktioner i Matlab

Introduktion till Matlab

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

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

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

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

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

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

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

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

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

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

Kompilera och exekvera Javakod

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

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Introduktion till Matlab Föreläsning 1. Ingenjörsvetenskap

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

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

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

TANA17 Matematiska beräkningar med Matlab

Beräkningsvetenskap föreläsning 2

4.3. Programmering i MATLAB

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

FÖRSÄTTSBLAD TILL TENTAMEN. ELLER (fyll bara i om du saknar tentamenskod): Datum: 16 januari Bordsnummer:

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Pascal... Pascal. Pascal... Pascal...

Matriser och Inbyggda funktioner i Matlab

Program & programmering

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

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

Programmering i Matlab

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Matriser och vektorer i Matlab

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

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

Instruktion för laboration 1

Transkript:

Programmering, del 2 Beräkningsvetenskap I Stora problem och m-filer n 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 n Större problem måste delas upp i delproblem, var och en med egen algoritm n Varje delproblem löses för sig oberoe av det större problemet n Man behöver på det sättet bara ha kontroll över ett delproblem i taget 1

Huvudprogram och underprogram n Delproblemen blir vanligen en egen Matlabfunktion, eller flera funktioner (delproblemen kan innehålla egna underprogram) n Större program blir uppdelade i fler delprogram (underprogram), dvs flera m-filer per problem (funktionsfiler och kommandofiler) n En av m-filerna (vanligen kommandofil) utgör själva huvudprogrammet detta styr problemlösningen och anropar funktionerna. Huvudprogram och underprogram % Prog5.m, Huvudprogram som anropar underprogram disp('testa tidigare programexempel (1-4)'); test=input('ange programexempel (1-4), avsluta med 0:'); while test~=0 if test==1 Prog1; elseif test==2 Prog2; elseif test==3 Prog3; elseif test==4 Prog4; else disp('alternativet ej giltigt!'); test=input('ange programexempel (1-4),... avsluta med 0:'); Uppgift: Ladda ner program Prog5.m och testkör. 2

Kommandofiler och funktioner n 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. Kommandofiler är ofta specifika för ett visst problem. n Funktioner kan liknas vid en svart låda. Man stoppar in indata (inparametrar) och får som resultat utdata (utparametrar). indata utdata n 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) Funktioner n 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 3

Funktioner n Funktioner är tänkta att kunna återanvändas i flera program för olika problem av liknande sort (jfr Matlabs inbyggda funktioner) n Att skriva funktioner tänk först på vad som ska in och vad som ska ut ur funktioner, dvs in- och utparametrar Ha inga onödiga utskrifter, vanligen bara varningsutskrifter användaren bestämmer om något ska skrivas ut eller ej 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 4

Funktioner exempel n 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 n 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 n 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 n Antalet in- och utparametrar kan vara godtyckligt många (beroe på vad man behöver till funktionen) n Filnamn måste överensstämma med funktionsnamn, dvs här cossin.m 5

Funktioner och parametrar n 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å intervallet % [x0 x1] i n punkter x = linspace(x0,x1,n); y = cos(x)+sin(x); n Funktionen anropas t ex genom: >> xstart=0; xslut=pi; n=100; >> [x1,y1] = cossin(xstart,xslut,n); Funktioner och parametrar >> [x1, y1] = cossin(xstart,xslut,n); function[x, y] = cossin(x0, x1, n) x = linspace(x0,x1,n); y = cos(x)+sin(x); Utanför funktionen i funktionen utanför funkt xstart à x0 xslut à x1 n à n x à x1 y à y1 6

Funktioner och parametrar Olika anrop till samma funktion >> [t, u] = cossin(0,2*pi,50); eller >> [a, b] = cossin(pi,3*pi,150) Medför att a och b skrivs ut (inget semikolon) eller >> a1 = 0; a2 = 2*pi; >> [a1,a2]=cossin(a1,a2,50); OBS! Variablerna a1 och a2 får nya värden efter anrop, skrivs över av utdata. Funktioner och parametrar Observera också att >> [t, u] = cossin(0,2*pi,50); Leder till att variablerna t och u bildas, se t ex workspace. Däremot bildas inte x och y - alla variabler som enbart skapas inne i funktionen är interna. Man säger att de interna variablerna är lokala. 7

Funktioner Uppgift: Skriv en funktion som löser 2:a gradsekvationer (pq-formeln). Funktionen ska kunna anropas: [x1,x2]=pqformel(p,q); [w1,w2]=pqformel(-3,2); etc. Utgå ifrån följande kod: % pq-formeln, löser 2:a gradsekvationen % x^2+ax+b=0 x1=-a/2-sign(a)*sqrt((a/2)^2-b); x2=x1/b; Okänt antal parametrar n 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, z] = cossin(x0, x1, n) % [x, y, z]=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); if (nargout==3), z=x.*y; 8

Okänt antal parametrar n Kan nu anropas med t ex >> [x, y] = cossin(0, 2*pi); då sätts n till 100 i funktionen n eller t ex >> [x, y] = cossin(0, 2*pi, 200); n eller t ex >> [x, y, u] = cossin(0, 2*pi, 200); n Ett sätt att ha s k defaultvärden i funktioner Funktioner som parametrar Funktioner kan också ta andra funktioner som inparametrar: function myplot(func,a,b,n) if (nargin==3) n=100; x=linspace(a,b,n); y=feval(func,x); plot(x,y, r- ); Anropas med @-tecken: >> myplot(@sin,0,2*pi); >> myplot(@myfun,0,1,10); där function y=myfun(x) y=x.^2+3*sin(x).*cos(x); Uppgift: Ladda ner myplot.m och myfun.m och testa anropen 9

Olika sorters fel Det finns tre typer av fel, s k buggar som kan inträffa i program n n n Syntaxfel Ett grammatiskt fel. Kan ej översätta Matlabkoden till "datorkod". Felmeddelanden från Matlab 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 runtime-fel. Logiska fel Programmeraren har tänkt fel, men programmet kör. Svårupptäckt. Vanliga syntaxfel i MATLAB n Skrivfel, t ex plott(x,y); n Utelämnade tecken t ex multiplikationstecknet, *: 3(x+5) eller if ~( (x > 0) & (y < pengar*17) eller if ( x = 1 ) n Felstavat variabelnamn skyldigmig = 50; if SkyldigMig > 100 n Oidentifierade variabler t ex glömt initiera sum före loop for i=1:5, sum=sum+i;, sum 10

Vanliga syntaxfel i MATLAB n Glömd punkt vid elementvisa operationer, ger??? Error using ==> ^ Matrix must be square. n Skrivit else if, istället för elseif n Slarv med kolon, komma, semikolon Exempel (finn fem fel) a=input( a= ); b=input( b= ); c=input( c= ); if (a=0) disp( Avbryt, a=0! ); else p=b/a; q=c/a; s=((p/2)^2-q)^1/2; while (p<0) x1=-p/2+s; x2=q/x1; else x1=-p./2-s; x2=q./x1; disp( svar: x1= num2str(x1) x2= num2str(x1)); Uppgift: Ladda ner Prog6.m och rätta felen. 11

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. Kommentera varje block 5. Använd vettiga variabelnamn och funktionsnamn 6. Dokumentera gärna variabler och förklara 7. Ha ett "dokumentationshuvud" i början av filen Kanske fel kan undvikas om koden uppfyller detta J Goda råd n Effektiv programmering: I största möjliga grad bör vektoroperationer och inbyggda funktioner 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) 12

Goda råd n 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, vektoroperation summa = [1 2*ones(1,n-2) 1]*f ; ( f => transponat f T ) % Metod 3, inbyggd funktion summa = f(1)+2*sum(f(2:n-1))+f(n); Metod 2 och 3 är snabbare än metod 1! Uppgift: Ladda ner Prog7.m och jämför metoderna Goda råd n 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. 13

Goda råd n Effektiv programmering [m,n] = size(a); for i = 1:m for j = 1:n A(i,j) = A(i,j)- är bättre än t ex for i = 1:500 for j = 1:400 A(i,j) = A(i,j)- Goda råd n Matlab är enkelt att programmera och felsöka n Enkelt att visualisera resultat n Innehåller mycket färdigdefinierade funktioner och numeriska lösare Men Matlab är långsamt n Matlab är interpreterande, dvs varje programrad måste översättas till maskininstruktioner vid programkörning n Använd Matlab för enstaka experiment eller för att snabbt testa ideer n För produktionskoder använd ett kompilerande språk, t.ex. C eller C++ (alt Fortran) 14

Numeriska beräkningar och simuleringar är ofta mycket CPU/minnes-krävande och utförs på parallelldatorer. Uppsala universitets (UPPMAX) 2784 core PC-cluster Dual-core mobile 1024 core GPU Quad-core laptop 2x6-core PC 12 cores Exempel sortering Sortera n stycken slumpmässiga tal. Algoritm: För varje tal beräkna hur många tal som är mindre => Placeringen av talet Lägg in talet enligt placeringsordningen i ny vektor 15 27 3 25 8 19 1 21 6 22 1 3 6 8 15 19 21 22 25 27 15

Matlab function outdata=enumsort(indata) % Enkel sorteringsalgoritm len=length(indata); outdata=zeros(len,1); for j=1:len rank=1; % rank räknar hur många element som är % mindre än element j for i=1:len if (indata(i)<indata(j)) rank=rank+1; % Placera in element j i sorteringsordning outdata(rank)=indata(j); C-kod int main(int argc, char *argv[]) { int len,i,j,rank,nthreads; double *indata, *outdata, time; } printf("give number of elements: "); scanf("%d",&len); indata=(double *)malloc(len*sizeof(double)); outdata=(double *)malloc(len*sizeof(double)); // Generate random numbers for (i=0;i<len;i++) indata[i]=((double)rand())/rand_max; // Sort data time=timer(); for (j=0;j<len;j++) { rank=0; for (i=0;i<len;i++) if (indata[i]<indata[j]) rank++; outdata[rank]=indata[j]; } time=timer()-time; printf("time: %f sec\n",time/1000000); 16

C-kod Kompilera koden, dvs översätt C-koden till maskininstruktioner för den specifika dator som programmet ska köras på. Koden optimeras för den aktuella datorarkitekturen. Kompileringen görs av ett datorprogram, kompilatorn gcc i det här fallet och utförs i terminalfönstret (där man ger kommandon direkt till operativsystemet). > gcc O3 o enum enumsort.c (Kompilera) >./enum (Exekvera) ~15ggr snabbare än Matlab! ~60ggr snabbare parallelliserad på 4 kärnor! Notera: Det finns effektivare sorteringsalgoritmer, t.ex. Quicksort. Algoritm Quicksort: 1. Välj ett element, kallas pivotelement 2. Dela upp data i två mängder, i större respektive mindre element 3. Sortera vardera delmängden med Quicksort (i ett rekursivt anrop, dvs upprepa 1-3 på vardera delmängden) Komplexitet: n. log(n), (jmf n 2 för enumsort) 17

Exempel: Quicksort >400ggr snabbare än enumsort, n=50.000 15 27 3 25 8 19 1 21 6 22 Pivot=15 3 8 1 6 15 27 25 19 21 22 Pivot=3 Pivot=22 1 3 8 6 19 21 22 27 25 Pivot=8 6 8 Pivot=19 19 21 Pivot=27 25 27 1 3 6 8 15 19 21 22 25 27 18