+-- >>> let r = cholesky m1
+-- >>> frobenius_norm ((transpose r)*r - m1) < 1e-10
+-- True
+-- >>> is_upper_triangular r
+-- True
+--
+-- >>> import Naturals ( N7 )
+-- >>> let k1 = [6, -3, 0, 0, 0, 0, 0] :: [Double]
+-- >>> let k2 = [-3, 10.5, -7.5, 0, 0, 0, 0] :: [Double]
+-- >>> let k3 = [0, -7.5, 12.5, 0, 0, 0, 0] :: [Double]
+-- >>> let k4 = [0, 0, 0, 6, 0, 0, 0] :: [Double]
+-- >>> let k5 = [0, 0, 0, 0, 6, 0, 0] :: [Double]
+-- >>> let k6 = [0, 0, 0, 0, 0, 6, 0] :: [Double]
+-- >>> let k7 = [0, 0, 0, 0, 0, 0, 15] :: [Double]
+-- >>> let big_K = fromList [k1,k2,k3,k4,k5,k6,k7] :: Mat N7 N7 Double
+--
+-- >>> let e1 = [2.449489742783178,0,0,0,0,0,0] :: [Double]
+-- >>> let e2 = [-1.224744871391589,3,0,0,0,0,0] :: [Double]
+-- >>> let e3 = [0,-5/2,5/2,0,0,0,0] :: [Double]
+-- >>> let e4 = [0,0,0,2.449489742783178,0,0,0] :: [Double]
+-- >>> let e5 = [0,0,0,0,2.449489742783178,0,0] :: [Double]
+-- >>> let e6 = [0,0,0,0,0,2.449489742783178,0] :: [Double]
+-- >>> let e7 = [0,0,0,0,0,0,3.872983346207417] :: [Double]
+-- >>> let expected = fromList [e1,e2,e3,e4,e5,e6,e7] :: Mat N7 N7 Double
+--
+-- >>> let r = cholesky big_K
+-- >>> frobenius_norm (r - (transpose expected)) < 1e-12
+-- True