F8: Resterna. Substitutionschiffer (Lab 3) Permutationer Rekursion Formelbehandling Simulering Iteration, frekvens-dubbling och kaos Radplanering

Relevanta dokument
F8: Resterna. Substitutionschiffer. Permutationer. ASCII och char. Substitutionschiffer (Lab 3) Permutationer Rekursion

Matlab-repetition. p 1 (25) Staffan Romberger, CSC, KTH,

Komplexa tal. F4 (5): Datastrukturer (kap. 6 7)

Datorövning 1 Fördelningar

F4: Datastrukturer (kap. 6 7) Komplexa tal Ö3: 5.2, 5.7, 5.14, 5.20

Beräkningsverktyg HT07

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

Scratch Junior. makeandshape.com. by MIT. Gränssnitt Scratch Junior

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. save

Datorövning 1: Fördelningar

Datorövning 1: Fördelningar

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

Matriser och linjära ekvationssystem

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

LULEÅ TEKNISKA UNIVERSITET

MR-laboration: design av pulssekvenser

TDDC74 Lab 02 Listor, sammansatta strukturer

Programmeringsuppgift Game of Life

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

Lösningsförslag till övningsuppgifter, del II

Dugga Datastrukturer (DAT036)

Introduktion till programmering SMD180. Föreläsning 9: Tupler

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

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

PROGRAMMERING-Java Omtentamina

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

TMV225 Inledande matematik M. Veckoprogram för läsvecka 4

MMA132: Laboration 2 Matriser i MATLAB

Fredag 10 juni 2016 kl 8 12

Agenda. Objektorienterad programmering Föreläsning 13

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Tentamen: Programutveckling ht 2015

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Tentamen i Introduktion till programmering

LÖSNINGSFÖRSLAG TILL TENTAMEN 2 SF1664

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

Laboration: Grunderna i MATLAB

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

Magnus Nielsen, IDA, Linköpings universitet

Transformationer i R 2 och R 3

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Sökning och sortering

Föreläsning 5. Rekursion

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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

Datorövning 1 Introduktion till Matlab Fördelningar

4 Diskret stokastisk variabel

TENTAMEN I GRUNDKURS I NUMERISKA METODER - DEL 2

Laboration 6. Ordinära differentialekvationer och glesa system

3 Jämförelse mellan Polyas urna och en vanlig urna

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Matematisk statistik 9 hp Föreläsning 3: Transformation och simulering

1 Förberedelser. 2 Teoretisk härledning av värmeförlust LABORATION 4: VÄRMEKRAFTVERK MATEMATISK STATISTIK AK, MAS 101:A, VT-01

Extend för Dummies Teknologer

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

Föreläsning 3, Matematisk statistik Π + E

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Datorteknik TSIU02 Lab 2 Morsesändare v0.7

Fler uppgifter på andragradsfunktioner

Datastrukturer. föreläsning 3. Stacks 1

TDIU01 - Programmering i C++, grundkurs

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

Linjära system av differentialekvationer

17.1 Kontinuerliga fördelningar

Föreläsning 2 Datastrukturer (DAT037)

Matlabövning 1 Funktioner och grafer i Matlab

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3: Booleans, if, switch

Föreläsning 13. Rekursion

Arrayer. results

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Övning 0. Python för den som kan MATLAB. Lättare att läsa färdig kod än att skriva själv Det krävs övning för att automatiskt få detaljerna rätt:

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

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

samma sätt. Spara varje uppgift som separat Excelfil. För att starta Excel med Resampling-pluginet, välj Resampling Stats for Excel i Start-menyn.

Linjär algebra med tillämpningar, lab 1

MATLAB Laboration problem med lokala extremvärden

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

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

Problemlösning 2 Stokastisk simulering., Problemlösning 2 Stokastisk simulering 1/13

4 Numerisk integration och av differentialekvationer

SF1901: Sannolikhetslära och statistik. Mer om Approximationer

Support Manual HoistLocatel Electronic Locks

Dagens föreläsning Programmering i Lisp Fö 5

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Numeriska metoder, grundkurs II. Dagens program. Hur skriver man en funktion? Administrativt. Hur var det man gjorde?

DD1311 Programmeringsteknik för S1 Laborationer läsåret

Tentamen Datastrukturer (DAT036)

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

Programmering för språkteknologer II. OH-serie: Sökning och sortering. Algoritm

Föreläsning 6: Introduktion av listor

Laboration 2 M0039M, VT2016

Transkript:

F8: Resterna Substitutionschiffer (Lab 3) Permutationer Rekursion Formelbehandling Simulering Iteration, frekvens-dubbling och kaos Radplanering p 1 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Substitutionschiffer Caesar-rullning Ex. Alfabete: 1234; text: 2 3 1 1 2; Substitution: Ett stegs cykliskt skift 1->2 2->3 3->4 4->1 % subst-chiffer alfab = [1 2 3 4]; indx = [2 3 4 1]; % en permutation av 1..n txt = [2 3 1 1 2 4] txt2 = alfab(indx(txt)) % hur översätta tillbaka? p 2 (21) Staffan Romberger, CSC, KTH, 2011-09-22

