26.07.2013 Views

LØSNINGSFORSLAG TIL - NTNU

LØSNINGSFORSLAG TIL - NTNU

LØSNINGSFORSLAG TIL - NTNU

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Oppgave 4 – Matlab (35 %)<br />

a) Forslag til løsning. Her er ikke kommentarene og testprogrammet nederst nødvendige; bare metoden.<br />

function svar = godkjent(tabell)<br />

%sum6forste skal inneholde hvor mange av de 6 første som er godkjent<br />

sum6forste = 0;<br />

for i= 1:6<br />

%legger til celleverdien til hver av de 6 første cellene<br />

%i tabellen (da disse er 1 eller 0 - og 1 hvis godkjent)<br />

sum6forste = sum6forste + tabell(i);<br />

end<br />

%sum6forste skal inneholde hvor mange av de 6 siste som er godkjent<br />

sum6siste = 0;<br />

for i= 7:12<br />

sum6siste = sum6siste + tabell(i);<br />

end<br />

//svaret 1 (sann) skal returneres hvis:<br />

// 5 godkjent blant de 6 første øvingene &&<br />

// 4 godkjent blant de 6 siste &&<br />

// enten øving 11 || øving 12 er godkjent<br />

svar = sum6forste>=5 & sum6siste>=4 & (tabell(11) | tabell(12));<br />

return<br />

Side 3 av 4<br />

b) Tilsvarende her. Bare koden er nødvendig for godkjent, ikke kommentarer. Her var ikke tanken å gjøre det så<br />

veldig komplisert, men rundturen på eksamen viste at mange forskjellige brukbare løsninger kan vurderes som<br />

godkjent. Noe som bør vurderes er om det som presenteres er et rimelig ”kjørbart” matlab-program. Tre forslag<br />

til godkjent løsning er gitt under:<br />

Enkleste løsning:<br />

% Oppgaven sa:<br />

% - tre tabeller skulle finnes på<br />

% - tabellene skulle skrives ut<br />

% - funksjonen godkjent skulle kalles<br />

% - resultatet av funksjonskalles skulle presenteres<br />

tab1 = [1 1 0 1 1 1 1 1 1 0 0 1]<br />

godkjent(tab1)<br />

tab2 = [1 1 0 0 1 1 1 1 1 0 0 1]<br />

godkjent(tab2)<br />

tab3 = [1 1 0 1 1 1 1 1 1 0 1 1]<br />

godkjent(tab3)<br />

Ved å ta inn tabellene fra brukeren vha. input():<br />

tab1 = input('Skriv inn tabell 1: ');<br />

godkjent(tab1)<br />

tab2 = input('Skriv inn tabell 2: ');<br />

godkjent(tab2)<br />

tab2 = input('Skriv inn tabell 3: ');<br />

godkjent(tab2)<br />

Litt mer omstendelig:<br />

tab1 = [1 1 0 1 1 1 1 1 1 0 0 1]<br />

if(godkjent(tab1))<br />

disp('tab1 var godkjent')<br />

else<br />

disp('tab1 var ikke godkjent')<br />

end<br />

tab2 = [1 1 0 0 1 1 1 1 1 0 0 1]<br />

if(godkjent(tab2))<br />

disp('tab2 var godkjent')<br />

else<br />

disp('tab2 var ikke godkjent')<br />

end<br />

tab3 = [1 1 0 1 1 1 1 1 1 0 1 1]<br />

if(godkjent(tab3))<br />

disp('tab3 var godkjent')<br />

else<br />

disp('tab3 var ikke godkjent')<br />

end<br />

Side 4 av 4<br />

c) Utfordringen her var vel å beherske programmering nok til å kunne benytte den på en litt vanskelig (?)<br />

matematisk beregning. Her bør en løkkestruktur benyttes for å beregne de enkelte y-verdier da de er såpass<br />

mange. Det var ingen krav om å enkelt kunne endre hvilken funksjon integralet beregner; heller ikke å enkelt<br />

kunne endre x-intervallet eller n-verdien, men man blir selvsagt ikke trukket hvis noe slikt er tatt hensyn til i<br />

programmet.<br />

Det vi ønsker å skrive program for å beregne her er følgende:<br />

2<br />

0,<br />

1<br />

∫ sin( x ) ≈T10<br />

= sin( 1)<br />

+ 2 ⋅ sin( 1.<br />

1)<br />

+ 2 ⋅ sin( 1.<br />

2)<br />

+ ... + 2 ⋅ sin( 1.<br />

8)<br />

+ 2 ⋅ sin( 1.<br />

9)<br />

+ sin( 2)<br />

1<br />

2<br />

hvilket i programmet mer beregnes i følgende rekkefølge (som jo gir samme svar):<br />

⎛ sin( 1)<br />

sin( 2)<br />

⎞<br />

T 10 = ⎜ + sin( 1.<br />

1)<br />

+ sin( 1.<br />

2)<br />

+ ... + sin( 1.<br />

8)<br />

+ sin( 1.<br />

9)<br />

+ ⎟ ⋅ 0,<br />

1<br />

⎝ 2<br />

2 ⎠<br />

( )<br />

Forslag til program:<br />

n = 10;<br />

xstart = 1;<br />

xslutt = 2;<br />

deltaX = (xslutt-xstart)/n; %kan settes til 0.1 direkte<br />

%først legges y0-verdien (i startpunktet xstart) til integralet<br />

integral = sin(xstart)/2;<br />

%for alle y-verdier fra y1 til yn-1 gjør følgende<br />

for i = xstart+deltaX : deltaX : xslutt-deltaX<br />

%legg til sinus til i-verdien<br />

integral = integral + sin(i);<br />

end<br />

%til slutt legges yn-verdien (i sluttpunktet xslutt) til<br />

integral = integral + sin(xslutt)/2;<br />

%ganger med deltaX fordi formelen sier så:)<br />

integral = integral*deltaX;<br />

disp(['Numerisk beregnet integral for sinus(x) mellom 1 og 2 med n=10 er '<br />

num2str(integral)])

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!