Skip to content

Commit ec2cd2a

Browse files
committed
2 parents b99a9b7 + 1633866 commit ec2cd2a

File tree

9 files changed

+67
-91
lines changed

9 files changed

+67
-91
lines changed
Lines changed: 30 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,75 @@
1-
Improvmenet:
2-
notation
3-
formulas
4-
tests
5-
english
6-
71
Box on an incline
82
=================
93

104
> import Vector.Vector
115

12-
All vectors are in newton.
6+
All forces are represented in the form of a vector in this example.
137

148
![Incline](incline.png){.float-img-left}
159

1610
Notation:
17-
fg = gravitational accelleration
11+
$$ fg = gravitational\ accelleration $$
1812

19-
m = mass of box
13+
$$ m = mass\ of\ box $$
2014

2115
> fg = V2 0 (-10)
2216
> m = 2
2317

24-
> unit_normal :: Double -> Vector2 Double
25-
> unit_normal a = V2 (cos a) (sin a)
18+
A unit vector that we get from a degree $a$.
19+
20+
> unit_normal :: Angle -> Vector2 Double
21+
> unit_normal angle = V2 (cos angle) (sin angle)
2622

27-
Force against the incline from the box:
23+
Force against the incline $F_{\perp}$ from the box (negative in y-axis).
2824

2925
> f_l_ :: Vector2 Double -> Angle -> Vector2 Double
30-
> f_l_ fa a = scale ((magnitude fa) * (cos a)) (unit_normal (a-(pi/2)))
26+
> f_l_ fa angle = scale ((magnitude fa) * (cos angle)) (unit_normal (angle-(pi/2)))
3127

32-
The normal against the incline:
28+
The normal force $F_{n} = - F_{\perp}$ supporting the box from the incline (positive in y-axis):
3329

3430
> fn :: Vector2 Double -> Angle -> Vector2 Double
35-
> fn fa a = negate (f_l_ fa a)
36-
37-
Friction free incline:
31+
> fn fa angle = negate (f_l_ fa angle)
3832

39-
Resulting force:
33+
The resulting force is then the normal force from the incline plus the gravitational force.
34+
$$ F_{r} = F_{n} + F_{g} $$
4035

4136
> fr :: Vector2 Double -> Angle -> Vector2 Double
42-
> fr fa a = (fn fa a) + fa
37+
> fr fa angle = (fn fa angle) + fa
4338

4439
With friction:
4540

4641
$$ F_{friction} = \mu * F_{normal} \iff \mu = \frac{F_{friction}}{F_{normal}} $$
4742

48-
> us = 0.5
49-
> uk = 0.4
50-
51-
Add image how friction depends if there is movement.
52-
53-
![Friction](friction.png){.float-img-left}
54-
55-
> type FricConst = Double
43+
There are two different kinds of friction. One where the object is standing still on the surface, and the other where the object is sliding on the surface. In the case where the object is standing still, it remains still until the force applied on the object is greater than the maximum possible friction between the object and the surface. Once that level is surpassed, the object starts to slide.
5644

57-
Friction:
45+
When the object is sliding the maximum friction between the surface and the object is slightly less, as illustrated in the figure below.
5846

59-
friks = Fn * us, us = friction static
47+
![](friction.png){.float-img-left}
6048

61-
frikk = Fn * uk, uk = friction kinetic
49+
$$ F_{static\ friction} = \mu_{static} \cdot F_{normal} $$
50+
$$ F_{kinetic\ friction} = \mu_{kinetic} \cdot F_{normal} $$
6251

52+
We have the normal force against the incline and only need example constants.
6353

64-
We have the normal force and only needs the constants.
65-
66-
The current speed does not affect the friction.
67-
68-
> motscalar :: FricConst -> Vector2 Double -> Scalar
69-
> motscalar u f = u * (magnitude f)
54+
> type FricConst = Double
55+
> us = 0.5
56+
> uk = 0.4
7057

7158
Från en rörelse eller vekt, fixa komplementet
7259