iindx(indx)=1:4 %invers-permutationen: %iindx(indx)=indx(iindx)=1:4 txt3 = alfab(iindx(txt2)) p 3 (21) Staffan Romberger, CSC, KTH, 2011-09-22

ASCII och char Alla tecken : % alla ASCII tecken indx = 1:256; char(indx) pause txt = ' hej hej ö #Å' txt2 = char(indx(double(txt))) pause indx = rand_perm(256); % slump-permutation txt3 = char(indx(double(txt))) pause iindx(indx)=1:256; % invers-permutationen txt4 = char(iindx(double(txt3))) p 4 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Permutationer Hur generera en slumpmässig permutation av n objekt talen 1,2,,n 1. Dragning utan återläggning : Tag objekt slumpmässigt tills inga är kvar: rand_perm2 2. Kortblandning : Byt obj 1 mot slumpmässigt annat, sedan 2 mot annat, etc. Upprepa n gånger: rand_perm function indx = rand_perm2(n) % by selection w/o return tmp = 1:n; L = n; % number of items indx = tmp; for k = 1:n k1 = floor(l*rand)+1; % random selection indx(k)= tmp(k1); % save the item tmp(k1)= []; % remove it from list (*) L = L-1; % length decreases by 1 end p 5 (21) Staffan Romberger, CSC, KTH, 2011-09-22

function indx = rand_perm(n) % indx is a random permutation of 1...n % algorithm: do n times % swap two elements indx = 1:n; for k = 1:n k1 = floor(n*rand)+1; % swap indx(k1), indx(k) tmp = indx(k1); indx(k1)= indx(k); indx(k)= tmp; end Denna är mycket snabbare än rand_perm2. Det beror på den dynamiska minnesallokeringen som krävs vid borttagningen av element (rad (*)). Tidtagning och användning av profil-verktyget bekräftar denna hypotes. Det senare visar att 70% av tiden i rand_perm2 ägnas åt borttagningen! p 6 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Permutationer och rekursion Hur generera en lista över alla permutationer av talen 1..n? Det är ganska enkelt att göra en rekursiv algoritm. * Givet en lista över permutationer av n-1 objekt, så får man listan för n genom att ersätta var och en av dem med de n olika man får genom att sätta det nya objektet i position 1, 2,, n. * Om bara ett objekt finns har listan bara ett element. 1: 1 1,2: 2 1; 1 2 1,2,3: 3 2 1;2 3 1; 2 1 3;3 1 2; 1 3 2; 1 2 3 1,2,3,4: 4 3 2 1; 3 4 2 1; 3 2 4 1; 3 2 1 4; p 7 (21) Staffan Romberger, CSC, KTH, 2011-09-22

