Skip to content

++ incorporated into https://github.com/JuliaLang/IterativeSolvers.jl ++ Induced Dimension Reduction method IDR(s) for solving general non-symmetric linear equations using a Krylov method, for example ordinary linear equations or Sylvester and Stein equations.

License

Notifications You must be signed in to change notification settings

mschauer/IDRsSolver.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IDRsSolver.jl

The Induced Dimension Reduction method is a family of simple and fast Krylov subspace algorithms for solving large nonsymmetric linear systems. The idea behind the IDR(s) variant is to generate residuals that are in the nested subspaces of shrinking dimension s.

The function idrs() solves a general linear matrix equation

                     0 = C - op(X, args...) 

where op is a linear operator in X, for example

    X -> X + A*X*B (Stein equation)

or

    X -> A*X + X*B (Sylvester equation).

Syntax

    X, h::ConvergenceHistory = idrs_core{T}(op, args, C::T, X0 = zero(C); s = 8, tol = sqrt(eps(anorm(C))), maxiter = length(C)^2)


    The right hand side C must support vecnorm, vecdot, copy!, rand! and axpy! or import and overload
    the abstract functions adot, anorm, arand! and aaxpy! from module IDRsSolver used by the procedure.
    .

Synonyms

    idrs(A, b, ...) = idrs_core((x,A) -> A*x, (A,), b, ...) solves the linear equation equation Ax = b.
    stein(A, B, C, ...) = idrs_core((X,A,B) -> X + A*X*B, (A, B), C, ...) solves the Stein equation.
    syl(A, B, C, ...) = idrs_core((X,A,B) -> A*X + X*B, (A, B), C, ...) solves the Sylvester equation.

Arguments

   s -- dimension reduction number. Normally, a higher s gives faster convergence, 
        but also  makes the method more expensive.
   tol -- tolerance of the method.  
   maxiter -- maximum number of iterations

   x0 -- Initial guess.

Output

    X -- Approximated solution by IDR(s)
    h -- Convergence history
    

    The [`ConvergenceHistory`](https://github.com/JuliaLang/IterativeSolvers.jl/issues/6) type provides information about the iteration history. 
        - `isconverged::Bool`, a flag for whether or not the algorithm is converged.
        - `threshold`, the convergence threshold
        - `residuals::Vector`, the value of the convergence criteria at each iteration        
    
    
    If ||C-op(X)||_F > tol, the function gives a warning.

References

[1] IDR(s): a family of simple and fast algorithms for solving large 
    nonsymmetric linear systems. P. Sonneveld and M. B. van Gijzen
    SIAM J. Sci. Comput. Vol. 31, No. 2, pp. 1035--1062, 2008 
[2] Algorithm 913: An Elegant IDR(s) Variant that Efficiently Exploits 
    Bi-orthogonality Properties. M. B. van Gijzen and P. Sonneveld
    ACM Trans. Math. Software,, Vol. 38, No. 1, pp. 5:1-5:19, 2011
[3] This file is a translation of the following MATLAB implementation:
    http://ta.twi.tudelft.nl/nw/users/gijzen/idrs.m
[4] IDR(s)' webpage http://ta.twi.tudelft.nl/nw/users/gijzen/IDR.html

About

++ incorporated into https://github.com/JuliaLang/IterativeSolvers.jl ++ Induced Dimension Reduction method IDR(s) for solving general non-symmetric linear equations using a Krylov method, for example ordinary linear equations or Sylvester and Stein equations.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages