Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Kodeforståelsesoppgaver (total videotid: 33:13)

OppgaveVideotidBeskrivelseVanskelighetsgrad
Oppgave 4.1.1: Fprintf datatyper

...

Hva skrives ut hvis vi kjører dette scriptet?

...

languagenone
titleoppgave_1.m

...

...

14:

...

Widget Connector
urlhttps://www.youtube.com/watch?v=AfGAGiBT6AU

 

Svar

Expand
titleHvis du har prøvd selv, trykk her for å se svaret...
Code Block
Heltallet er 1
Desimaltallet er 2.500000
Bokstaven er a
Strengen er hei
97
a
Han sa:
	'Vi må gi 100 %!'
10Grunnleggende fprintf-bruk: prosent-tegn for å skrive ut forskjellige datatyper, og backslash for å skrive ut spesielle bokstaver.Lett
Oppgave 4.1.2:

...

Hva skrives ut hvis vi kjører dette scriptet?

Code Block
titleoppgave_2
fprintf('%3d,', 1);
fprintf('%03d,', 1);
fprintf('%-3d,', 1);
fprintf('%-03d!\n', 1);
fprintf('%.2f,', 2.524);
fprintf('%6.2f,', 2.524);
fprintf('%06.2f,', 2.524);
fprintf('%-6.2f,', 2.524);
fprintf('%-06.2f!\n', 2.524);
fprintf('%5s,', 'hei');
fprintf('%05s,', 'hei');
fprintf('%-5s,', 'hei');
fprintf('%-05s!\n', 'hei');

Videoforklaring (13:23)

Widget Connector
urlhttps://www.youtube.com/watch?v=AhCO0V21ZyM

Svar

Expand
titleHvis du har prøvd selv, trykk her for å se svaret...
Code Block
  1,001,1  ,1  !
2.52,  2.52,002.52,2.52  ,2.52  !
  hei,00hei,hei  ,hei00!
13:22Hvordan ekstra tegn mellom prosent-tegnet og datatypebokstaven i fprintf-formatstrenger bestemmer hvordan utskriften til skjerm blir formattertMiddels
Oppgave 4.1.3: Fprintf med vektorer

...

Hva skrives ut hvis vi kjører dette scriptet?

...

...

titleoppgave_3.m

...

5

...

:39

...

Widget Connector
urlhttps://www.youtube.com/watch?v=jWuuve8HYj8

Svar

...

titleHvis du har prøvd selv, trykk her for å se svaret...

...

Hvordan fprintf behandler vektorer som verdiargument.Middels

Kodeoppgaver (total videotid: 54:54)

OppgaveVideotidBeskrivelseVanskelighetstgrad
Oppgave 4.2.1:

...

I tidligere oppgaver lagde vi et script som produserer en oversikt over hvilke Fahrenheit-verdier som tilsvarer en rekke Celsius-referanseverdier. Fahrenheit-oversikten forteller oss ikke hvilken Celsius verdi de utskrevne Fahrenheit-verdiene tilsvarer. Utvid scriptet til å skrive ut en mer informativ linje som forklarer hvilken Celsius-verdi Fahrenheit-verdien tilsvarer.

Utdelt kode

Expand
titlefahrenheit.m
Code Block
titlefahrenheit.m
svar = input('Ønsker du å skrive inn egne Celsius-verdier? (ja/nei) ', 's');
if strcmp(svar, 'ja')
    antall = input('Hvor mange verdier? ');
    for i = 1:antall
        celsius = input('Skriv inn Celsius-verdi: ');
        cels2fahr(celsius)
    end
else
    cels2fahr(-20);
    cels2fahr(0);
    cels2fahr(18);
    cels2fahr(37);
    cels2fahr(100);
end 

...

Widget Connector
urlhttps://www.youtube.com/watch?v=B2UPm7MK0_4

Løsningsforslag

Expand
titleHvis du har prøvd selv, trykk her for å se svaret...
Code Block
titlefahrenheit.m
svar = input('Ønsker du å skrive inn egne Celsius-verdier? (ja/nei) ', 's');
if strcmp(svar, 'ja')
    antall = input('Hvor mange verdier? ');
    for i = 1:antall
        celsius = input('Skriv inn Celsius-verdi: ');
        skriv_ut_fahr(celsius);
    end
else
    skriv_ut_fahr(-20);
    skriv_ut_fahr(0);
    skriv_ut_fahr(18);
    skriv_ut_fahr(37);
    skriv_ut_fahr(100);
end
Code Block
titleskriv_ut_fahr
function skriv_ut_fahr(celsius)
    fahr = cels2fahr(celsius);
    fprintf('Celsiusverdi %.2f tilsvarer Fahrenheitverdi %.2f\n', celsius, fahr);
end

 

 

7:23

...

Bruk av fprintf for å få pent formattert utskrift.Lett

...

Du stoler ikke på at Matlabs innebygde funksjon sqrt er effektiv nok, og har funnet ut at du vil lage din egen. Du har innsett at siden , blir det å finne kvadratroten til et tall det samme som å finne nullpunktet til funksjonen  . Du har lært en metode for å finne nullpunkt, kalt Newtons metode, som fungerer slik:

  1.  Velg et første estimat for nullpunkt, , for funksjonen .

  2. Regn ut videre estimat for nullpunkt med formelen

(I vårt tilfelle er ).

Lag en funksjon som estimerer roten til et tall. Bruk 20 iterasjoner av Newtons metode, og . Sammenlign estimatene for kvadratroten av 4, 97 og 1e18 med estimatene fra sqrt.

Videoforklaring (9:02)

Widget Connector
urlhttps://www.youtube.com/watch?v=Qk7llL0ke4w

Løsningsforslag

...

titleHvis du har prøvd selv, trykk her for å se svaret...

...

titlekvadratrot.m

...

Kvadratrotestimat9:02Bruk av for-løkke til å beregne kvadratrot numerisk, vha Newtons metode.Middels

...

...

...

Du har nettopp laget en funksjon som estimerer kvadratroten til et tall, ved hjelp av 20 iterasjoner av Newtons metode. Du ønsker nå å vite hvordan utviklingen av estimatene er i hver iterasjon. Utvid funksjonen til å produsere utskrift som det følgende i hver iterasjon:

Utdelt kode

...

titlekvadratrot.m

...

titlekvadratrot.m

...

...

7:25

...

Widget Connector
urlhttps://www.youtube.com/watch?v=hfWMuFCglFo

Løsningsforslag

...

titleHvis du har prøvd selv, trykk her for å se svaret...

...

titlekvadratrot.m

...

Bruk av fprintf for å få formatert utskrift. Bygger på funksjonen skrevet i video 4.2.2.Lettt
Oppgave 4.2.4:

...

...

Du har innsett at å bruke Matlabs input-funksjon uten å bruke 's'-parameteren er en sikkerhetsrisiko, siden den lar brukeren kjøre vilkårlig Matlab-kode. Du synes også at feilmeldingene som dukker opp hvis brukeren skriver inn et ugyldig tall er dårlige.

Lag en ny funksjon som leser inn og returnerer et tall fra brukeren. For at funksjonen skal kunne brukes så generelt som mulig, skal teksten som spør brukeren om å skrive inn et tall være en parameter. Funksjonen må bruke to-parameter-versjonen av input. Hvis brukeren skriver inn et ugyldig tall, skal funksjonen skrive ut en passende feilmelding og prøve å lese inn et tall på nytt.

Videoforklaring (12:14)

Widget Connector
urlhttps://www.youtube.com/watch?v=Bni9Gk8lirI

Løsningsforslag

...

titleHvis du har prøvd selv, trykk her for å se svaret...

...

titleles_inn_tall.m

...

12:14Bruk av while-løkker for kjøring av kode så lenge en betingelse er sann, samt bruk av fprintf for å skrive informative feilmeldinger. Ulemper med å bruke funksjonen input med bare én parameter, og funksjonen str2num, diskuteres også.Middels
Oppgave 4.2.5:

...

...

Tidligere lagde du et script som lot brukeren skrive inn en rekke Celsius-verdier, og konverterte én og én til Fahrenheit. I scriptet måtte brukeren bestemme seg på forhånd for hvor mange Celsius-verdier som skulle skrives inn.

Endre scriptet slik at brukeren kan skrive inn et vilkårlig antall Celsius-verdier. Hvis brukeren trykker enter uten å skrive noe, skal scriptet avslutte. 

Utdelt kode

Expand
titlefahrenheit.m
Code Block
titlefahrenheit.m
svar = input('Ønsker du å skrive inn egne Celsius-verdier? (ja/nei) ', 's');
if strcmp(svar, 'ja')
    antall = input('Hvor mange verdier? ');
    for i = 1:antall
        celsius = input('Skriv inn Celsius-verdi: ');
        skriv_ut_fahr(celsius);
    end
else
    skriv_ut_fahr(-20);
    skriv_ut_fahr(0);
    skriv_ut_fahr(18);
    skriv_ut_fahr(37);
    skriv_ut_fahr(100);
end 

...

titleskriv_ut_fahr.m
Code Block
titleskriv_ut_fahr.m
function skriv_ut_fahr(celsius)
    fahr = cels2fahr(celsius);
    fprintf('Celsiusverdi %.2f tilsvarer Fahrenheitverdi %.2f\n', celsius, fahr);
end 

...

titleles_inn_tall.m

...

titleles_inn_tall.m

...

...

10:25

...

Widget Connector
urlhttps://www.youtube.com/watch?v=OBUnRVCtnao

Løsningsforslag

...

titleHvis du har prøvd selv, trykk her for å se svaret...
Code Block
titlefahrenheit.m
svar = input('Ønsker du å skrive inn egne Celsius-verdier? (ja/nei) ', 's');
if strcmp(svar, 'ja')
    celsius = les_inn_tall('Skriv inn Celsius-verdi: ');
    while ~isempty(celsius)
        skriv_ut_fahr(celsius);
        celsius = les_inn_tall('Skriv inn Celsius-verdi: ');
    end
else
    skriv_ut_fahr(-20);
    skriv_ut_fahr(0);
    skriv_ut_fahr(18);
    skriv_ut_fahr(37);
    skriv_ut_fahr(100);
end 

...

titleles_inn_tall.m

...

Bruk av while-løkker for å gjøre innlesing av referanseverdier i Fahrenheit-scriptet mer fleksibelt. Også bruk og utvidelse av funksjon fra oppgave 4.2.4.Middels
Oppgave 4.2.6:

...

Tidligere lagde du en funksjon som estimerte kvadratroten av et tall ved å bruke et fast antall iterasjoner av Newtons metode. Du har imidlertid innsett at dette gir unøyaktige svar i noen tilfeller, og unødvendig mange iterasjoner i andre tilfeller. Du ønsker derfor å tilpasse antall iterasjoner til verdien vi skal estimere kvadratroten av. En måte å gjøre dette på, er å kjøre Newtons metode helt til relativ endring av verdien er mindre enn en viss grense. Formelen for relativ endring, er .

Endre funksjonen til å regne ut kvadratrot med en relativ feilgrense på 1e-9.

Utdelt kode

Expand
titlekvadratrot.m
Code Block
titlekvadratrot.m
function retur = kvadratrot(tall)
    x = 1;
    for i = 1:20
       ny_x = x + (tall - x^2)/(2*x);
       fprintf('Iterasjon #%d: x_%d = %.10f, x_%d = %.10f\n', i, i-1, x, i, ny_x);
       x = ny_x;
    end
    retur = x;
end

Videoforklaring (8:25)

Widget Connector
urlhttps://www.youtube.com/watch?v=KzYf5rvtDlQ

Løsningsforslag

...

titleHvis du har prøvd selv, trykk her for å se svaret...

...

titlekvadratrot.m

...

8:25Bruk av while-løkker til å gjøre en beregning helt til svaret er under en gitt feilgrense. Generell teknikk for å kjøre én iterasjon av while-løkken først.Middels

Alle oppgavene på en side

 Oppgavevideoer uke 39 - alle oppgaver

...