From: Michael Orlitzky Date: Tue, 4 Feb 2014 20:03:56 +0000 (-0500) Subject: Finish the eigenvectors_symmetric tests. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=3c6f9a8f75456cddf31949a44ed2b5be9bc44a12;p=numerical-analysis.git Finish the eigenvectors_symmetric tests. --- diff --git a/src/Linear/QR.hs b/src/Linear/QR.hs index f9c5e30..b628c12 100644 --- a/src/Linear/QR.hs +++ b/src/Linear/QR.hs @@ -13,7 +13,7 @@ where import qualified Algebra.Ring as Ring ( C ) import qualified Algebra.Algebraic as Algebraic ( C ) import Control.Arrow ( first ) -import Data.Vector.Fixed ( N1, S, ifoldl ) +import Data.Vector.Fixed ( S, ifoldl ) import Data.Vector.Fixed.Cont ( Arity ) import NumericPrelude hiding ( (*) ) @@ -217,7 +217,9 @@ eigenvalues iterations matrix = -- Examples: -- -- >>> import Linear.Matrix ( Col2, Col3, Mat2, Mat3 ) --- >>> import Linear.Matrix ( frobenius_norm, fromList, identity_matrix ) +-- >>> import Linear.Matrix ( column', frobenius_norm, fromList ) +-- >>> import Linear.Matrix ( identity_matrix, vec3d ) +-- >>> import Normed ( Normed(..) ) -- -- >>> let m = identity_matrix :: Mat3 Double -- >>> let (vals, vecs) = eigenvectors_symmetric 100 m @@ -233,11 +235,16 @@ eigenvalues iterations matrix = -- >>> let expected_vals = fromList [[8],[-1],[-1]] :: Col3 Double -- >>> let v0' = vec3d (2, 1, 2) :: Col3 Double -- >>> let v0 = (1 / (norm v0') :: Double) *> v0' --- >>> let v1' = vec3d (1, -2, 0) :: Col3 Double +-- >>> let v1' = vec3d (-1, 2, 0) :: Col3 Double -- >>> let v1 = (1 / (norm v1') :: Double) *> v1' --- >>> let v2' = vec3d (4, 2, 5) :: Col3 Double +-- >>> let v2' = vec3d (-4, -2, 5) :: Col3 Double -- >>> let v2 = (1 / (norm v2') :: Double) *> v2' --- >>> frobenius_norm (vals - expected_vals) +-- >>> frobenius_norm ((column' vecs 0) - v0) < 1e-12 +-- True +-- >>> frobenius_norm ((column' vecs 1) - v1) < 1e-12 +-- True +-- >>> frobenius_norm ((column' vecs 2) - v2) < 1e-12 +-- True -- eigenvectors_symmetric :: forall m a. (Arity m, Algebraic.C a, Eq a) => Int