Detta dokument är http://www.mai.liu.se/~boein/edu/ada/
För att komma igång skall man ge följande kommandon i aktuellt terminalfönster:
TANA39setup module add gnatFöljande manualer är tillgängliga:
De nedan nämnda Ada-programmen my1.adb, my2.adb och tpk.adb finns även på kursbiblioteket.
i både enkel och dubbel precision.
Man sparar undan programmet som my1.adb respektive my2.adb, samt kompilerar enkelprecisionsprogrammet med
gnatmake my1.adboch kör med
./my1Motsvarande gäller för dubbelprecisionsprogrammet.
Programmet användes genom att man direkt efter start av det ger elva flyttal med blank emellan (direkt från tangentbordet).
För samma exempel i andra språk se ett appendix i min Lärobok i Fortran 90/95.
Exemplet i programspråket Ada finns som tpk.adb.
u'(t) = u(t)·[A - 0.1·v(t)] + 0.015·t, u(0) = alfa v'(t) = v(t)·[0.02·u(t) - 1] + 0.0075·t, v(0) = beta
Samtliga storheter är normaliserade, varför den verkliga tidsskalan är okänd, vi kan dock kalla tidsenheten för år. Vi betecknar antalet harar med u(t) och antalet rävar med v(t). Tänk Dig gärna antalen som tusental!
Lösning av detta system av differentialekvationer skall programmeras i Ada, utnyttjande Runge-Kuttas metod och dubbel precision (Long_Float). Förutom beräkning av antalet harar och rävar skall programmet beräkna det fel i respektive antal som beror på att parametern A inte är exakt 1 utan i stället 1 + dellta. Själva beräkningen skall ske med A = 1 och dellta = 0.02. Aktuell formel blir analog till den i svaret till 10.15 b, dvs (kolla den gärna):
DELTAun+1 = [1 + h·(1 - 0.1·vn)]·DELTAun - 0.1·h·un·DELTAvn + h·un·dellta
DELTAvn+1 = [1 + h·(0.02·un - 1)]·DELTAvn + 0.02·h·vn·DELTAun
DELTAu0 = 0
DELTAv0 = 0
dellta = 0.02
Den avser egentligen Eulers metod, men Du får använda den här vid felberäkningen, för att minska programmeringsarbetet.
Anmärkning: Att jag kallat felet ovan för dellta beror på att delta är ett reserverat namn vid fixpunktsaritmetik i Ada.
Din uppgift är att köra programmet med två val av startvärdena alfa (antalet tusental harar vid starttidpunkten) och beta (antalet tusental rävar vid starttidpunkten). Dessa skall båda väljas mellan 20 och 30.
Gör två körningar, och välj ett lämpligt värde på steglängden h. Du skall i båda fallen gå från t = 0 till t = 50.
För varje fall skall Du plotta vardera u ± DELTAu och v ± DELTAv som funktion av t. Dessutom skall Du separat plotta v som funktion av u. Den senare plotten kallas fasplanet.
Plottningen kan ske antingen direkt i Ada (kräver i så fall tillgång till plottrutiner i Ada), eller genom att Ada-programmet genererar en fil som kan utnyttjas av Matlab för plottning. Viss information om plottning i Matlab ges i den korta Matlab-guiden ( sidan ii) och labbinstruktion 5 (sidorna 9 - 11). Man kommer åt till exempel den andra kolumnen av en matris y genom att skriva y(:,2). En möjlighet är att skriva ut t, u, v, DELTAu och DELTAv som fem separata vektorer, som klistras (målas) in i Matlab efter till exempel x = [, avsluta med ]. Alternativt kan man i Ada skapa en fil med namnet filnamn.m som innehåller erforderlig matris eller vektorer och som kan hämtas in i Matlab med kommandot filnamn där. Som vanligt är det lämpligt att undvika filnamn som användes för olika funktioner i Matlab!
Kommandot load filnamn.mat arbetar däremot normalt med binära filer som har filändelsen .mat och passar bäst ihop med filer skapade i Matlab med kommandot save filnamn.mat. Kommandot load filnamn.txt fungerar däremot utmärkt i vårt fall.
alfa = beta =
alfa = beta =
Laborationen kan ges något av följande betyg: