Skip to content

Commit 1b8e2f6

Browse files
committed
2 parents bc1fe2f + bff12ba commit 1b8e2f6

File tree

13 files changed

+202
-208
lines changed

13 files changed

+202
-208
lines changed

Physics/src/NewtonianMechanics/SingleParticle.lhs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
> module NewtonianMechanics.SingleParticle where
22

3-
%< import Calculus.SyntaxTree
4-
53
> import Test.QuickCheck
64

75
Laws:
@@ -20,8 +18,8 @@ mathmatical functions in previous chapters we won't spend any time on them here
2018
and instead just import those two modules.
2119

2220
> import Calculus.FunExpr
23-
> import Calculus.DifferentialCalc -- Maybe remove
24-
> import Calculus.IntegralCalc -- Maybe remove
21+
> import Calculus.DifferentialCalc
22+
> import Calculus.IntegralCalc
2523
> import Vector.Vector as V
2624

2725
The mass of a particle is just a scalar value so we'll model it using
@@ -35,11 +33,13 @@ type `VectorE` to signify that it's a vector of expressions.
3533

3634
> type VectorE = Vector3 FunExpr
3735

36+
> type Position = Vector3 FunExpr
37+
3838
Now we are ready to define what the data type for a particle is. As we
39-
previously stated a point particle has a mass, and a position given as a vector
40-
of function expressions. So our data type is simply:
39+
previously stated a point particle has a position given as a vector
40+
of function expressions, and a mass. So our data type is simply:
4141

