Kodeforståelsesoppgaver (total videotid: 39:54)

Oppgave 1.1.1: Hvordan løse kodeforståelsesoppgaver

Hvilken verdi får x og y etter at vi kjører følgende script?
oppgave_1.m
x = 2;
y = x;
x = x + 3;

Videoforklaring (4:51)

Svar

x = 5

y = 2

Oppgave 1.1.2: Forskjellige typer utskrift til skjerm

Hva skrives ut når vi kjører følgende script?
oppgave_2.m
x = 2
disp(x + 2);
disp(x + 2)

Videoforklaring (4:42)

Svar

x =
     2
     4
     4

Oppgave 1.1.3: Tre typer uttrykk i Matlab

Hva skrives ut når vi kjører følgende script?
oppgave_3.m
x = 2;
2 + 2;
disp(ans + 1);
y = ans

Videoforklaring (8:27)

Svar

     5
y =
     4

Oppgave 1.1.4: Sammensatt oppgave om variabelbindinger og utskrift

Hva blir skrevet ut hvis vi kjører følgende script?
oppgave_4.m
radius = 3;
radius = radius + 2;
diameter = 2*radius
diameter+1;
disp(diameter + 2)
ans
ans + ans
ans

Videoforklaring (6:54)

Svar

diameter =
    10
    12
ans =
    11
ans =
    22
ans =
    22

Oppgave 1.1.5: Lokale variabler

Hva blir skrevet ut hvis vi kjører scriptet «oppgave_5.m»?
oppgave_5.m
x = 1;
y = 2;
z = 3;
f(z);
disp([x, y, z, ans]);
f.m
function y = f(x)
  z = x + x;
  y = z*z;
end

 

Videoforklaring (6:50)

Svar

     1     2     3    36

Oppgave 1.1.6: Retur fra funksjon og utskrift til skjerm

a) Hvilken verdi får variabelen z etter at vi kjører scriptet «oppgave_6.m»?

b) Hva blir skrevet ut til skjerm?

c) Hva er sammenhengen mellom utskriften til skjerm og retur av verdi fra g?

 

oppgave_6.m
y = 12;
z = g(y);
g.m
function y = g(x)
  y = x + x;
  z = x * x
  disp(z);
  fprintf('%d\n', z); 
end

 

Videoforklaring (8:10)

Svar

z =
    24
z =
   144
   144
144

Ingen sammenheng - begge deler oppstår ved kall av funksjonen g, men man kan få returverdi fra funksjonen fullstendig uten utskrift og vice versa.

Kodeoppgaver (total videotid: 1:03:21)

Oppgave 1.2.1: Bruk av Matlab til å regne ut et uttrykk

Fahrenheit er et alternativ til Celsius som mål på temperatur. Man kan konvertere fra Celsius til Fahrenheit vha følgende formel:

Hvor mange grader Fahrenheit tilsvarer 20 grader Celsius? Bruk Matlab til å regne ut svaret.

Videoforklaring (4:41)

Løsningsforslag

Svaret er 68. Matlab-uttrykket som regner det ut er:

9/5 * 20 + 32

Oppgave 1.2.2: Bruk av Matlab til å regne ut flere uttrykk

For å få en intuitiv forståelse av hva en temperatur oppgitt i Fahrenheit betyr, har du laget følgende oversikt over hva temperaturer i Celsius betyr.

Bruk Matlab til å hjelpe deg lage en tilsvarende oversikt i Fahrenheit. Formelen er:

Videoforklaring (5:53)

Løsningsforslag

fahrenheit.m
9/5*-20+32
9/5*0+32
9/5*18+32
9/5*37+32
9/5*100+32

Oppgave 1.2.3: Rydd opp med funksjoner

Fahrenheit-scriptet fra oppgave 1.2.2 fungerer, men det er rotete. Rydd opp med funksjoner. 

Utdelt kode

Script fra oppgave 1.2.2

fahrenheit.m
9/5*-20+32
9/5*0+32
9/5*18+32
9/5*37+32
9/5*100+32

 

Videoforklaring (22:20)

