@@ -8,7 +8,8 @@ module Combination.Combination
88import Vector.Vector
99import Calculus.FunExpr
1010import Calculus.DifferentialCalc
11- import Dimensions.Quantity
11+ import Calculus.IntegralCalc
12+ import Dimensions.Quantity2
1213import Dimensions.TypeLevel
1314import Prelude hiding (length )
1415
@@ -77,6 +78,68 @@ t7 = t6 /# t4
7778differentiateWRTtime :: QC d -> QC (d `Div ` Time )
7879differentiateWRTtime 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
0 commit comments