You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Rapport/include/Resultat.tex
+50-7Lines changed: 50 additions & 7 deletions
Original file line number
Diff line number
Diff line change
@@ -179,8 +179,6 @@ \subsection{Dimensioner}
179
179
180
180
\subsection{Matematisk analys}
181
181
182
-
\begin{binge}
183
-
184
182
I kapitlet om matematisk analys skapas en syntax för funktionsuttryck och symboliskt derivering och integrering implementeras. Dessutom analyseras syntax och semantik hos uttryck som dyker upp inom matematisk analys, till exempel $\Delta$-operatorn.
Vektorer implementerades på två olika sätt. Det första följde definitionen i
232
-
kurboken och implementerade vektorer i två dimensioner med en typ vars
233
-
konstruktor tog två argument.
227
+
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
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
245
+
246
+
\begin{lstlisting}
247
+
class Vector vector where
248
+
vmap :: (n -> n) -> vector n -> vector n
249
+
vzipWith :: (n -> n -> n) -> vector n -> vector n
250
+
-> vector n
251
+
vfold :: (n -> n -> n) -> vector n -> n
252
+
\end{lstlisting}
253
+
254
+
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
255
+
256
+
\begin{lstlisting}
257
+
magnitude :: (Floating n, Vector vec) => vec n -> n
258
+
magnitude = sqrt . vfold (+) . vmap (**2)
259
+
260
+
add :: (Num n, Vector vec) => vec n -> vec n -> vec n
261
+
add = vzipWith (+)
262
+
263
+
dotProd :: (Num n, Vector vec) => vec n -> vec n -> n
264
+
dotProd v1 v2 = vfold (+) $ vzipWith (*) v1 v2
265
+
\end{lstlisting}
266
+
267
+
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}
268
+
269
+
\begin{lstlisting}
270
+
instance Vector Vector2 where
271
+
vmap f (V2 x y) = V2 (f x) (f y)
272
+
vzipWith f (V2 x y) (V2 x' y') = V2 (f x x') (f y y')
273
+
vfold f (V2 x y) = f x y
274
+
\end{lstlisting}
275
+
276
+
Resterande del av vektor-kapitlet behandlar kryssprodukt, vektorlagar och tester av dem.
0 commit comments