Kodeforståelsesoppgaver (total videotid: 32:52)
Oppgave 5.1.1: Vektoriserte funksjoner
Funksjonen under regner ut omkretsen av en sirkel. Er den vektorisert?
f.m
function y = f(x) y = 2 * pi * x; end
Videoforklaring (5:07)
Svar
Oppgave 5.1.2: Vektoriserte funksjoner
Funksjonen under regner ut arealet av en sirkel. Er den vektorisert? Hvordan kan den eventuelt vektoriseres?
g.m
function y = g(x) y = pi * x ^ 2; end
Videoforklaring (3:54)
Svar
Oppgave 5.1.3: Vektoriserte funksjoner
Funksjonen under regner ut verdien som tilsvarer et romersiffer. Er den vektorisert? Hvordan kan den eventuelt vektoriseres?
fra_romersiffer.m
function retur = fra_romersiffer(siffer) switch siffer case 'I', verdi = 1; case 'V', verdi = 5; case 'X', verdi = 10; case 'L', verdi = 50; case 'C', verdi = 100; case 'D', verdi = 500; case 'M', verdi = 1000; end retur = verdi; end
Videoforklaring (10:48)
Svar
Oppgave 5.1.4: Preallokering
Hva er ineffektivt med funksjonen som står i filen under? Hvordan kan den forbedres?
fib.m
function retur = fib(n) retur = [0, 1]; for i = 3:n retur(i) = retur(i-1) + retur(i-2); end retur = retur(1:n); end
Videoforklaring (8:21)
Svar
Oppgave 5.1.5: Preallokering
Er preallokering nødvendig i funksjonen under?
diff.m
function retur = diff_2(x) retur = x(2:end) - x(1:end-1); end
Videoforklaring (4:42)
Svar
Kodeoppgaver (total videotid: 1:39:13)
Oppgave 5.2.1: Samlet Fahrenheitoversikt
Du har tidligere laget et script som konverterer Celsius-verdier en bruker skriver inn fortløpende til Fahrenheit. For at utskriften fra scriptet skal bli mer oversiktlig, ønsker du å samle all utskriften i stedet for at den kommer fortløpende.
Endre scriptet slik at utskriften kommer først etter at brukeren har skrevet inn alle Celsius-verdiene. Konverteringene skal også skrives ut i rekkefølge etter stigende Celsius-verdi.
Utdelt kode
Videoforklaring (19:00)
Del 1 (9:47) | Del 2 (9:13) |
---|---|
Ooppgaveintroduksjon, gradvis vektorkonstruksjon, komma for å sette vektorer ved siden av hverandre, og preallokering. | Vektorisert kode for å unngå for-løkker, og semikolon for å stable vektorer i høyden. |
Løsningsforslag
Oppgave 5.2.2: Karakterer
Lag en funksjon som tar inn en vektor med poengsummer fra 0 til 100, og som returnerer en vektor med bokstavkarakterer som tilsvarer poengsummene i argumentet. Karaktergrensene er som oppgitt i tabellen under.
Poengsum | Karakter |
---|---|
89-100 | A |
77-88 | B |
65-76 | C |
53-64 | D |
41-52 | E |
0-40 | F |
Videoforklaring (10:25)
Løsningsforslag
Oppgave 5.2.3: Utvikling av kvadratrotestimat
I en tidligere oppgave lagde du en funksjon som estimerte hva kvadratroten av et tall var, ved å bruke iterasjoner av Newtons metode. Du har nå lyst til å analysere hvordan estimatene utvikler seg. I stedet for å skrive ut estimatene, har du lyst til å returnere dem i en vektor. Oppdater funksjonen til å fungere slik i stedet.
Utdelt kode
Videoforklaring (15:46)
Del 1 (4:00) | Del 2 (9:12) | Del 3 (2:34) |
---|---|---|
Introduksjon av problemet, og vanlig, enkel løsning. | Effektiv løsning. | Demonstrasjon av kjøretidsfordelen man kan få med denne teknikken. |
Løsningsforslag
Oppgave 5.2.4: Utregning av karaktersnitt
Studieavdelingen har lyst til å regne ut gjennomsnittskarakteren for studentene i forskjellige studieprogram. De planlegger å lage en matrise hvor karakterene for hver student er samlet i kolonner, og karakterene i et gitt fag er oppgitt langs radene. Det er allerede samlet inn testdata i scriptet
karakterdata.m
. Lag en funksjon som tar inn en matrise med karakterer og en kolonnevektor med antall studiepoeng for hvert fag, og som returnerer en vektor som inneholder snittkarakteren for hver student. Man kan regne ut vektet gjennomsnitt med følgende formel: Utdelt kode
Videoforklaring (20:39)
Del 1 (6:31) | Del 2 (6:34) | Del 3 (7:34) |
---|---|---|
Introduksjon og forklaring av problemet, og definisjon av funksjonens ytre. | Løsning med for-løkke og preallokering. | Vektorisert løsning. |
Løsningsforslag
Oppgave 5.2.5: Flyplasskø
I sikkerhetskontrollen på Værnes er det gjerne lite trykk på Fast-track-sporet, men mange med dårlig tid i den vanlige køen. Det er derfor ønskelig å lage et system som velger ut personene med dårligst tid fra den vanlige køen slik at man kan sluse de til Fast-track i stedet. Datasystemene til Værnes representerer personene i køen som tall i en matrise, hvor tallene representerer antall minutt til personens fly går. Eksempeldata er samlet i scriptet testkoe.m. Lag en funksjon som tar inn en slik matrise, og som returnerer en ny matrise med en kolonne mindre slik at personene med dårligst tid er fjernet. Tips: man kan finne den sorterte rekkefølgen til en vektor med Matlab-koden
[~, ordning] = sort(v)
.Figuren illustrerer en flyplasskø til venstre, og matriserepresentasjonen som brukes til høyre.
Utdelt kode
Videoforklaring (33:23)
Del 1 (5:10) | Del 2 (14:55) | Del 3 (13:18) |
---|---|---|
Introduksjon til problemet, og definisjon av funksjonens ytre. | Løsning med for-løkker og preallokering. | Løsning med vektorisert kode. |