X-Git-Url: http://gitweb.michael.orlitzky.com/?p=numerical-analysis.git;a=blobdiff_plain;f=src%2FLinear%2FIteration.hs;h=06d30a802aa55717b6a9ec45b42c69a8b8f8b473;hp=7daf3b69b5f66c536d1a2567b7896fe54c972c57;hb=ae914d13235a4582077a5cb2b1edd630d9c6ad62;hpb=6b6bae4206bab66823617e2ba77cdf3e8d3fb752 diff --git a/src/Linear/Iteration.hs b/src/Linear/Iteration.hs index 7daf3b6..06d30a8 100644 --- a/src/Linear/Iteration.hs +++ b/src/Linear/Iteration.hs @@ -1,24 +1,42 @@ +{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} -- | Classical iterative methods to solve the system Ax = b. -module Linear.Iteration +module Linear.Iteration ( + gauss_seidel_iteration, + gauss_seidel_iterations, + gauss_seidel_method, + jacobi_iteration, + jacobi_iterations, + jacobi_method, + rayleigh_quotient, + sor_iteration, + sor_iterations, + sor_method ) where -import Data.List (find) -import Data.Maybe (fromJust) -import Data.Vector.Fixed (Arity, N1, S) -import NumericPrelude hiding ((*)) -import qualified Algebra.Algebraic as Algebraic -import qualified Algebra.Field as Field -import qualified Algebra.RealField as RealField -import qualified Algebra.ToRational as ToRational -import qualified Prelude as P +import Data.List ( find ) +import Data.Maybe ( fromJust ) +import Data.Vector.Fixed ( Arity, N1, S ) +import NumericPrelude hiding ( (*) ) +import qualified Algebra.Algebraic as Algebraic ( C ) +import qualified Algebra.Field as Field ( C ) +import qualified Algebra.RealField as RealField ( C ) +import qualified Algebra.ToRational as ToRational ( C ) + +import Linear.Matrix ( + Mat(..), + (!!!), + (*), + diagonal_part, + dot, + lt_part_strict, + transpose ) +import Linear.System ( forward_substitute ) +import Normed ( Normed(..) ) -import Linear.Matrix -import Linear.System -import Normed -- | A generalized implementation for Jacobi, Gauss-Seidel, etc. All -- that we really need to know is how to construct the matrix M, so we @@ -97,6 +115,8 @@ gauss_seidel_iterations matrix b = -- -- Examples: -- +-- >>> import Linear.Matrix ( Mat2, fromList, vec2d ) +-- -- >>> let m = fromList [[4,2],[2,2]] :: Mat2 Double -- >>> let x0 = vec2d (0, 0::Double) -- >>> let b = vec2d (1, 1::Double) @@ -131,6 +151,8 @@ jacobi_iterations matrix b = -- -- Examples: -- +-- >>> import Linear.Matrix ( Mat2, fromList, vec2d ) +-- -- >>> let m = fromList [[4,2],[2,2]] :: Mat2 Double -- >>> let x0 = vec2d (0, 0::Double) -- >>> let b = vec2d (1, 1::Double) @@ -160,6 +182,8 @@ jacobi_method = -- -- Examples: -- +-- >>> import Linear.Matrix ( Mat2, fromList, vec2d ) +-- -- >>> let m = fromList [[4,2],[2,2]] :: Mat2 Double -- >>> let x0 = vec2d (0, 0::Double) -- >>> let b = vec2d (1, 1::Double) @@ -190,6 +214,8 @@ gauss_seidel_method = -- -- Examples: -- +-- >>> import Linear.Matrix ( Mat2, fromList, vec2d ) +-- -- >>> let m = fromList [[4,2],[2,2]] :: Mat2 Double -- >>> let x0 = vec2d (0, 0::Double) -- >>> let b = vec2d (1, 1::Double) @@ -268,6 +294,8 @@ classical_method iterations_function matrix b x0 epsilon = -- -- Examples: -- +-- >>> import Linear.Matrix ( Mat2, fromList, vec2d ) +-- -- >>> let m = fromList [[3,1],[1,2]] :: Mat2 Rational -- >>> let v = vec2d (1, 1::Rational) -- >>> rayleigh_quotient m v