73-
74-
> enh_vekt :: Vector2 Double -> Vector2 Double
75-
> enh_vekt v | magnitude v == 0 = (V2 0 0)
60+
> unit_vec :: Vector2 Double -> Vector2 Double
61+
> unit_vec v | magnitude v == 0 = (V2 0 0)
7662
> | otherwise = scale (1 / (magnitude v)) v
77-
>
78-
>
63+
7964
> motkrafts :: FricConst -> Scalar -> Vector2 Double -> Vector2 Double
80-
> motkrafts u s v = scale (u * s) (negate (enh_vekt v))
81-
>
65+
> motkrafts u s v = scale (u * s) (negate (unit_vec v))
66+
8267
> motkraftv :: FricConst -> Vector2 Double -> Vector2 Double -> Vector2 Double
83-
> motkraftv u n v = scale (u * (magnitude n)) (negate (enh_vekt v))
68+
> motkraftv u normal v = scale (u * (magnitude normal)) (negate (unit_vec v))
8469

85-
Now we just need to sum the force vectors:
70+
Now we just need to sum the force vectors into $F_{r}$:
8671

8772
> fru :: Vector2 Double -> Angle -> FricConst -> Vector2 Double
8873
> fru fa a u = (fr fa a) + (motkraftv u (fn fa a) (fr fa a))
89-
>
90-
> fru' :: Vector2 Double -> Angle -> FricConst -> Vector2 Double
91-
> fru' fa a u = (motkraftv u (fn fa a) (fr fa a))
9274

9375

Physics/src/Examples/Teeter.lhs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Exam excercise 3, 2017-01-13
77
> import Prelude hiding (length)
88

99

10-
Two boxes, m1 and m2, rests on a beam in balance.
10+
Two boxes, $m_{1}$ and $m_{2}$, rests on a beam in balance.
1111

1212
Known values:
1313

@@ -19,7 +19,7 @@ Known values:
1919
> two = 2.0 # one
2020
> g = 9.0 # acceleration
2121

22-
![Teeter](teeter.png){.float-img-left}
22+
![](teeter.png){.float-img-left}
2323

2424
Direct implication:
2525

@@ -39,9 +39,9 @@ $$ \tau = distance\ from\ turning\ point \cdot mass \cdot gravitation $$
3939

4040
> m1_torq = m1 *# (g *# beam_left_L)
4141

42-
To get the beams torque on one side, we need to divide by 2 because the beam's torque is spread out linearly (the density of the beam is equal everywhere), which means the left parts mass centrum is \emph{half the distance} of the left parts total length.
42+
To get the beams torque on one side, we need to divide by 2 because the beam's torque is spread out linearly (the density of the beam is equal everywhere), which means the left parts mass centre is $half\ the\ distance$ of the left parts total length.
4343

44-
$$ beamL_{\tau} = beamL_{M} \cdot gravity \cdot \frac{distance}{2} $$
44+
$$ beamL_{\tau} = beamL_{M} \cdot gravity \cdot \frac{beam\ left\ length}{2} $$
4545

4646
where
4747

@@ -65,16 +65,17 @@ $$ m1_{\tau} + beamL_{\tau} = m2_{\tau} + beamR_{\tau} $$
6565

6666
$$ m1_{\tau} + beamL_{\tau} - beamR_{\tau} = m2_{\tau} $$
6767

68-
$$ \frac{m1_{\tau} + beamL_{\tau} - beamR_{\tau}}{m2} = x $$
68+
$$ the\ distance\ x = \frac{m2_{\tau}}{m2 \cdot gravitation} $$
6969

7070
Our solution:
7171

