Enkla loopar och if-satser

I denna laboration kommer några inledande övningar på repetitionssatser och alternativsatser.

Skapa programmen med Matlabs editor. Kalla t.ex. filen lab1.m. Du kör kommandona på filen t.ex. genom att i Matlabs kommandofönster skriva lab1 . Skapa bara så kallade script-filer (m-filer), dvs. använd inte funktionsfiler (om du har sett sådana). Tids nog kommer vi till funktioner, men de krånglar bara till programmeringen så här i början.



Problem
Låt sN = 1 + 1 / 2^4 + 1 / 3^4 + ... + 1 / N^4. Beräkna, i Matlab, det minsta N för vilket gäller att:
 sN = sN+1, när summorna beräknas från vänster till höger. Vilket är värdet på sN för detta N?

Ovanstående är orimligt ur matematisk synpunkt, men med flyttalsaritmetik (är inte Matlabs "fel", med andra ord) kommer man att råka ut för fullständig utskiftning (pga att man räknar med ett ändligt antal decimaler). Fullständig utskiftning inträffar när "stort tal + litet tal = stort tal", dvs. inget av det lilla talet kommer med. T.ex. gäller att

>> (1 + 1e-16) - 1
ans = 0

Mer om detta kommer i kursen i numerisk analys.

Problem
355 / 113 är en rätt bra (och mycket gammal) approximation av pi. Låt p och q vara positiva heltal. Använd Matlab för att hitta det minsta värdet på q (och tillhörande p) som uppfyller villkoret
| p / q - pi | < | 355 / 113 - pi |
dvs hitta den första rationella approximationen, av pi, som är bättre än 355 / 113.

Ledning: följande funktioner kan vara användbara, pi, abs, ceil, floor, round, mod.

Man kan approximera pi (eller vilket annat reellt tal som helst) godtyckligt noga med ett rationellt tal, det är bara att använda tillräckligt stora p och q. En finess med 355 / 113 är att man har en bra approximation med få siffror i täljare och nämnare, approximationen är ekonomisk i denna mening. I nästa uppgift kommer du att hitta ekonomiska approximationer av e = exp(1).

Problem
Låt ndig(q) vara antalet siffror i q, så ndig(519) = 3, ndig(3322) = 4 etc. Bestäm den bästa approximationen av exp(1) när ndig(q) = 1, 2, 3, 4, 5 respektive 6. Om det finns flera (p, q)-par (för ett givet värde på ndig(q)) som ger samma värde på felet, skriv då ut (p, q)-paret med minsta värdet på q. 

Om
det hade varit pi (och inte e) som du skulle approximera och dig(q) = 3 så skulle endast 113, 355 skrivas ut (fastän 355 / 113 = 670 / 226 = 1065 / 339 etc).
Observera att "ndig" inte är en Matlabfunktion utan bara en beteckning jag använde för att formulera uppgiften.


Back