Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Nødhjelp i Matlab-programmering

Liknende presentasjoner


Presentasjon om: "Nødhjelp i Matlab-programmering"— Utskrift av presentasjonen:

1 Nødhjelp i Matlab-programmering
Åsmund Eldhuset Siv.ing. datateknikk, NTNU Bekk Consulting AS

2 Hva er en datamaskin? En ekstremt rask, men forholdsvis enkel kalkulator ("computer" == "beregner") Følger instruksjoner om hva slags beregninger den skal gjøre Har et minne hvor den tar vare på informasjon (data) Støtter følgende instruksjoner: Aritmetikk (de fire regneartene) Sammenligning (lik, ulik, større enn, mindre enn) Logikk ("og", "eller", "ikke", "hvis") Hoppe til en instruksjon en annen plass Hente data fra minnet og legge data i minnet Har input- og output-enheter som kan hente inn og vise data fra/til omverdenen (skjerm, tastatur, mus, høyttaler, harddisk...)

3 Hva er et dataprogram? En sekvens av instruksjoner om hva datamaskinen skal gjøre Når man kjører et program, følger datamaskinen instruksjonene

4 Skalarverdier og operatorer

5 Skalarverdier og operatorer
Boolske operatorer

6 Output og input til/fra skjerm
fravær av semikolon gjør at resultatet av en linje blir skrevet ut bruk disp() til å skrive ut ting i stedet, og sett alltid semikolon input() leser data (vanligvis tall) som brukeren skriver inn med tastaturet inn i en variabel

7 Variabler En variabel inneholder én verdi av gangen (men verdien kan være en matrise) Tenk på det som en post-it-lapp med et navn og en verdi Tilordning gjøres med = , og det vil umiddelbart slette den gamle verdien Et variabelnavn på venstre side av = betyr "putt verdien på høyre side inn i denne variabelen"; alle andre steder betyr det "bruk verdien av denne variabelen"

8 who viser eksisterende variabler
clear sletter alle variabler

9 Semikolon og innrykk En kodeblokk er et stykke kode som hører innunder en annen del av koden Følgende setninger starter kodeblokker: function, if, else, else if, for, while. F.eks.: innholdet i if-blokken er den koden som blir utført Setningene som starter kodeblokker skal ikke ha semikolon; alle andre setninger bør ha det Men de er ikke så strenge på semikolonbruk på eksamen For leseligheten sin del bør man rykke inn (med tab-tasten) hver blokk - dvs. at hver linje etter function, if etc. skal rykkes inn, og end (og ingenting annet) skal rykke ut igjen

10 Uttrykk Tall og matriser er uttrykk
Regneoperatorer med andre uttrykk på hver side er også uttrykk Funksjonskall er også uttrykk Et uttrykk som gir en verdi av en bestemt type (skalar/matrise) kan settes overalt hvor en verdi av den typen trengs

11 Matriser En matrise er en todimensjonal tabell
Har et antall rader og et antall kolonner En matrise med én rad og flere kolonner, eller én kolonne og flere rader, kan tenkes på som en liste (En matrise med én rad og én kolonne kan tenkes på som ett enkelt tall) Cellene kan inneholde tall, funksjoner, egentlig hva som helst - men som oftest inneholder hver matrise kun én type ting, og vanligvis tall

12 Matriser Radene og kolonnene er nummerert, så hver celle har et rad- og et kolonnenummer Å hente ut verdien i en spesifikk celle i en matrise kalles å indeksere matrisen Row major-indeksering: radnummeret kommer først - A(3, 4) er rad 3, kolonne 4 1-basert indeksering: første rad/kolonne er nr. 1 (i mange andre språk begynner man nummereringen på 0)

13 Matriser Uttrekking av submatriser:

14 Matriser zeros(m) gir en mxm-matrise med bare nuller
zeros(m,n) gir en mxn-matrise med bare nuller eye(m) gir en mxm identitetsmatrise ("eye" skal høres ut som I, symbolet for identitetsmatrisen)

15 Matriser size(A) gir en 1x2-matrise med antall rader og antall kolonner i A size(A,1) gir ant. rader, size(A,2) gir ant. kolonner lister er egentlig kolonnevektorer, dvs. 1xn-matriser, så man må bruke size(X, 2) eller length(X)