42-
> data Particle = P { pos :: VectorE -- Position as a function of time, unit m
42+
> data Particle = P { pos :: Position -- Position as a function of time, unit m
4343
> , mass :: Mass -- Mass, unit kg
4444
> } deriving Show
4545

@@ -282,17 +282,14 @@ equal to the change in kinetic energy $E_k$ of the particle:
282282

283283
Let's codify this theorem:
284284

285-
PS: This used to work just fine, but it no longer does since the switch to
286-
FunExpr. Problem probably lies somewhere in SyntaxTree
287-
288-
< prop_WorkEnergyTheorem :: Mass -> VectorE -> VectorE -> IO Bool
289-
< prop_WorkEnergyTheorem m v1 v2 = prettyEqual deltaEnergy (kineticEnergy displacedParticle)
290-
< where
291-
< particle1 = P v1 m -- | Two particles with the same mass
292-
< particle2 = P v2 m -- | But different position vector
293-
< -- | E_k,2 - E_k,1
294-
< deltaEnergy = kineticEnergy particle2 - kineticEnergy particle1
295-
< displacedParticle = P (v2 - v1) m
285+
> prop_WorkEnergyTheorem :: Mass -> Position -> Position -> Bool
286+
> prop_WorkEnergyTheorem m p1 p2 = deltaEnergy == kineticEnergy displacedParticle
287+
> where
288+
> particle1 = P p1 m -- | Two particles with the same mass
289+
> particle2 = P p2 m -- | But different position vector
290+
> -- | E_k,2 - E_k,1
291+
> deltaEnergy = kineticEnergy particle2 - kineticEnergy particle1
292+
> displacedParticle = P (p2 - p1) m
296293

297294
< -- Test values
298295
< v1 = V3 (3 :* Id) (2 :* Id) (1 :* Id)

Physics/src/Vector/Vector.lhs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -275,10 +275,10 @@ hopefully understand where I'm going when reading the examples.
275275
Using this information we can now create a new class for vectors which
276276
implement this functionality:
277277
278-
> class Vector vector where
279-
> vmap :: (num -> num) -> vector num -> vector num
280-
> vzipWith :: (num -> num -> num) -> vector num -> vector num -> vector num
281-
> vfold :: (num -> num -> num) -> vector num -> num
278+
> class Vector vec where
279+
> vmap :: (num -> num) -> vec num -> vec num
280+
> vzipWith :: (num -> num -> num) -> vec num -> vec num -> vec num
281+
> vfold :: (num -> num -> num) -> vec num -> num
282282
283283
Now we have a blueprint for what vector is, so let's implement it for our own
284284
vector datatypes.

README.md

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,42 @@ Medlemmar: Oskar, Erik, ~~Daniel~~, Björn, Johan
88

99

1010
## Deadlines
11-
* 9/2 : Inlämning av Planeringsrapport.
12-
* 27/2 : Halvtidsredovisnin av projektgrupperna ( Muntlig )
13-
* 2/3 : Egen utvärdering på blankett till handledaren.
14-
* 23/3 : Rapportspråk, vi kollar 24/3 och påminner. Kompletering möjlig fram till 27/4.
15-
* 8/5 : Inlämning av poster för tryckning
16-
* 15/5 : Utställning enligt anvisningar.* 16/5 : Engelsk Titel, Gäller rapporter på Svenska, kompletering möjlig fram till 9/6, vi kollar 24/5 och påminner
17-
* 21/5 : Deadline inlämning av Opposition, skriftlig elektronisk
1811
* 24/5 (10:35) : Muntliga slutredovisning och opposition & Avtal om publicering, lämnas in i samband med presentationen
1912
* 25/5 : Egen utvärdering på blankett till handledaren.
2013
* 1/6 : Deadline inlämning av slutrapport, elektronisk form, med införande av opponenternas kommentarer.
14+
15+
## Att göra på rapport
16+
17+
- Lägg till tekniska detaljer i resultat
18+
- Vektorer
19+
- Analys
20+
- Partikelmekanik
21+
- Exempelproblem
22+
- Språkdetaljer
23+
- Genomförande
24+
- Diskussion
25+
- Resultat
26+
- Korta ner
27+
- Genomförande
28+
- Diskussion
29+
- Relaterade arbeten i diskussion
30+
- ~Skriva om förklaring av generellt programmeringsspråk~
31+
- Referenssystem
32+
- ~Kod i figurer~
33+
- Kolla över användning av syntaxträd
34+
- Kommentarer i teorikapitel
35+
- Röd tråd lärandeteorier ~och sista stycket~
36+
- Framåtpekare i genomförande
37+
- Skapnde hemsida, kanske ta bort
38+
- Hade testgruppen klarat kursen?
39+
- ~Utveckla att inte kan fuska~
40+
- Figur som hamnat fel
41+
- Utveckla hur gick för DSL2016
42+
43+
## Att prata om
44+
45+
- Utvärdering i met+res+disk (som nu), bara disk eller inte alls?
46+
- Hur vi ska korta ner genomförande
47+
- Hur vi ska korta ner diskussion
48+
- Ha kvar hemsida i metod?
49+
- Hela läromaterialet i bilagan?
-4.66 KB
Loading

Rapport/figure/smakprov_ovning.png

-5.35 KB
Loading

Rapport/include/Diskussion.tex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
\chapter{Diskussion}
3+
\label{cha:disk}
34

45
I detta kapitel diskuteras projektets genomförande, resultat,
56
vidareutvecklingsmöjligheter och etiska aspekter.
@@ -139,9 +140,8 @@ \subsection{Om läromaterialets fokus på matematik och Haskell snarare än
139140
\begin{figure}[tph]
140141
\centering
141142
\includegraphics[width=0.9\textwidth]{figure/purity.png}
142-
\caption{\href{https://xkcd.com/435/}{Purity} av
143-
\href{https://xkcd.com}{xkcd.com} licensierad under
144-
\href{https://creativecommons.org/licenses/by-nc/2.5/}{CC BY-NC}. Bilden beskriver hur fysik är en tillämpning av matematik. Det är i själva verket
143+
\caption{\href{https://xkcd.com/435/}{Purity} (C) Randall Munroe (
144+
\href{https://xkcd.com}{xkcd.com}) \href{https://creativecommons.org/licenses/by-nc/2.5/}{CC BY-NC}. Bilden beskriver hur fysik är en tillämpning av matematik. Det är i själva verket
145145
så att en kedja av områden kan betraktas som tillämpningar av
146146
varandra.}\label{fig:xkcd}
147147
\end{figure}

Rapport/include/Metod.tex

Lines changed: 35 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
\chapter{Genomförande}
1616

1717
Projektets genomförande bestod av fyra delar. Den största delen var
18-
konstruktionen av själva läromaterialet i vilken det ingick sökande efter fysikaliska
18+
konstruktionen av själva läromaterialet i vilken det ingick sökande efter lämpliga
1919
områden, implementation av domänspecifika språk och skrivande av lärotext. De
2020
tre andra delarna var publicering av läromaterialet på en hemsida, utvärdering
2121
av läromaterialet med en testgrupp samt möten med Åke Fäldt, examinator och
@@ -24,54 +24,14 @@ \chapter{Genomförande}
2424

2525
\section{Konstruktion av läromaterialet}\label{sec:konstruktion}
2626

27-
Läromaterialet består av fem kapitel som vardera behandlar separata
28-
områden. Skapandet av varje kapitel skedde därför till största delen fristående
29-
från andra kapitel. Konstruktionen av kapitlen bestod i sin tur av tre faser,
30-
som såg likadana ut för alla kapitel. Dessa faser var sökande efter område,
31-
implementation av domänspecifika språk för området samt skrivande av lärotext. Denna skapandeprocess kan delas upp i en graf med två axlar: en utefter kapitel
32-
och en utefter fas. Det här illustreras i figur~\ref{fig:oversiktA}. Figuren
33-
visar att varje kombination av kapitel och fas är en del i projektet som
34-
arbetades med.
35-
36-
\begin{figure}[tph]
37-
\centering
38-
\begin{subfigure}[t]{0.5\textwidth}
39-
\centering
40-
\frame{\includegraphics[width=0.9\linewidth]{figure/oversiktA.pdf}}
41-
\caption{Delarna visas distinkta och var för sig.}\label{fig:oversiktA}
42-
\end{subfigure}% <- This comment makes the figure lie side by side ¯\(°_o)/¯
43-
~~~
44-
\begin{subfigure}[t]{0.5\textwidth}
45-
\centering
46-
\frame{\includegraphics[width=0.9\linewidth]{figure/oversiktB.pdf}}
47-
\caption{Delarna visas med gränsöverskridande överlapp. Notera att
48-
implementation och skrivande \textit{alltid} var överlappande medan
49-
sökande \textit{ofta men inte alltid} var det.}~\label{fig:oversiktB}
50-
\end{subfigure}
51-
\caption{Översikt över hur skapandeprocessen för läromaterialet såg ut.
52-
Processen delas upp utefter två axlar: kapitel och fas. Varje kombination
53-
är en del som arbetats med och är gråmarkerad.}
54-
\end{figure}
55-
56-
Även om detta sätt att dela upp processen är översiktligt är det inte helt
57-
verklighetstroget. I praktiken fanns det överlapp mellan de olika delarna, både
58-
med avseende på kapitel och fas. Det här illustereras i
59-
figur~\ref{fig:oversiktB}. Där ses att sökandet av områden skedde för flera
60-
kapitel samtidigt. Detta då arbetet med att hitta ett område ofta gav flera
61-
områden samtidigt. I figuren syns också att implementationen av domänspecifika
62-
språk och skrivande av lärotext skedde samtidigt. Eftersom de i resultatet är
63-
sammanvävda var det också högst naturligt att även processerna med att skapa dem var sammanvävda.
64-
65-
De tre följande avsnitten beskriver i detalj hur de tre faserna, sökande,
66-
implementation och skrivande, såg ut. Det är värt att minnas att det, som
67-
nämndes ovan, fanns överlapp mellan både faserna och kapitlen.
27+
Läromaterialet består av fem kapitel som vardera behandlar separata områden. Skapandet av dem skedde fristående men de innehöll alla de tre faserna sökande, implementation och skrivande, som såg likartade ut för dem alla. Det fanns dock visst överlapp mellan de fristående processerna. Sökandet gav ofta flera områden samtidigt och implementation och skrivande genomfördes ofta parallellt. För att tydliggöra processerna är de dock beskrivna separat.
6828

6929
\subsection{Sökande efter områden att behandla}\label{sec:valet}
7030

7131
Ett domänspecifikt språk modellerar ett specifikt och avgränsat område. Därför
7232
var det naturligt att söka och tänka i termer av avgränsade områden inom
7333
fysiken. För att rent praktiskt hitta områden att behandla kontaktades Åke
74-
Fäldt, examinator för Fysik för ingenjörer~\cite{tif085}. Dessutom studerades kursens bok (University
34+
Fäldt. Dessutom studerades kursens bok (University
7535
Physics~\cite{UP}) och dess övriga material.
7636

7737
Denna sökandeprocess innefattade inte bara att \textit{hitta} fysikaliska
@@ -115,9 +75,7 @@ \subsubsection*{Studerande av kursbok och kursmaterial}
11575
varje område för att se huruvida det lämpade sig att göra ett domänspecifikt
11676
språk av och hur det skulle kunna se ut. Experimenten visade att enbart vissa
11777
områden, till exempel vektorer, fungerade bra att göra ett domänspecifikt språk
118-
av. Andra områden, till exempel lutande plan, var mindre lämpliga. Förenklat
119-
sagt var enbart områden med tydliga data och operationer lämpade. Detta
120-
diskuteras utförligare i avsnitt~\ref{sec:lampligt}. Det framgick också att det
78+
av. Andra områden, till exempel lutande plan, var mindre lämpliga. Vad som skiljer dem åt är att vektorer har tydliga data och operationer (till exempel skalärprodukt) medan lutande plan har egenskaper (till exempel friktionskoefficienter och vinklar) som är relaterade till varandra med ekvationer. Det här diskuteras utförligare i avsnitt~\ref{sec:lampligt}. Det framgick också att det
12179
blev ett överlapp mellan olika domänspecifika språk trots att områdena var fristående.
12280
Ett exempel var det domänspecifika språk för partikelmekanik som till stor del
12381
liknade de domänspecifika språken för matematisk analys och vektorer.
@@ -131,8 +89,7 @@ \subsubsection*{Studerande av kursbok och kursmaterial}
13189
\subsubsection*{Områden som valdes ut}
13290

13391
När kunskap inhämtats om olika områden kunde ett urval göras. De områden som
134-
identifierades som grundläggande och som hade en väl lämpad struktur (se
135-
avsnitt~\ref{sec:lampligt}) valdes ut. Med detta som grund blev områdena som valdes ut fysikaliska dimensioner, matematisk analys och vektorer. Här följer en kortfattad motivering av valet av dem.
92+
identifierades som grundläggande och som var lämpade (enligt avsnittet innan) valdes ut. Med detta som grund blev områdena som valdes ut fysikaliska dimensioner, matematisk analys och vektorer. Här följer en kortfattad motivering av valet av dem.
13693

13794
\textit{Dimensioner} eftersom det är viktigt för studenter att förstå
13895
hur dimensioner påverkas av algebraiska operationer. Det kan också vara
@@ -182,9 +139,7 @@ \subsection{Implementation av domänspecifika språk för områdena}
182139
kunskap hos läsaren.
183140

184141
Efter att ett domänspecifikt språk implementerats skrevs tester till det. Det
185-
som var intressant att testa var olika lagar som skulle gälla, och eftersom de
186-
domänspecifika språken i läromaterialet modellerade matematik var det matematiska lagar
187-
som skulle gälla. Ett exempel var att vektoraddition skulle vara kommutativ.
142+
som var intressant att testa var huruvida domänens lagar gällde i det domänspecifika språket som modellerade domänen. Till exempel var det för det domänspecifika språket om vektorer aktuellt att testa om vektoraddition var kommutativ, och så vidare.
188143
Testerna gjordes med hjälp av \textit{QuickCheck}~\cite{QC} vilket är ett
189144
testningsverktyg i Haskell som genererar många och slumpmässiga testfall. Att
190145
lagarna gällde för de domänspecifika språken verifierades med andra ord genom
@@ -210,29 +165,27 @@ \subsection{Skriva lärotext}
210165
mellan programkod och förklaringar. För att läromaterialet skulle vara
211166
lättförståeligt var det också viktigt att presentera materialet i den ordning
212167
som en mänsklig läsare, och inte datorn, tyckte var enklast. Avsnitt \ref{sec:lhs} beskriver hur litterat programmering fungerar i allmänhet och ger
213-
en bra bild hur det såg ut även i detta projekt.
168+
en bra bild av hur det såg ut även i detta projekt.
214169

215170
Under skrivandet av lärotexten lades övningar till. Dessa skapades genom att
216171
modifiera befintlig lärotext, istället för att förklara allting uppmanar den
217172
läsaren då och då att göra nästa steg i implementationen själv. När ett kapitel
218173
var avslutat lades dessutom extra övningar till i slutet, dessa övningar var
219174
ofta vidareutvecklingar av det domänspecifika språk som redan implementerats.
220175

221-
Skrivandet av lärotexten till de grundläggande och komposita områden var
176+
Skrivandet av lärotexten till de grundläggande och komposita områdena var
222177
övergripande likadana. Skillnaden låg i balansen mellan Haskell och fysik. För
223178
de grundläggande områdena fokuserade lärotexten mer på Haskell eftersom det var
224179
ett helt nytt domänspecifikt språk som skulle konstrueras. Hur det fungerade var
225-
därför viktigt att förklara. I kontrast står lärotexten för de komposita
226-
områdena, där ett större fokus låg på fysik. För dessa områden visades hur de
180+
därför viktigt att förklara. För de komposita områdena låg däremot ett större fokus på fysik. För dessa områden visades hur de
227181
domänspecifika språken var praktiskt användbara och då förklarades fysiken, för
228182
att sedan visa hur den fysiken kunde representeras i de domänspecifika
229183
språken.
230184

231185
Ett exempel på ovanstående är kapitlet kring det komposita området partikelmekanik. Dess implementation var en sammanslagning av området vektorer och
232-
matematisk analys, där istället för att visa och förklara hur områdena kunde
233-
implementeras i Haskell visade hur det direkt gick att översätta de
186+
matematisk analys där fokus flyttats till att visa hur det direkt gick att översätta de
234187
fysikaliska formlerna som beskriver partiklars rörelse och energier till
235-
Haskell-kod med hjälp av de grundläggande områdena. Beskrivning av relationen arbete-energi (engelska \textit{Work-Energy theorem}) gick då till som i figur \ref{fig:komposit-ex}.
188+
Haskell-kod med hjälp av de grundläggande områdena. Beskrivningen av relationen arbete-energi (engelska \textit{Work-Energy theorem}) visas i figur \ref{fig:komposit-ex}.
236189

237190
\begin{figure}[tph]
238191
\centering
@@ -246,30 +199,30 @@ \subsection{Skriva lärotext}
246199
Det visar dessutom att det går att använda materialet som presenteras tidigare
247200
till att implementera och lösa mer komplexa problem.
248201

249-
\section{Skapande av och publicering på hemsidan}
250-
251-
Läromaterialet kompilerades med hjälp av ett skript och
252-
publicerades på en hemsida. Skriptet anropar
253-
Pandoc för att konvertera från källkod i Literate
254-
Haskell-format till HTML, redo att visas på en hemsida. Pandoc
255-
paketerar även med \textit{MathJax} som använder JavaScript för att
256-
rendera matematiska formler i LaTeX-format på fint och läsbart
257-
vis. Utan stöd för JavaScript skrivs matematik ut som omodifierad
258-
LaTeX-kod, vilket är mer svårläst, men fortfarande tolkningsbart. Det
259-
skrevs även CSS-kod för att modifiera utseendet av
260-
hemsidan för att den skulle bli prydligare och mer lättläst.
261-
262-
Varje källfil betraktades som ett kapitel och publicerades som en
263-
separat undersida. Med hjälp av ett index beskrivet i skriptet
264-
konstruerades navigationselement mellan kapitel på varje undersida
265-
och en innehållsförteckning.
266-
267-
För publicering lades all data producerad av skriptet i en ny git-gren (engelska \textit{git branch}) med namnet \texttt{gh-pages}. Att alla grenar synkroniseras
268-
mot GitHub medför att alla filer på \texttt{gh-pages} grenen
269-
visas som en hemsida med hjälp av \textit{GitHub
270-
Pages}. Publiceringen skedde inte kontinuerligt eller automatiskt,
271-
utan krävde en manuell synkronisering vid varje önskad uppdatering av
272-
hemsidan.
202+
% \section{Skapande av och publicering på hemsidan}
203+
%
204+
% Läromaterialet kompilerades med hjälp av ett skript och
205+
% publicerades på en hemsida. Skriptet anropar
206+
% Pandoc för att konvertera från källkod i Literate
207+
% Haskell-format till HTML, redo att visas på en hemsida. Pandoc
208+
% paketerar även med \textit{MathJax} som använder JavaScript för att
209+
% rendera matematiska formler i LaTeX-format på fint och läsbart
210+
% vis. Utan stöd för JavaScript skrivs matematik ut som omodifierad
211+
% LaTeX-kod, vilket är mer svårläst, men fortfarande tolkningsbart. Det
212+
% skrevs även CSS-kod för att modifiera utseendet av
213+
% hemsidan för att den skulle bli prydligare och mer lättläst.
214+
%
215+
% Varje källfil betraktades som ett kapitel och publicerades som en
216+
% separat undersida. Med hjälp av ett index beskrivet i skriptet
217+
% konstruerades navigationselement mellan kapitel på varje undersida
218+
% och en innehållsförteckning.
219+
%
220+
% För publicering lades all data producerad av skriptet i en ny git-gren (engelska \textit{git branch}) med namnet \texttt{gh-pages}. Att alla grenar synkroniseras
221+
% mot GitHub medför att alla filer på \texttt{gh-pages} grenen
222+
% visas som en hemsida med hjälp av \textit{GitHub
223+
% Pages}. Publiceringen skedde inte kontinuerligt eller automatiskt,
224+
% utan krävde en manuell synkronisering vid varje önskad uppdatering av
225+
% hemsidan.
273226

274227
\section{Utvärdering med testgrupp}
275228

0 commit comments

Comments
 (0)