Skip to content

Commit 739b160

Browse files
author
Oskar Lundström
committed
En kombination av Dim, Vec och Calc
1 parent 77f83f3 commit 739b160

File tree

3 files changed

+811
-7
lines changed

3 files changed

+811
-7
lines changed

Physics/src/Combination/Combination.hs

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ module Combination.Combination
88
import Vector.Vector
99
import Calculus.FunExpr
1010
import Calculus.DifferentialCalc
11-
import Dimensions.Quantity
11+
import Calculus.IntegralCalc
12+
import Dimensions.Quantity2
1213
import Dimensions.TypeLevel
1314
import Prelude hiding (length)
1415

@@ -77,6 +78,68 @@ t7 = t6 /# t4
7778
differentiateWRTtime :: QC d -> QC (d `Div` Time)
7879
differentiateWRTtime qc = fmap simplify $ fmap derive qc /# time
7980

81+
integrateWRTtime :: QC d -> QC (d `Mul` Time)
82+
integrateWRTtime qc = fmap simplify $ fmap integrate qc *# time
83+
84+
-- Calc i Vec i Quan
85+
--------------------
86+
87+
type QVC d = Quantity d (Vector2 FunExpr)
88+
89+
anyVal :: Vector2 FunExpr
90+
anyVal = V2 (Const 1) (Const 1)
91+
92+
lengthQVC = length' anyVal
93+
massQVC = mass' anyVal
94+
timeQVC = time' anyVal
95+
temperatureQVC = temperature' anyVal
96+
currentQVC = current' anyVal
97+
substanceQVC = substance' anyVal
98+
luminosityQVC = luminosity' anyVal
99+
oneQVC = one' anyVal
100+
101+
s1 :: QVC Length
102+
s1 = V2 (5 :+ Id) (2 :* Id) ## lengthQVC
103+
104+
s2 :: QVC Time
105+
s2 = V2 (Id :* Id) (8) ## timeQVC
106+
107+
-- Socker
108+
(###) :: (FunExpr, FunExpr) -> QVC d -> QVC d
109+
(x, y) ### qvc = V2 x y ## qvc
110+
111+
s3 :: QVC Time
112+
s3 = (Id, Sin) ### timeQVC
113+
114+
addQVC :: QVC d -> QVC d -> QVC d
115+
addQVC = quantityAdd' (vzipWith (+))
116+
117+
simplifyQVC :: QVC d -> QVC d
118+
simplifyQVC = fmap (vmap simplify)
119+
120+
scaleQVC :: Quantity d1 FunExpr -> QVC d2 -> QVC (d1 `Mul` d2)
121+
scaleQVC s qvc = simplifyQVC $ quantityMul' (\fe vec -> scale fe vec) s qvc
122+
123+
divQVC :: Quantity d1 FunExpr -> QVC d2 -> QVC (d1 `Div` d2)
124+
divQVC s qvc = simplifyQVC $ quantityDiv' (\fe vec -> scale (1 :/ fe) vec) s qvc
125+
126+
diffQVC :: QVC d -> QVC (d `Div` Time)
127+
diffQVC qvc = simplifyQVC differentiated
128+
where
129+
differentiated = quantityDiv' f (fmap (vmap derive) qvc) timeQVC
130+
f = vzipWith (/)
131+
132+
-- Ett flygplans position av tiden bestäms av nedan
133+
134+
pos :: QVC Length
135+
pos = (Sin :+ Const 8, Id :* Const 3) ### lengthQVC
136+
137+
-- Vad är hastigheten hos ett flygplan som flyger dubbelt så snabbt, som en funktion av tiden?
138+
139+
velDoub :: QVC (Length `Div` Time)
140+
velDoub = scaleQVC (Const 2 # one) (diffQVC pos)
141+
142+
80143

81144

82145

Physics/src/Dimensions/Quantity.lhs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Quantities
2020
> , meter, kilogram, second, ampere, kelvin, mole, candela, unitless
2121
> , (~=)
2222
> , isZero
23-
> , (#), wrap, unwrap
23+
> , (#), (##)
2424
> , (+#), (-#), (*#), (/#)
2525
> , sinq, cosq, asinq, acosq, atanq, expq, logq
2626
> , qfold
@@ -467,11 +467,9 @@ And now the sugar.
467467

468468
\ignore{
469469

470-
> wrap :: v -> Quantity d v -> Quantity d v
471-
> wrap v (ValQuantity d _) = ValQuantity d v
472-
473-
> unwrap :: Quantity d v -> v
474-
> unwrap (ValQuantity _ v) = v
470+
> infixl 3 ##
471+
> (##) :: v -> Quantity d v -> Quantity d v
472+
> v ## (ValQuantity d _) = ValQuantity d v
475473

476474
}
477475

0 commit comments

Comments
 (0)