16 Submatriser Et kolon velger ut en hel rad/kolonne
Det går an å ha matriser med høyere dimensjon enn 2, og å bruke flere kolon z = zeros(4, 7, 9); kan man tenke på som en tredimensjonal figur bestående av 4x7x9 små kuber, evt. som en z(:, :, 3) henter ut den tredje 4x7-"skiven" z(

17 Lister/vektorer En liste er egentlig en radvektor, altså en todimensjonal matrise med én rad, men vi kan late som om den bare har én dimensjon lst = [ ] lst(1), lst(2), lst(3), lst(4) er gyldige oppslag lst(1, 1), lst(1, 2), lst(1, 3), lst(1, 4) er det også length(lst) gir 4 size(lst) gir [1 4], size(lst, 1) gir 1, size(lst, 2) gir 4 Kan lage en kolonnevektor (mange rader og én kolonne) med [3; 9; 8; 4]

18 Ranges 1 : 4 gir [ ] 1 : 2 : 5 gir [1 3 5] 1 : 3 : 12 gir [ ] 5 : -1 : 2 gir [ ] 5 : -2 : 1 gir [5 3 1] 6 : -2 : 1 gir [6 4 2] 3.14 : 0.23 : 4 gir [ ]

19 Skript

20 Funksjoner Forskjellen på funksjoner og skript

21 Funksjoner Variabelnavn inni funksjoner er bare synlige i den funksjonen, og kan godt være forskjellige fra de "egentlige" navnene på dataene (((Evt.: data har egentlig ikke navn; variabler har navn, og variabler bare refererer til data))) Du kan endre verdien til et argument (men du bør ikke), men endringen vil bare gjelde inni funksjonen Merkelapp-metafor

22 Funksjoner Returverdi-variabel
En funksjonsdeklarasjon ser slik ut: function returvariabel = funksjonsnavn(parametre) funksjonskode end

23 Funksjoner Resultatet av en funksjon vil ikke automatisk bli husket, så hvis man kaller en funksjon med de samme parametrene inni en løkke, vil den regnes ut på nytt hver gang return vs. end

24 Funksjonspekere Det er mulig å sende en funksjon som parameter til en annen funksjon Evt. kan det tolkes som at man sender navnet til en funksjon som parameter, for å fortelle den andre funksjonen hvilken funksjon den skal benytte Kan brukes til å gjøre funksjoner mer fleksible / anvendbare Eksempel: map og reduce

25 Tilfeldige tall

26 Betingelser / if-blokker
Ikke "if-løkker", som mange sier...

27 Betingelser / if-blokker
if- og else if-betingelsene sjekkes etter tur ovenfra og ned Kodeblokken som tilhører den første betingelsen som "slår inn" vil utføres - alle de andre blokkene hoppes over Hvis ingen av betingelsene "slår inn", utføres else-blokken (som ikke skal ha noen betingelse) - men bare hvis den er der; hvis ikke skjer ingenting Så: Hvis det er en else, vil eksakt én av blokkene utføres Hvis ikke, vil inntil én av blokkene utføres

28 While-løkker Gjentar et stykke kode så lenge en bestemt betingelse er tilfredsstilt Dette kan vi f.eks. bruke til å øke verdien til en variabel trinn for trinn, og typisk gjøre noe med variabelverdien hver gang i = 1; while i < disp(i); i = i + 1; end

29 While-løkker Når kodeutføringen når "while", sjekkes det om utsagnet som står der er sant - i så fall går man inn i løkken og utfører kodeblokken; ellers hopper man ut forbi "end" Når man når "end", hopper man opp igjen, og utsagnet sjekkes på ny (med evt. oppdaterte variabelverdier)

30 While-løkker Det som skjer under utførelsen av den viste løkken kan man se for seg slik: i = 1; "er i < 4?" -> ja -> gå inn i blokken disp(i); % printer 1 i = i + 1; % i blir 2 end -> gå opp igjen "er i < 4?" -> ja -> gå inn i blokken disp(i); % printer 2 i = i + 1; % i blir 3 end -> gå opp igjen "er i < 4?" -> ja -> gå inn i blokken i = i + 1; % i blir 4 end -> gå opp igjen "er i < 5?" -> nei -> gå ut til etter end

31 For-løkker Gjentar et stykke kode en gang for hvert element i en vektor, og lar oss se på "det gjeldende vektorelementet" inni kodestykket Hvis du sliter med å se hvordan de skal bygges opp, prøv å skrive alle linjene fullt ut og prøv å se mønstre break, continue vs. end

32 For-løkker vs. while-løkker
Enhver for-løkke kan skrives som en while-løkke

33 Tilfeldige tall (lotto-oppgaven)

34 Lesing og skriving fra/til fil
Skiller mellom tekstlig (formatert) I/O og binær I/O Tekstlig: leselig for mennesker. Tall er representert som bytes med tegnkoder for sifrene i tallet Kaster bort en del plass Binært: uleselig for mennesker. Tall er representert på samme måte som i minnet (bits som representerer et binært desimaltall)

35 Lesing og skriving fra/til fil
Innholdet i en fil regnes som én lang liste, men matlab klarer å lese det inn i en matrise likevel hvis du sier hvor høy matrisen er La oss si at du har lyst til å hente kun én verdi fra en matrise som er lagret i en fil Du vil hente verdien på rad r, kolonne c Matrisen har m rader (dette må du vite på forhånd; det står ikke i filen) Du må altså hoppe over r-1 kolonner med m celler i hver

36 Tankegang Må formulere løsningen på problemet vårt på datamaskinens vilkår Prøv å sett dere i maskinens plass... Maskinen kan bare gjøre én operasjon av gangen, på opptil to verdier: Addisjon, subtraksjon, multiplikasjon, divisjon Øke/senke verdien av et tall Sammenligne to tall og se hvilket som er størst Hoppe til et annet sted i koden basert på resultatet av en sammenligning (if/else, for, while) ...men den kan huske på mange tall (minnet), inkludert en lang liste med instruksjoner (programkoden vår)!

37 Manuell matriseaddisjon
Hvorfor lage dette når det er innebygd i Matlab? God programmeringstrening ...men finn aldri opp hjulet på nytt i en jobbsituasjon Regler for matriseaddisjon: To matriser A og B kan adderes hvis de er like store Resultatmatrisen C får samme størrelse Hvert element i C er summen av de tilsvarende elementene i A og B (gjør det for hånd først)

38 Manuell matriseaddisjon
Hva må funksjonen gjøre? Ta inn to matriser A og B som parametre Kontrollere at A og B er like store (og avslutte hvis ikke) Opprette resultatmatrisen C som nullmatrise "Hvert element i C er summen av de tilsvarende elementene i A og B" - ikke presist nok! Hvordan angir man et element i en matrise? Element C(i, j) skal settes til A(i, j) + B(i, j) Dette skal gjøres for alle elementene -> vi trenger to løkker, én for hver variabel!

39 Manuell matrisemultiplikasjon
Regler for matrisemultiplikasjon : To matriser A og B kan multipliseres hvis A har like mange kolonner som B har rader Resultatmatrisen C får like mange rader som A og kolonner som B Hvert element i C er prikkproduktet av tilsvarende rad fra A og tilsvarende kolonne fra B ...dvs.: multipliser første element fra tilsvarende rad i A med første element fra tilsvarende kolonne i B osv., og summer alle produktene Illustrasjon

40 Løsing av ligningssett
A x = b A er koeffisientene, x er de ukjente, b er konstantene Ganske enkelt hvis nedre venstre halvpart av A bare inneholder nuller: Matlab løser dette for oss med x = A \ b

41 Triksing med løkker (Sjakkbrett-trekk, fortran)

42 Sortering

43 Boblesortering I hvert "pass" blir det største tallet på veien trukket helt opp mot høyre Det nest største osv. vet vi ingenting om, for det blir "satt igjen" når det møter det største

44 Kamsortering

45 Flettesortering (merge sort)
Bruker rekursjon, dvs. at en funksjon kaller seg selv TODO: Er dette pensum? Quicksort er lettere å implementere. Vis evt. rekursiv selection sort først

46 Funksjonspekere f = @(x) sin(x); Hva trenger vi dette til?
f blir en peker til, eller et alias for, sin f(2) vil da oppføre seg som om det hadde stått sin(2) @(x) betyr "jeg ønsker å lage en peker til en funksjon som tar ett parameter, som vi kaller for x" Hva trenger vi dette til? Sende funksjoner som parametre til andre funksjoner (hjelp...) F.eks. en deriverings- eller integreringsfunksjon Eller en sorteringsfunksjon (hvordan skal elementene sammenlignes?)

47 Filer

48 Databaser / SQL?


Laste ned ppt "Nødhjelp i Matlab-programmering"

Liknende presentasjoner


Annonser fra Google