72-
> x = (m1_torq +# beamL_torq -# beamR_torq) /# m2
72+
> x = (m1_torq +# beamL_torq -# beamR_torq) /# (m2 *# g)
7373

7474
Security check:
7575

76-
> m2_torq = m2 *# x
76+
> m2_torq = (m2 *# g) *# x
7777

7878
> left_side_torque = m1_torq +# beamL_torq
7979
> right_side_torque = m2_torq +# beamR_torq
8080

81+
We can control that both sides total torque are equal, and that the dimensions of $x$ is a length.

Physics/src/Examples/friction.png

7.09 KB
Loading

Rapport/include/Diskussion.tex

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

22
\chapter{Diskussion}\label{cha:disk}
3-
\textbf{Nånstans}
4-
Implementationen kan kompileras och testas och ska då visa på att
5-
implementationerna av de grundläggande områdena är både rigorösa och korrekta.
6-
Det visar dessutom att det går att använda materialet som presenteras tidigare
7-
till att implementera och lösa mer komplexa problem.
83

94
I detta kapitel diskuteras projektets genomförande, resultat,
105
vidareutvecklingsmöjligheter och etiska aspekter.
@@ -26,7 +21,7 @@ \section{Genomförandediskussion}
2621

2722
Under projektets genomförande har det gjorts flera val av teorier och metoder att använda. Självklart behöver inte dessa val vi gjorde vara de bästa. Därför kommer vi här att kritisera dem och föreslå andra möjligheter. Närmare bestämt kommer mötet med testgruppen, urvalet och Literate Haskell att diskuteras.
2823

29-
Det sätt återkopplingen gjordes under projektet kan kritiseras på flera sätt. För det första bestod testgruppen av enbart tre personer. För det andra hölls mötet under en ytterst kort tid, ungefär en timme. Mötet hade behövt vara längre för att låta testgruppen i lugn och ro arbeta igenom ett par kapitel, inklusive att följa med i programmeringen som gjordes i läromaterialet. För det tredje var vi inte tydliga med målet med återkopplingen, nämligen om de tyckte det var meningsfullt att lära ut fysik med hjälp av domänspecifika språk. Det gjorde att de heller inte kunda tänka på dessa frågor. Med tanke på dessa tre brister i återkopplingens genomförande är alla slutsatser dragna med den som stöd ytterst osäkra.
24+
Det sätt återkopplingen gjordes under projektet kan kritiseras på flera sätt. För det första bestod testgruppen av enbart tre personer. För det andra hölls mötet under en ytterst kort tid, ungefär en timme. Mötet hade behövt vara längre för att låta testgruppen i lugn och ro arbeta igenom ett par kapitel, inklusive att följa med i programmeringen som gjordes i läromaterialet. För det tredje var vi inte tydliga med målet med återkopplingen, nämligen om de tyckte det var meningsfullt att lära ut fysik med hjälp av domänspecifika språk. Det gjorde att de heller inte kunde tänka på dessa frågor. Med tanke på dessa tre brister i återkopplingens genomförande är alla slutsatser dragna med den som stöd ytterst osäkra.
3025

3126
Det går även att kritisera hur urvalet av områden gick till under projektet. Dels kan det ha lett till att enbart två domänspecifika språk för fysik implementerades (dimensioner och partikelmekanik). Dels skedde urvalet ur implementatörens perspektiv (det vill säga vårt) och inte ur användarens perspektiv (studenten som ska nyttja läromaterialet). Med det menar vi att områden valdes utifrån hur det implementationsmässigt hängde ihop, till exempel att matematisk analys är grunden till flera tillämpningar. Istället hade områden kunnat väljas utifrån de fysikaliska problem studenter ska lösa i Fysik för ingenjörer, till exempel block och talja eller momentjämvikt, och utifrån det utforma domänspecifika språk.
3227

@@ -47,8 +42,6 @@ \section{Resultatdiskussion}\label{sec:res_disk}
4742
övergå till en mer generell diskussion kring kombinationen av domänspecifika
4843
språk och fysik.
4944

50-
\textbf{Skriv om}
51-
5245
I projektets mål och avgränsningar stod det att vi skulle börja med klassisk
5346
mekanik, för att i mån av tid även behandla termodynamik och vågrörelselära. I avsnitt~\ref{sec:res_laromaterial} nämns att de tre grundläggande
5447
områdena dimensioner, matematisk analys och vektorer är färdiga, samt de
@@ -87,7 +80,7 @@ \section{Resultatdiskussion}\label{sec:res_disk}
8780
det finns en pedagogisk nytta i att kombinera de två. Diskussionen är till
8881
största del baserad på våra erfarenheter efter att ha implementerat ett flertal
8982
domänspecifika språk relaterade till fysik, men de är även baserade på
90-
uppfattningar från testgruppen och fysikläraren.
83+
uppfattningar från testgruppen och Fäldt.
9184

9285

9386
\subsection{Om läromaterialets fokus på matematik och Haskell snarare än
@@ -143,7 +136,7 @@ \subsection{Om läromaterialets fokus på matematik och Haskell snarare än
143136

144137
\subsection{Lämpliga områden för domänspecifika språk}\label{sec:lampligt}
145138

146-
När domänspecifika språk implementerades visade det sig att vissa områden lämpade sig bättre än andra. Exempel på ett lämpligt och et mindre lämpligt område är vektorer respektive lutande plan\footnote{Läromaterialet behandlar fortfarande lutande plan, men inte som ett \textit{eget} domänspecifikt språk. Istället \textit{tillämpas} det domänspecifika språket för vektorer.}. Vad som skiljer dem åt är enligt oss att lämpliga områden består av tydliga \textit{data och operationer} medan mindre lämpliga områden består av \textit{egenskaper och samband}.
139+
När domänspecifika språk implementerades visade det sig att vissa områden lämpade sig bättre än andra. Exempel på ett lämpligt och ett mindre lämpligt område är vektorer respektive lutande plan\footnote{Läromaterialet behandlar fortfarande lutande plan, men inte som ett \textit{eget} domänspecifikt språk. Istället \textit{tillämpas} det domänspecifika språket för vektorer.}. Vad som skiljer dem åt är enligt oss att lämpliga områden består av tydliga \textit{data och operationer} medan mindre lämpliga områden består av \textit{egenskaper och samband}.
147140

148141
Inom området vektorer är vektorer data och till exempel vektoraddition en operation. I matematik defineras (en tvådimensionell) vektor som
149142
\begin{align*}
@@ -184,7 +177,7 @@ \subsection{Domänspecifika språk, fysik och pedagogiska aspekter}\label{sec:ba
184177

185178
En del av projektets mål är att diskutera huruvida det finns en pedagogisk nytta i att kombinera fysik och domänspecifika språk. Denna fråga diskuteras nedan.
186179

187-
I samband med fysik finns några fördelar med att integrera domänspecifika språk. Domänspecifika språk kan betraktas som ``tools for thinking''\footnote{Uttryckt i Patrik Janssons egna ord, föreläsare i kursen DSLsofMath.} och ger ett nytt perspektiv på fysik och ger den \textit{struktur}. Dimensioner är ett exempel på detta, se avsnitt~\ref{sec:res_dim}. Där konstateras att en godtycklig dimension kan skrivas som de sju basdimensionerna med tillhörande exponenter, vilket kanske inte är så man brukar se på dimensioner, men som ger dem en väldefinierad struktur. Domänspecifika språk bidrar även med \textit{rigorösitet} till fysik. Enbart de definierade operationerna går att använda, vilket leder till att genvägar i fysikaliska beräkningar inte går att göra på det sätt som är möjligt vid räkning med papper och penna. Detta tyckte även Åke Fäldt var en bra aspekt, se avsnitt~\ref{sec:res_test}. Med hjälp av domänspecifika språk är det dessutom möjlighet att väcka \textit{intresse} för fysik. En student som inte är intresserad av fysik kanske skulle bli det om fysik presenteras i samband med Haskell och domänspecifika språk, där paralleller mellan dem visas. Denna tanke stöds även av testgruppen\footnote{Eftersom mötet med testgruppen var väldigt kort är det dock svårt att dra några säkra slutsatser.}, se avsnitt~\ref{sec:res_test}
180+
I samband med fysik finns det några fördelar med att integrera domänspecifika språk. Domänspecifika språk kan betraktas som ``tools for thinking''\footnote{Uttryckt i Patrik Janssons egna ord, föreläsare i kursen DSLsofMath.} och ger ett nytt perspektiv på fysik och ger den \textit{struktur}. Dimensioner är ett exempel på detta, se avsnitt~\ref{sec:res_dim}. Där konstateras att en godtycklig dimension kan skrivas som de sju basdimensionerna med tillhörande exponenter, vilket kanske inte är så man brukar se på dimensioner, men som ger dem en väldefinierad struktur. Domänspecifika språk bidrar även med \textit{rigorösitet} till fysik. Enbart de definierade operationerna går att använda, vilket leder till att genvägar i fysikaliska beräkningar inte går att göra på det sätt som är möjligt vid räkning med papper och penna. Detta tyckte även Åke Fäldt var en bra aspekt, se avsnitt~\ref{sec:res_test}. Med hjälp av domänspecifika språk är det dessutom möjlighet att väcka \textit{intresse} för fysik. En student som inte är intresserad av fysik kanske skulle bli det om fysik presenteras i samband med Haskell och domänspecifika språk, där paralleller mellan dem visas. Denna tanke stöds även av testgruppen\footnote{Eftersom mötet med testgruppen var väldigt kort är det dock svårt att dra några säkra slutsatser.}, se avsnitt~\ref{sec:res_test}
188181

189182
År 2016 genomfördes ett kandidatarbete på Chalmers liknande
190183
detta~\cite{kandidat2016}. Det kandidatarbetet resulterade också i ett

Rapport/include/Introduktion.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ \section{Projektets mål}
100100
enklare. Detta liknar premissen bakom kursen DSLsofMath och kandidatarbetet
101101
från 2016, som istället för fysik behandlade matematik respektive signallära.
102102

103-
Mer konkret ska ovanstående målet uppnås genom att skapa ett läromaterial.
103+
Mer konkret ska det ovanstående målet uppnås genom att skapa ett läromaterial.
104104
Läromaterialet ska bestå av
105105
domänspecifika språk som modellerar fysik, skrivna
106106
%programkod skriven
@@ -125,7 +125,7 @@ \section{Avgränsningar}\label{sec:avgransningar}
125125
Kursen behandlar grunderna inom klassisk mekanik, termodynamik och
126126
vågrörelselära samt en stor mängd tillämpad matematik, exempelvis
127127
differentialkalkyl. I första hand behandlas mekaniken, för att sedan i mån
128-
av tid även behandla termodynamik och vågrörelselära. Fokuset läggs även
128+
av tid även behandla termodynamik och vågrörelselära eftersom det är i den ordningen kursen behandlar områdena. Fokuset läggs även
129129
på de områden datastudenter haft svårt för.
130130

131131
För att pröva den pedagogiska nyttan kommer enbart en informell testning

Rapport/include/Resultat.tex

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -215,28 +215,28 @@ \subsection{Matematisk analys}
215215
I läromaterialet analyseras derivering utförligt med gränsvärden, kvoter och approximativa metoder. Dessutom motiveras och implementeras symbolisk derivering. Den görs med en funktion \texttt{derive} som har ett fall för vardera av konstruktorerna i \texttt{FunExpr}. Några av fallen är
216216

217217
\begin{lstlisting}
218-
derive (f :* g) = derive f :* g :+ f :* derive g
219-
derive (f :+ g) = derive f :+ derive g
220-
derive Exp = Exp
218+
derive (f :* g) = derive f :* g :+ f :* derive g
219+
derive (f :+ g) = derive f :+ derive g
220+
derive Exp = Exp
221221
\end{lstlisting}
222222

223223
\subsection{Vektorer}
224224

225225
Kapitlet om vektorer inleds med en genomgång av vektorer och operationer på dem parallellt med att en första implementation till dem skrivs. Implementation ser ut som följer
226226

227227
\begin{lstlisting}
228-
data Vector2 n = V2 n n
229-
type Scalar = Double
230-
type VectorTwo = Vector2 Scalar
231-
232-
magnitude :: VectorTwo -> Scalar
233-
magnitude (V2 x y) = sqrt (x^2 + y^2)
234-
235-
add :: VectorTwo -> VectorTwo -> VectorTwo
236-
add (V2 x1 y1) (V2 x2 y2) = V2 (x1 + x2) (y1 + y2)
237-
238-
dotProd :: VectorTwo -> VectorTwo -> Scalar
239-
dotProd (V2 ax ay) (V2 bx by) = ax * bx + ay * by
228+
data Vector2 n = V2 n n
229+
type Scalar = Double
230+
type VectorTwo = Vector2 Scalar
231+
232+
magnitude :: VectorTwo -> Scalar
233+
magnitude (V2 x y) = sqrt (x^2 + y^2)
234+
235+
add :: VectorTwo -> VectorTwo -> VectorTwo
236+
add (V2 x1 y1) (V2 x2 y2) = V2 (x1 + x2) (y1 + y2)
237+
238+
dotProd :: VectorTwo -> VectorTwo -> Scalar
239+
dotProd (V2 ax ay) (V2 bx by) = ax * bx + ay * by
240240
\end{lstlisting}
241241

242242
Eftersom vektorer i tre dimensioner ser snarlik ut leder det till väldigt mycket duplicerad kod. En andra implementation görs därför som är mer generell. Grunden är den nedanstående typklassen
@@ -252,14 +252,14 @@ \subsection{Vektorer}
252252
som innehåller de tre funktioner som behövs för att genomföra vektoroperationerna \texttt{magnitude}, \texttt{add} och \texttt{dotProd}. De kan nämligen skrivas om enbart med hjälp av de funktioner som finns i typklassen \texttt{Vector} på följande sätt
253253

254254
\begin{lstlisting}
255-
magnitude :: (Floating n, Vector vec) => vec n -> n
256-
magnitude = sqrt . vfold (+) . vmap (**2)
255+
magnitude :: (Floating n, Vector vec) => vec n -> n
256+
magnitude = sqrt . vfold (+) . vmap (**2)
257257

258-
add :: (Num n, Vector vec) => vec n -> vec n -> vec n
259-
add = vzipWith (+)
258+
add :: (Num n, Vector vec) => vec n -> vec n -> vec n
259+
add = vzipWith (+)
260260

261-
dotProd :: (Num n, Vector vec) => vec n -> vec n -> n
262-
dotProd v1 v2 = vfold (+) $ vzipWith (*) v1 v2
261+
dotProd :: (Num n, Vector vec) => vec n -> vec n -> n
262+
dotProd v1 v2 = vfold (+) $ vzipWith (*) v1 v2
263263
\end{lstlisting}
264264

265265
Allt som behöver göras för vardera datatyp för vektorer av olika längd är därmed att göra den en \texttt{Vector}-instans. Så här ser det ut för \texttt{Vector2}

Rapport/include/frontmatter/Ordlista.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ \chapter*{Ordlista}
88

99
\textbf{DSL} Förkortning av \textit{Domain Specific Language}, engelska för domänspecifikt språk.
1010

11-
\textbf{Fysikläraren} Åke Fäldt.
11+
\textbf{DSLsofMath} Förkortning av \textit{Domain Specific Languages of Mathematics}, vilket är en valbar kurs i årskurs 2 på Chalmers tekniska högskola.
1212

1313
\textbf{Fysik för ingenjörer} En fysikkurs som är obligatorisk för studenter på civilingenjörsprogrammet Datateknik på Chalmers. Den ges i årskurs 2 och innehåller grunderna i klassisk mekanik, termodynamik och vågrörelselära.
1414

Rapport/include/settings/Settings.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
\lstset{breaklines=true}
6262
\lstset{basicstyle=\ttfamily}
6363
\lstset{commentstyle=\ttfamily}
64-
\lstset{deletekeywords={length}}
64+
\lstset{deletekeywords={length,magnitude}}
6565
\lstset{frame=none}
6666
\lstset{belowskip=-0.5\baselineskip}
6767
\lstset{xleftmargin=.25in}

0 commit comments

Comments
 (0)