Del 1 (7:23)Del 2 (4:46)Del 3 (6:05)Del 4 (4:06)
Beskrivelse av oppgaven, og forklaring av hvilke problemer funksjoner fikser og hvordan.Generell fremgangsmåte for å løse kodeoppgaver som ber en skrive funksjoner.Løsning av oppgaven, med fokus på korrekt retur av verdi.Ekstradel, om hvordan gjentatte funksjonskall på en rekke verdier kan gjøres enklere med vektoriserte funksjoner.

 

Løsningsforslag

fahrenheit.m
cels2fahr(-20)
cels2fahr(0)
cels2fahr(18)
cels2fahr(37)
cels2fahr(100)
cels2fahr.m
function retur = cels2fahr(celsius)
    retur = 9/5*celsius + 32;
end

Oppgave 1.2.4: Finn best temperaturvarsel

Du har funnet ut at du vil lage ditt eget varsel for julitemperaturen i Trondheim. Du har to brilliante ideer til hvordan du kan forutsi neste sommers temperatur:
  • Bruk gjennomsnittet av temperaturen i juli 2015 som estimat for alle dager i juli 2017.
  • Bruk snittemperaturen for 1. juli 2015 som estimat for 1. juli 2017, osv.

For å avgjøre hvilken som er best, vil du sjekke hvor godt modellene passer temperaturdata for 2016. Du har hentet data fra yr.no og lagret de i scriptet vaerdata.m.

Et vanlig mål på modellnøyaktighet er roten av snittet av kvadrert feil. Hvis er estimatet og  er faktisk temperatur i dag nr., er formelen:.

Hvilken metode later til å skulle fungere best?

Utdelt kode

vaerdata.m
juli_2015 = [ 13.0, 19.7, 17.7, 13.0, 16.3, 15.9, 10.6, 9.9, 9.0, 8.8, 12.8, 17.0, 15.2, 12.8, 11.9, 10.0, 11.5, 12.0, 11.5, 12.1, 13.4, 13.2, 11.3, 12.3, 13.0, 12.3, 12.7, 13.2, 13.2, 10.6, 10.2 ];
juli_modell1 = repmat(mean(juli_2015), 1, length(juli_2015));
juli_modell2 = juli_2015;
juli_2016 = [ 15.8, 14.6, 11.4, 13.6, 13.3, 10.6, 11.5, 14.2, 13.4, 14.3, 16.5, 14.5, 12.6, 12.0, 11.7, 12.1, 12.4, 12.4, 14.5, 17.1, 23.3, 20.1, 16.7, 18.2, 20.6, 16.3, 16.9, 15.4, 15.8, 13.9, 13.0 ]; 

Videoforklaring (18:49)

Del 1 (8:48)Del 2 (10:01)
Generelt om problemløsning, og introduksjon og forklaring av problemet.Matlab-løsning av oppgaven.

 

Løsningsforslag

Modell 1 har en RMSE på 3.5217 Celsius, mens modell 2 har en RMSE på 4.3179 Celsius. Modell 1 later derfor til å fungere best.

rmse.m
function result = rmse(modell_data, faktiske_data)
	result = sqrt(mean((modell_data - faktiske_data) .^ 2));
end
I kommandovindu
% Først kjører vi scriptet vaerdata.m for å lage våre variabler med data.
vaerdata
% Deretter kaller vi vår rmse-funksjon for å regne ut rmse-verdiene for de to modellene.
rmse(juli_modell1, juli_2016)
rmse(juli_modell2, juli_2016)

Oppgave 1.2.5: Funksjonstrening - innputt og parametere

Skriv en funksjon som lar brukeren skrive inn et tall, og som returnerer det dobbelte.

Videoforklaring (5:10)

Løsningsforslag

hent_dobbel.m
function retur = hent_dobbel()
    tall = input('Skriv inn et tall: ');
    retur = tall * 2;
end

Oppgave 1.2.6: Funksjonstrening - retur og utskrift

Skriv en funksjon som tar inn et tall, og som skriver ut det dobbelte.

Videoforklaring (6:28)

Løsningsforslag

skriv_ut_dobbel.m
function skriv_ut_dobbel(tall)
    disp(2*tall);
end

  • No labels