160 likes | 318 Views
ITGK - H2010, Matlab. Repetisjon. 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)
E N D
ITGK - H2010, Matlab Repetisjon
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 existfor å sjekke om en variabel er ledig • For å slette en variabel brukes clear <variabel> – Husk at bare clear sletter alle variabler
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
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
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,:)); % Skriver ut andre rad i tabellen E disp(E(:,1)); % Skriver ut første kolonne i tabellen E disp(E(1,2:3)); % Skriver ut elementene fra 2 og 3 kollonne i rad 1
Tilordning av variabler oginnebygde 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
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
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
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’)
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
Output til skjerm - disp • Vis innholdet av en variabel, tabell, tekststreng på skjerm ved å bruke: disp(variabel) % viser variabel på skjerm disp(tabell_variabel) % viser tabell på skjerm disp(’Skriver ut tekst’) % 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
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 skalskrives ut
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 heltall x heksadesimalt tall f desimaltall uten e (fast form) e desimaltall med e+ eller e- (vitenskapelig notasjon) c en enkel bokstav s 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
Oppgave • Lag tre variabler, x= 4, y=4.156, t=‘Hei’ • Skriv ut verdien til alle tre med fprintf slik: • X har verdi 4, y har verdi 4.156 og t har verdi Hei Husk: >> fprintf(‘Pi med 10 desimaler: %.10f\n’, pi); Pi med 10 desimaler: 3.1415926536 Typebokstaver: d heltall x heksadesimalt tall f desimaltall uten e (fast form) e desimaltall med e+ eller e- (vitenskapelig notasjon) c en enkel bokstav s en tekststreng
Konvertering mellom tall ogtekststrenger • 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’)
Skriving og lesing til/fra fil avenkelt 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)