- robert@math.aau.dk http://www.math.aau.dk/ robert/teaching/2010/matlab 9. august 2010 1/39
Disposition 1. Lidt om. 2. Basiskursus. 3. Opgaver. 4. Mere til basiskursus. 5. Opgaver. 2/39
MATLAB = MATrix LABoratory Lavet til lineær algebra Godt til lineær algebra! Mange specialfunktioner Ingeniørernes afgud Kræver lidt tilvænning 3/39
Ved brug af : Der er gode muligheder for hjælp Gode hjælpefunktioner i med eksempler. På nettet. Hjælp fra andre -brugere: http://www.mathworks.com/matlabcentral/newsreader Blogs om : http://blogs.mathworks.com Min erfaring er Ved du hvilken kommando, der skal bruges: Brug s hjælp. Ved du hvad vil uden at kende en kommando: Brug Google. Et råd: Brug de indbyggede funktioner! 4/39
GUI 1. Indtastningsvindue 2. Historie 3. Variable 4. Nærsyn af variabel 5. Nuværende mappe 5/39
GUI 1. Indtastningsvindue 2. Historie 3. Variable 4. Nærsyn af variabel 5. Nuværende mappe 6/39
Indtastningsvindue Eneste del i terminal Ens i GUI og terminal 7/39
Indtastning i GUI 8/39
Indtastning i i terminal 9/39
Matricer Eksempler: Matematik a = [ 1 2 3 4 ] a = [1 2 3 4] 1 a = 2 3 a = [1; 2; 3; 4] [ 4 ] 1 2 3 4 a = a = [1 2 3 4 ; 5 6 7 8] 5 6 7 8 Generelt: [ og ]: Start og slut matrix. Mellemrum: Næste element indenfor rækken. Semikolon: Ny række. 10/39
Mindre tastearbejde... Smartere måde end sidste slide: Matematik sk a = [ 1 2 3 4 ] a = [1 2 3 4] a = 1:4 1 a = 2 3 a = [1; 2; 3; 4] a = (1:4) [ 4 ] 1 2 3 4 a = a = [1 2 3 4 ; 5 6 7 8] a = [1:4 ; 5:8] 5 6 7 8 Bemærk: Transponering med Generelt: start:skridt:slut Specielt: start:slut = start:1:slut 11/39
Minimér tastearbejdet Brug s funktioner: Matematik [ ] sk 0 0 0 a = a = zeros(2,3) [ 0 0 0 ] 1 1 1 a = a = ones(2,3) [ 1 1 ] 1 1 0 a = a = eye(2) [ 0 1 ] 1 2 3 4 a = a = reshape(1:8, 2, 4) 5 6 7 8 Hjælpefunktionen til zeros, ones, eye henviser til lignende kommandoer. 12/39
Delmatricer En matrix: a = [ 1 2 3 ] 4 5 6 7 8 Elementer og delmatricer: Output b = a(2,3) b = 7 [ ] 1 2 b = a(1:2, 1:2) b = 5 6 b = a(1,:) b = [ 1 2 3 4 ] [ ] 3 b = a(:,3) b = 7 b = a(1, 2:2:end) b = [ 2 4 ] b = a(:) b = [ 1 2 3 4 5 6 7 8 ] Kolon betyder hele rækken, hele søjlen eller hele matricen som søjlevektor. 13/39
Matrix-algebra Elementære regneoperationer virker som forventet: A+,, B : Sum, differens, produkt af A og B Aˆn : A n Elementvise operationer:.# med # =, /, ^ [ ] [ ] [ ] a1,1 a 1,2 b1,1 b. 1,2 a1,1 b = 1,1 a 1,2 b 1,2 a 2,1 a 2,2 b 2,1 b 2,2 a 2,1 b 2,1 a 2,2 b 2,2 Funktioner med definitionsmængde C anvendes elementvis: [ ] [ ] a1,1 a sin( 1,2 sin(a1,1 ) sin(a ) = 1,2 ) a 2,1 a 2,2 sin(a 2,1 ) sin(a 2,2 ) 14/39
s funktioner Eksempel 1: Identitetsmatrix 15/39
s funktioner Eksempel 2: RREF 15/39
s funktioner Eksempel 3: Karakteristisk polynomium 15/39
Flere input/output Ved brug af s funktioner: Ved mere end 1 output skal [] benyttes: [R, jb] = rref(a) Er vi ikke interesseret i de(t) første argument(er): [~, jb] = rref(a) Specielt til R-folk - man kan ikke springe foregående input over: [output1, output2] = noget(input1, input2, input3) Ved specifikation af input3 skal input1 og input2 specificeres. 16/39
GUI 1. Indtastningsvindue 2. Historie 3. Variable 4. Nærsyn af variabel 5. Nuværende mappe 17/39
Indtastningshistorie Indeholder de kommandoer, vi har eksekveret. Kan tilgås med eller ved at klikke i vinduet. En skrevet (men ikke eksekveret) kommando gemmes ikke. 18/39
GUI 1. Indtastningsvindue 2. Historie 3. Variable 4. Nærsyn af variabel 5. Nuværende mappe 19/39
Variable Viser de variable, vi har gemt. ans er det sidste output, der ikke har fået et navn: ones(2) er ans = ones(2) 20/39
Variable Alternativ til Workspace-vinduet er kommandoen whos: >> whos Name Size Bytes Class Attributes a 4x4 128 double ans 2x2 32 double b 3x3 72 double c 3x1 24 double 21/39
GUI 1. Indtastningsvindue 2. Historie 3. Variable 4. Nærsyn af variabel 5. Nuværende mappe 22/39
Nærsyn af variable Startes ved dobbeltklik på en variabel. Variable kan inspiceres nøjere og redigeres. Bør ikke anvendes til større redigeringer. 23/39
Opgaveregning 24/39
Programmering Hvorfor lære at programmere? s funktioner kan ikke alt... Vi kan lave programmer.... Spence, Insel og Friedberg har stillet programmer til rådighed: http://math.illinoisstate.edu/matrix/downloads.html 25/39
Programmering Brug en editor til at skrive programmet s editor er god: Syntax highlighting, automatisk indryk (ligesom emacs, vim...) Holder styr på om man laver fejl. Kommer med forslag til forbedring af koden. 26/39
Programmering Brug en editor til at skrive programmet s editor er god: Syntax highlighting, automatisk indryk (ligesom emacs, vim...) Holder styr på om man laver fejl. Kommer med forslag til forbedring af koden. 26/39
Programmering Brug en editor til at skrive programmet s editor er god: Syntax highlighting, automatisk indryk (ligesom emacs, vim...) Holder styr på om man laver fejl. Kommer med forslag til forbedring af koden. 26/39
Programmering Brug en editor til at skrive programmet s editor er god: Syntax highlighting, automatisk indryk (ligesom emacs, vim...) Holder styr på om man laver fejl. Kommer med forslag til forbedring af koden. 26/39
Programmering Brug en editor til at skrive programmet s editor er god: Syntax highlighting, automatisk indryk (ligesom emacs, vim...) Holder styr på om man laver fejl. Kommer med forslag til forbedring af koden. 26/39
Programmering Jeg kender tre slags: Samling af kommandoer i fil Funktion i fil Anonyme funktioner Overlades til læseren! Søg på function_handle i s hjælp. 27/39
Ved brug af filer -filer kaldes scripts. Skal gemmes som filnavn.m skal vide hvor filerne er. 28/39
GUI 1. Indtastningsvindue 2. Historie 3. Variable 4. Nærsyn af variabel 5. Nuværende mappe 29/39
Nuværende mappe Ses øverst i Current Folder. I undervinduet Current Folder. Med kommandoen pwd: >> pwd ans = /Users/CRJ/Desktop Skift nuværende mappe: Ved at skrive i Current Folder øverst. Ved at klikke i undervinduet Current Folder. Med kommandoen cd 30/39
Placering af scripts Scripts skal placeres, hvor leder: I den nuværende mappe I en mappe, der er inkluderet i PATH PATH kan ses/ændres: Menuen File -> Set Path... Med kommandoerne path/addpath 31/39
Samling af kommandoer i fil Skriv kommandoer i fil i stedet for i indtastningsvindue. Eksekver med Run-knappen/F5 i editor kommandoen run filnavn (uden.m!) 32/39
Samling af kommandoer i fil Skriv kommandoer i fil i stedet for i indtastningsvindue. Eksekver med Run-knappen/F5 i editor kommandoen run filnavn (uden.m!) 32/39
Samling af kommandoer i fil Skriv kommandoer i fil i stedet for i indtastningsvindue. Eksekver med Run-knappen/F5 i editor kommandoen run filnavn (uden.m!) 32/39
Samling af kommandoer i fil Skriv kommandoer i fil i stedet for i indtastningsvindue. Eksekver med Run-knappen/F5 i editor kommandoen run filnavn (uden.m!) 32/39
Samling af kommandoer i fil Skriv kommandoer i fil i stedet for i indtastningsvindue. Eksekver med Run-knappen/F5 i editor kommandoen run filnavn (uden.m!) 32/39
Samling af kommandoer i fil Eksekver markeret del af koden I Ubuntu: F9 På Mac: Shift-F7 På Window$: 1. Højreklik på markeret kode 2. Se hvad der står ud for Evaluate Selection 33/39
Funktioner i fil function [out1, out2,...] = navn(in1, in2,...) <indhold af funktion> Skal gemmes som navn.m out1, out2,... skal tilskrives i <indhold af funktion> 34/39
Eksempel på funktion i fil Gemmes som hej.m : function resultat = hej(x,y) % Denne funktion bruges som eksempel resultat = x.*y + 2*x + 4; end Output: >> r = hej(2*ones(1,3), 1:3) r = >> 10 12 14 35/39
Eksempel fra bogens hjemmeside function [L, U] = elu(a) % [L, U] = elu(a) gives the LU decomposition of the matrix A U = A; b = size(a); m = b(1); n = b(2); L = eye(m); stop = 1; if m > 1 if m > n p = n; else p = m-1; end for j = 1:p if U(j,j) == 0 36/39
Kommentering Kommentering er godt! Kommentarer lige under/over function [out1, out2,...] = navn(in1, in2,...) bliver vist med help navn Eksempel: function resultat = hej(x,y) % Denne funktion bruges som eksempel resultat = x.*y + 2*x + 4; end I indtastningsvinduet: >> help hej Denne funktion bruges som eksempel 37/39
Opgaveregning 38/39
Optimering af kode Gør dine -programmer bedre/hurtigere: Lær at tænke! Hvor hurtig er en kommando? tic, kommando, toc: >> tic, A = randi(1000, 1000); toc Elapsed time is 0.071573 seconds. Hvilke dele af en kode er tidsrøvere? Profiler giver svaret! Se kommandoen kodeprofile. GUI: 39/39