function A = recperm(v) % generate all permutations of elements in % array v by recursion %--------------------------------------------------- n = length(v); if n == 1 % just return V A = v; else B = recperm(v(1:n-1)); % permute all % but the last, col = v(n)*ones(size(b(:,1))); % make a column of % correct size A = [col,b]; % first block of % rows of A end for k = 1:n-1 end A = [A;... [B(:,1:k),col,B(:,k+1:end)]]; % n-1 next blocks p 8 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Rekursionen kräver att hela tillståndet för funktionen sparas för n, n-1,, tills man kommer till n = 1. Då först sänds något tillbaka och listorna växer. Men här är tillståndet litet: data växer först i else-delen ovan. p 9 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Formelbehandling Med Matlabs»Symbolic algebra toolbox» kan man göra formelbehandling. Matlab känner till deriverings- och integrationsregler och kan göra viss formelförenkling. n = 4; syms x; A = x.^((0:n)'*(0:n)) A = [1, 1, 1, 1, 1] [1, x, x^2, x^3, x^4] [1, x^2, x^4, x^6, x^8] [1, x^3, x^6, x^9, x^12] [1, x^4, x^8, x^12, x^16] p 10 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Formelbehandling forts. >>D = diff(log(a)) % obs... komponentvis ln D = [0, 0, 0, 0, 0] [0, 1/x, 2/x, 3/x, 4/x] [0, 2/x, 4/x, 6/x, 8/x] [0, 3/x, 6/x, 9/x, 12/x] [0, 4/x, 8/x, 12/x, 16/x] >>syms a b; expand((a^3+b^2)^3) ans = a^9+3*a^6*b^2+3*a^3*b^4+b^6 p 11 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Formelbehandling forts. I laboration 5 finns en differensapproximation till derivatan av en funktion i dess vänstra ändpunkt. Låt funktionsvärdena på gitter-punkterna vara u i = u(x i ), x i = ih, i = 0,1,,N-1, N där h=l/n. Om vi approximerar funktionen med en rät linje får vi u ʹ x ) = ( u u ) / h ( 0 1 0 Approximera istället med en parabel (x 0 = 0!) 2 u ( x) = A( x x0 ) + B( x x0) + C, uʹ ( x) = 2A( x x0) + och bestäm A, B, och C så att parabeln går genom B (x 0 +kh,u k ), k = 0,1,2: p 12 (21) Staffan Romberger, CSC, KTH, 2011-09-22

syms A B C u0 u1 u2 h d e e = solve('a*0+b*0+c=u0',... 'A*h^2+B*h+C=u1',... 'A*(2*h)^2+B*(2*h)+C=u2','A','B','C'); d = 2*A*0+B; >> e.b ans = 1/2*(-3*u0-u2+4*u1)/h Det stämmer med formeln i labb 5. Man kan göra motsvarande för funktionens högra ände. p 13 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Formelbehandling forts. Med syms deklarerar man vilka variabler som ska vara symboliska. S = solve('eqn1','eqn2',...,'eqnn',... 'var1','var2',...'varn') löser {vari},i=1:n ur ekvationssystemet {eqni } som S.vari. subs(f, {v1 v2 vn}, {e1, e2,, en}) ersätter i formeln f variablerna vi med uttrycken ei. simplify(f) förenklar formeln f. Se hjälpen för information om hur man kan styra förenklingen. p 14 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Simulering Pachinko Gör ett program som simulerar en Pachinko-maskin. Se t ex Wikipedia för detaljer om pachinko, som är mycket populärt i Japan. Figur: Vänster, förkrigs mekanisk pachinko-maskin, höger vår maskin. p 15 (21) Staffan Romberger, CSC, KTH, 2011-09-22

En kula faller ner genom en labyrint av spikar i ett regelbundet mönster så att vid varje spik väljer kulan med lika sannolikhet vänster eller höger. Längst ner samlas kulorna upp. Här har tre kulor ramlat igenom och en är på väg ner. Tips: Spikmattan är ett statiskt grafikobjekt som kan genereras med en slinga. Varje kula är ett eget grafikobjekt som genereras när den startar längst upp h = plot(.);. Sedan flyttas den genom set(h, xdata,x, ydata,y). En tabell bins samlar ihop ett histogram över kulornas slutlägen. Matlab kan spela ljud, men det räcker att pipa (beep) när en kula träffar en spik och göra en kort paus ( pause(0.1)) innan den flyttas till någon av de två möjliga spikarna i nästa rad. När kulan ramlat ner görs lite längre paus innan nästa kula startas. Utvidgning: Låt spelaren vinna om kulan träffar vissa speciella spikar; den försvinner då och maskinen betalar ut en vinst och spelar en låt. help sound! För den statistik-intresserade: Vad blir fördelningen för antalet kulor i lådorna? p 16 (21) Staffan Romberger, CSC, KTH, 2011-09-22

%Pachinko clear all N = 10; nballs = 50; ybot = -5; bins = zeros(1,2*n+1); % bins % number of rows of nails % number of balls to play % plot the grid of nails figure(1) clf axis([0 2*N+1 ybot N+1]) hold on for k = 0:N-1 plot(-k+n:2:k+n,n-k-0.3,'.k','markersize',5) % - every second in x! end % drop the balls for m = 1:nballs x = N;y = N; % starting position h =... plot(x,y,'ok','linewidth',2,'markersize',10); % new graphics object beep, pause(0.1) for y = N-1:-1:0 x = x+2*(rand > 0.5)-1; set(h,'xdata',x,'ydata',y) % move ball to here beep, pause(0.1) p 17 (21) Staffan Romberger, CSC, KTH, 2011-09-22

end end bins(x)=bins(x)+1; % collect ball in bin set(h,'xdata',x,'ydata',ybot+bins(x)*0.5) % and plot it pause(0.5) p 18 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Iteration, frekvensdubbling och... kaos Logistiska ekvationen (Verhulst/Perl) Eulers metod: yn+ 1 = yn + Δt ( yn yn ) y 2 n + n 1 = p ( yn yn ) :? 2 yʹ = y y : Om p liten, y n -> 1. Kontraktionssatsen? Men p stor? Prova: clear all figure(1),clf,hold on n = 400; for p = linspace(1,4,100) x = linspace(0,1,n); for k = 1:2*n x = K*x.*(1-x); end plot(p*ones(1,n),x,'.') end 2 p 19 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Det finns mer i Matlab Ni kan fördjupa det ni redan har sett. Ni kan lära känna Matlabs verktygslådor. Ni kan lära er objektorienterad programmering med Matlab. Kursen fortsätter med Programmeringslaborationer Numeriska metoder inkl. laborationer Projektet Tentan p 20 (21) Staffan Romberger, CSC, KTH, 2011-09-22

Hur går du vidare? Använd Matlab i nummedelen och i andra kurser. Läs kursen Tillämpad datalogi (tilda). p 21 (21) Staffan Romberger, CSC, KTH, 2011-09-22