Code Monkey home page Code Monkey logo

linearalgebra's Introduction

LinearAlgebra

Basic linear algebra routines and classes optimized for ease of use

  • Matrices and Vectors
  • Sparse Matrices and Vectors
  • Get a basis for a vector space via QR (Gram-Schmidt, Householder, Givens, Randomized method)
  • Compute matrix decomposition (LU, ILU, SVD, Cholesky, QR)
  • Perform eigenvalue decomposition (Lanczos, Arnoldi, QR Algorithm)
  • Solve linear systems:
    • Direct Methods: Forward/Back substitution, Diagonal solve, Tridiagonal solve, Unitary solve
    • Iterative Methods: Jacobi, Gauss-Seidel, SOR, Steepest Descent, CG, CR, BiCG, BiCR, BiCGSTAB, GMRES(k), AMG
    • Preconditioners: Jacobi, Gauss-Seidel, Symmetric Gauss-Seidel, SOR, SSOR, Incomplete Cholesky, Incomplete LU, AMG

linearalgebra's People

Contributors

pederson avatar

Watchers

 avatar  avatar

linearalgebra's Issues

Random matrix generation slow

slow for matrix sizes above ~ 1000x1000.... a better idea would be to randomly select (i,j) values according to the fill ratio, rather than iterating and rejecting a ton of values.

GMRES, ILU, IC

gmres, incomplete LU, and incomplete cholesky are not working

Matrix requirements

Come up with set of requirements... Do we really care about saving memory when assigning a matrix to a submatrix? possibly yes for householder algorithm. But it could cause problems upon deletion of the larger matrix

Transposed vector assignment

When assigning a row vector, it gets changed to a column vector... something in the assignment operator or a rowvector*Matrix product

Vector Multifunctor type safety

Need to have strong type safety with good compile-time failure messages especially for the vector container functor/multifunctor because these rely on preprocessor macros defined in Macros.hpp

error messages

often, an error is thrown as char*, rather than printed to screen. This doesnt give enough info about the error to the user

Abstract type issues

Need to define vector= matrix_vector multiplication in the abstract type (also possibly transpose matrix_vector). The problem is that this requires that Vector_Vector multiplication be define. But in general, Vector_Vector returns a matrix. So, defining Vector = Vector*Vector is wrong in general. How can I get around this? (Can I define implicit conversion from 1x1 matrix to double?)

SparseMatrix transpose/swap

transposing sparse matrix has an issue . The transpose issue is originating from the swap operation (I think it's related to the iterators in m_row_ptr)

headers only

move all functions residing in cpp file to the header file. More easily portable that way

const Matrix_Proxy

cannot make a const Matrix_Proxy in the current implementation because a parent matrix is a data member. Need to change this so that the data member isn't a parent matrix, but rather a pointer to data with rowstride and columnstride info.

SparseMatrix assignment

does weird things when assigning a sparsematrix to an empty sparsematrix stub...
for example:

SparseMatrix D;
D = spdiag(diag(A));

Implement Proxy Paradigm

Use the proxy paradigm and make a Matrix_Impl class that stores the actual matrix data. Then the Matrix class can decide how to implement submatrix assignment, transpose, etc...

VectorStack with rvalue

should be able to do something like this:
make_vector_stack(create_vector_1(), create_vector_2(), ...)

so that the arguments to make_vector_stack are rvalues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.