instance (RealFloat a) => Vector (TwoTuple a) where
-- The standard Euclidean 2-norm. We need RealFloat for the square
-- root.
- norm (TwoTuple x1 y1) = fromRational $ toRational (sqrt(x1^2 + y1^2))
+ norm_2 (TwoTuple x y) = fromRational $ toRational (sqrt(x^2 + y^2))
+
+ -- The infinity norm, i.e. the maximum entry.
+ norm_infty (TwoTuple x y) =
+ fromRational $ max absx absy
+ where
+ absx = abs (toRational x)
+ absy = abs (toRational y)
-- | It's not correct to use Num here, but I really don't want to have
-- to define my own addition and subtraction.
import Data.Number.BigFloat
class (Num a) => Vector a where
- norm :: RealFrac b => a -> b
+ norm_2 :: RealFrac b => a -> b
+ norm_infty :: RealFrac b => a -> b
-- Define instances for common numeric types.
instance Vector Integer where
- norm = fromInteger
+ norm_2 = fromInteger
+ norm_infty = fromInteger
instance Vector Rational where
- norm = fromRational
+ norm_2 = fromRational
+ norm_infty = fromRational
instance Epsilon e => Vector (BigFloat e) where
- norm = fromRational . toRational
+ norm_2 = fromRational . toRational
+ norm_infty = fromRational . toRational
instance Vector Double where
- norm = fromRational . toRational
+ norm_2 = fromRational . toRational
+ norm_infty = fromRational . toRational