 |  |
1. Groepen |
 |
Ik geef oefenzittingen voor de volgende groepen van 2de kan burgerlijk ingenieur
|
 |
2. Links |
 |
Volgende links zijn interessant:
|
 |
3. Zitting 1 |
 |
- IEEE 754 floating-point voorstelling:
Een Matlab script dumpfp.m dat je de
machine representatie van een double toont op een machine met
intel-architectuur.
>> dumpfp(0); dumpfp(1); dumpfp(-1); dumpfp(eps); dumpfp(1+eps); dumpfp(-Inf); dumpfp(pi);
0 +0.0000000000000000000000000000000000000000000000000000 2^00000000000 (denorm)
1 +1.0000000000000000000000000000000000000000000000000000 2^01111111111 (2^0)
-1 -1.0000000000000000000000000000000000000000000000000000 2^01111111111 (2^0)
2.2204460492503131e-16 +1.0000000000000000000000000000000000000000000000000000 2^01111001011 (2^-52)
1.0000000000000002 +1.0000000000000000000000000000000000000000000000000001 2^01111111111 (2^0)
-Inf -x.0000000000000000000000000000000000000000000000000000 2^11111111111 (Inf/NaN)
3.1415926535897931 +1.1001001000011111101101010100010001000010110100011000 2^10000000000 (2^1)
Een C programma dumpfp.c dat nethetzelfde
doet, maar de kennis van de bit-layout uit een header file haalt en
daardoor wel zal werken op andere architecturen.
Het C programma fp.c laat dezelfde floating
point 'rariteiten' zien als die uit de Java Core tips van hierboven.
$ ./fp
Representation error:
d1 = 0.1 = 0.10000000000000001 = 0x1.999999999999ap-4
d2 = 0.3 = 0.29999999999999999 = 0x1.3333333333333p-2
d = d1 + d1 + d1 = 0.3 = 0.30000000000000004 = 0x1.3333333333334p-2
d - d2 = 5.55112e-17 = 5.5511151231257827e-17 = 0x1p-54
Precission:
d1 = 12345 = 12345 = 0x1.81c8000000000p+13
d2 = 1e-16 = 9.9999999999999998e-17 = 0x1.cd2b297d889bcp-54
d1 + d2 = 12345 = 12345 = 0x1.81c8000000000p+13
Overflow:
d1 = 1.6e+308 = 1.6e+308 = 0x1.c7b1f3cac7433p+1023
d2 = (d1*2.0) / 2.0 = inf = inf = inf
|
 |
4. Zitting 4 |
 |
Tips en truuks bij oefening 1:
-
Lees de gegevens in door het data script uit te voeren:
>> data % defineert een vector decades en een vector telling
-
De decades vector bevat de getallen 0 t.e.m. 10, deze komen
uiteraard overeen met de jaren 1900 t.e.m. 2000!
-
Voor deze oefening moet je heel wat plotjes maken van verschillende
interpolaties. Om deze gemakkelijk te kunnen vergelijken is het handig
als je deze plotjes op dezelfde grafiek hebt staan en voor elke plot
een ander kleurt en/of lijntype gebruikt.
| kleuren |
betekenis |
|
lijntypes |
betekenis |
| 'r' |
red |
|
'-' |
volle lijn (continue) |
| 'm' |
magenta |
|
':' |
stippe lijn (continue) |
| 'b' |
blue |
|
'--' |
streepjes lijn (continue) |
| 'k' |
black |
|
'*' |
sterretjes (discreet) |
| 'y' |
yellow |
|
'o' |
bolletjes (discreet) |
| 'g' |
green |
|
'd' |
diamands (discreet) |
| 'c' |
cyan |
|
'.' |
puntjes (discreet) |
Je kan een kleur en een lijntype combineren, bijvoorbeeld een blauwe
streepjes lijn is 'b--'.
De eerste plot is deze van de gegevens, dit doe je bijvoorbeeld met
>> plot(decades, telling, 'bo') % teken discrete data met blauwe bolletjes
>> hold on % voeg volgende plots toe aan deze grafiek
Het commando hold on zorgt ervoor dat een volgend
plot commando de huidige grafiek niet verwijderd.
Wanneer je een interpolerende veelterm wil plotten, dan doe je dit
best door veel meer punten dan de 11 data punten, de veelterm
defineert immers een continue kromme. Je plot deze best door
>> t = [-2:.1:12]; % een reeks die begint in -2 en gaat tot 12 in stapjes van .1
Dit zijn de jaren 1880 t.e.m. 2020 in stapjes van 1 jaar.
-
Lees de documentatie van het commando polyfit en
polyval eens (met help polyfit en help
polyval).
-
Indien je een veelterm van graad 2 (die gaat netjes door 3 punten!)
wil berekenen door de jaren 1900, 1950 en 2000 dan heb je de
overeenkomstige elementen nodig van de vectoren decades en
telling. Dit zijn de elementen op posities 1, 6 en 11 en je
gebruikt het commando polyfit dan als volgt:
>> p = polyfit(decades([1 6 11]), telling([1 6 11]), 2); % in p de coefficienten
>> plot(t, polyval(p, t), 'm-') % zet bij op grafiek
-
Indien je iets verkeerds geplot hebt op je grafiek dan kan je de
grafiek bewerken en dit terug verwijderen (je kan zo ook kleuren en
lijntypes veranderen). Dit doe je door het zwarte pijltje aan te
klikken en dan het object op de grafiek dat je wilt verwijderen of
wijzigen.
|
 |
5. Zitting 5 |
 |
-
De slide met de grafische
interpretie van de formule van Neville en Aitken. De gegevens zijn de
magenta punten (x0, f0, x1,
f1, x2, f2) en we willen de
waarde in het punt met x = s. De punten die we berekenen zijn
rood gekleurd, en de waarden van de 1-ste orde zijn reeds berekend.
We willen nu y012(s) berekenen adhv
y01(s) en y12(s) bij Neville (of
y01(s) en y02(s) bij Aitken).
En dat doen we door een lineaire interpolatie op de groene rechte!
|
 |
6. Zitting 6 |
 |
-
Het aanzetten van ticks en lijnen op de X-as met stapjes van pi/2:
>> set(gca, 'XTick', [0:pi/2:8*pi])
>> set(gca, 'XGrid', 'on')
-
Visualisatie van de slinger in Matlab voor vaste stapgroottes:
visslinger.m.
>> [trk4, yrk4] = rk4('slinger', [0 20], 0.02, [pi/2 5.12]);
>> visslinger(0.02, yrk4(:,1))
Hiervoor heb je wel een recente versie van Matlab nodig (R13).
-
Om de vissualisatie voortijdig te stoppen kan je volgend command gebruiken
>> delete(timerfind('Tag', 'Slinger'));
-
De plots voor vvweuler, heun en rk4 kan je hier nog eens bekijken:
hoek en hoeksnelheid ifv de tijd en
hoeksnelheid ifv hoek.
-
stabiliteit.mws met rechts en links
-
Orde bepalen op log-log plot van fout i.f.v. stapgrootte met cvg.m
|
 |
7. Zitting 7 |
 |
-
Een voorbeeld Maple sheet voor de eerste oefening:
voorbeeld.mws.
|
|  |