1 ITGK - H2010, Matlab Repetisjon
2 Variabler og tabeller Variabler brukes til å ta vare på/lagre resultater Datamaskinen setter av plass i minne for hver variabel En flyttallsvariabel tar 8 bytes i minne (default representasjon) I Matlab blir alle variabler representert som matriser Tekststrenger blir i Matlab representert som en matrise av enkelt karakterer En variabel som lagrer bare en verdi er en 1x1 matrise i Matlab Vi bruker whos for å finne størrelse og type på variabler Vi kan bruke exist for å sjekke om en variabel er ledig For å slette en variabel brukes clear <variabel> Husk at bare clear sletter alle variabler
3 Tilordning av variabler Tilordning av enkelt variabel: x = sin(pi/2)+12 + y; % Resultat blir lagret i variabelen x Opprettelse av lister og tabeller: A = [1:2:10]; % A blir [1 3 5 7 9]. B = [1 2 3 ; 4 5 6]; % Oppretter 2x3 tabell i B C = [1:0.5:3 ; 2:1:6]; % Oppretter 2x5 tabell i C, %Obs! Antall kolonner må være like. D(1:10,1:10) = 10; % Oppretter 10x10 tabell med verd.10 E = [1 2 3; 4 5 6; 7 8 9]; % Oppretter 3x3 tabell i E
4 Om tabeller Tabeller består av: indeks: angir plassnummer i tabellen element: innholdet i form av en verdi for en gitt indeks tabellengde: maks antall elementer i tabellen
5 Manipulere tabeller Vi bruker size() og length() for å finne lengde av tabeller og lister Man legger inn elementer eller endrer verdier på elementer i en tabell ved å bruke indeksen: A(3) = 7; % Tilordner element 3 i lista A verdien 7 E(2,2) = 5; % Gir elementet med indeks 2,2 verdien 5 disp(e(3,3)); % Skriver ut verdien til elementet med indeks 3,3 disp(e(2,:)); disp(e(:,1)); % Skriver ut andre rad i tabellen E % Skriver ut første kolonne i tabellen E disp(e(1,2:3)); % Skriver ut elementene fra 2 og 3 kollonne i rad 1
6 Tilordning av variabler og innebygde funksjoner Funksjonen zeros lager en tabell av 0er: A = zeros(1,10); % Lager en 1x10 matrise av 0er B = zeros(5,5); % Lager en 5x5 matrise av 0er. Kan bruke zeros(5) Funksjonen rand gir et tilfeldig tall mellom 0 og 1: x = rand()*50; % Et tilfeldig flyttall mellom 0 og 50 y = rand(2,3)*10; % 2x3 tabell av tilfeldige flyttall mellom 0 og 10 Funksjonene floor og ceil runder av nedover og oppover: z = ceil(rand(10,1)*20); %10x1 tabell med heltall mellom 1 og 20 v = floor(rand()*5); % Heltall mellom 0 og 4 Funksjonen round gir vanlig avrunding til nærmeste heltall
7 Oppgaver D=[1:4; 2:5; 3:6; 4:7] Skriv kode for å sette element 15 til tallet 9 Skriv kode for å skrive ut elementene 13-16 til skjerm Skrive kode for å bytte elementene 5-7 til verdien 1 Skriv kode for å skrive ut elementene 3,7, 10 og 11 Skrive kode for å sette elementene 4, 8, 12, og 16 til 4, 3, 2, 1 Skrive kode for å skrive ut elementene 1-3 og 5-7 til skjerm
8 2D plotting oversikt plot(x,y,<farge>); plotter på en prikk på punktet x,y med farge r, b, etc. plot funksjonen brukes vanligvis på to lister av tall bar(h,<farge>); lager et søylediagram med ut ifra verdier i H med farge r, b, etc. bar funksjonen brukes vanligvis på lister av verdier grid on; % Gir rutenett hold on; % Kan plotte flere plot oppå hverandre title( tittel ); % Gir overskrift på plottet xlabel( tekst ); % Tekst på x-aksen ylabel( tekst ); % Tekst på y-aksen
9 Input fra tastatur Tall fra tastatur til Matlab-variabelen tall: tall = input( ledetekst ) Viktig ved innlesing: ledetekst er vanlig tekst som skrives ut til skjerm det du skriver inn tolkes som et Matlab-uttrykk. Dvs. hvis brukeren skriver inn tekst vil man få feilmelding. Ved innlesning av tekst kan man bruke: tekst = input( ledetekst, s )
10 Disp Standardfunksjonen for å skrive ut verdier til skjerm i Matlab heter disp Denne er veldig begrenset i forhold til det som er vanlig i andre programmeringsspråk fordi den bare kan gjøre to ting skrive ut en liste av tall skrive ut en liste av tekst Dette er slitsomt fordi man oftest vil gjøre begge deler, for eks. skrive ut noen tall og en forklaring på hva disse tallene er... Skal vi bruke disp må vi oversette til det ene eller det andre. Derfor blir ofte disp erstattet med printf (Matlab: fprintf(1,...)) når man har lært seg det
11 Output til skjerm - disp Vis innholdet av en variabel, tabell, tekststreng på skjerm ved å bruke: disp(variabel) disp(tabell_variabel) disp( Skriver ut tekst ) % viser variabel på skjerm % viser tabell på skjerm % viser tekst på skjerm Merk at kommandoen disp etterfølges av et linjeskift Flere variabler kan skrives ut etter hverandre: disp(a), disp(b), disp(c) % Får linjeskift etter hver disp
12 Alternativ: fprintf() Funksjonen disp er tungvint for å blande utskrift av tekst og tall Matlab har fprintf og fscanf som kan brukes til formatert utskrift uten problemene disp har Den må ha filnummer som første argument Skriving til skjerm kan gjøres ved å droppe filnummeret, eller med 1 som filnummer: fprintf( Tekst som skal skrives ut \n ); fprintf(1, Tekst som skal skrives ut \n ); Funksjonen fprintf tar et argument som kan være en blanding av tekst som skal skrives ut og spesifikasjon av hvordan variable skal skrives ut
13 Formatert utskrift Det er best å se på et konkret eksempel: >> x=10; y=1; >> fprintf( Verdien til x er %d og y er %d\n', x, y); Verdien til x er: 10 og y er 1 >> fprintf( Pi med 10 desimaler: %.10f\n, pi); Pi med 10 desimaler: 3.1415926536 Typebokstaver: d x f e c s heltall heksadesimalt tall desimaltall uten e (fast form) desimaltall med e+ eller e- (vitenskapelig notasjon) en enkel bokstav en tekststreng Merk at fscanf ikke kan lese fra tastatur, så den er ikke så nyttig! Men kan være ok for å lese inn formatert tekst fra fil
14 Konvertering mellom tall og tekststrenger Bruk følgende for å gjøre om et tall til en tekststreng: tekst_variabel=num2str(tall_variabel) Brukes typisk ved utskrift av variabler med disp: disp(['verdien til x er ' num2str(x)]); Bruk følgende for å gjøre om en tekststreng til et tall: tall_variabel = str2double(tekst_variabel) For å sette sammen flere tekststrenger bruk: tekststrenger = strcat(s1,s2, ) tekst = strcat( Kåre kjører, for fort, huff )
15 Skriving og lesing til/fra fil av enkelt variabler/tabeller For å skrive en variabel A til tekstfil, bruk følgende: save( -ascii, minfil.txt, A ) For å lese fra tekstfil til en variabel B, bruk følgende: B= load( -ascii, minfil.txt ) Merk at save skal ha variabelen som en tekststreng (dvs. variabelnavnet innpakket i fnutter) Kan også lese og skrive binærfil med save og load