nalgebra-sparse-linalg
High-performance sparse linear algebra algorithms for Rust - Iterative solvers, matrix decompositions, and numerical methods for large-scale sparse matrices using nalgebra_sparse.
Overview
nalgebra-sparse-linalg provides efficient numerical algorithms for sparse linear algebra computations in Rust. Built on top of nalgebra_sparse, this library offers:
- Fast iterative solvers for large sparse linear systems
- Matrix decompositions including truncated SVD for dimensionality reduction
- Memory-efficient algorithms optimized for sparse matrices
- Generic implementations supporting multiple precision types (
f32,f64) - Production-ready with comprehensive test coverage
Perfect for scientific computing, machine learning, data analysis, and numerical simulation applications.
Features
Iterative Linear System Solvers
- Jacobi - Simple and parallelizable iterative solver
- Gauss-Seidel - Faster convergence for well-conditioned systems
- Successive Over-Relaxation (SOR) - Accelerated convergence with relaxation parameter
- Conjugate Gradient (CG) - Optimal for symmetric positive-definite matrices
- BiConjugate Gradient (BiCG) - General solver for non-symmetric systems
- Algebraic Multigrid (AMG) - Advanced multigrid solver for large-scale problems
Matrix Decompositions
- Truncated SVD - Randomized algorithm for efficient singular value decomposition
- Dimensionality reduction for large-scale data analysis
- Low-rank approximations for matrix compression
⚡ Performance Features
- CSR and CSC matrix support - Industry-standard sparse formats
- Memory-efficient algorithms - Minimal memory footprint
- Parallel computation - Multi-threaded where applicable
- Generic scalar types - Support for
f32,f64, and complex numbers - Zero-copy operations - Efficient memory usage
Quick Start
Add this to your Cargo.toml:
[]
= "0.1"
= "0.9"
For advanced multigrid methods, enable the AMG feature:
[]
= { = "0.1", = ["amg"] }
= "0.9"
Solving Linear Systems
use ;
use solve;
// Create a sparse matrix and right-hand side
let a = identity;
let b = from_vec;
// Solve Ax = b
let solution = solve.unwrap;
Truncated SVD for Dimensionality Reduction
use CsrMatrix;
use TruncatedSVD;
// Create or load your data matrix
let matrix = from;
// Compute top 50 singular vectors and values
let svd = new;
// Access results
println!;
println!;
Examples
Linear System Solvers
Jacobi Method
use ;
use solve;
let a = identity;
let b = from_vec;
let result = solve;
assert!;
Gauss-Seidel Method
use ;
use solve;
let a = identity;
let b = from_vec;
let result = solve;
assert!;
Successive Over-Relaxation (SOR)
use ;
use solve;
let a = identity;
let b = from_vec;
let omega = 0.8; // Relaxation parameter
let result = solve;
assert!;
Conjugate Gradient
use ;
use solve;
// Works with both CSR and CSC matrices
let a = identity;
let b = from_vec;
let result = solve;
assert!;
BiConjugate Gradient
use ;
use solve;
// Suitable for non-symmetric matrices
let a = identity;
let b = from_vec;
let result = solve;
assert!;
Algebraic Multigrid (AMG)
Note: Requires the amg feature flag
use ;
use solve_amg;
// AMG is particularly effective for problems arising from PDEs
// Create a sparse matrix (e.g., from finite difference discretization)
let a = /* your sparse matrix from PDE discretization */;
let b = from_vec;
// AMG parameters: max_iterations, tolerance, strength_threshold
let result = solve_amg;
assert!;
Advanced AMG Usage
Note: Requires the amg feature flag
use ;
use Amg;
use IterativeSolver;
// Create AMG solver with custom parameters
let mut amg_solver = new;
// Initialize with matrix and RHS
amg_solver.init;
// Solve iteratively
let converged = amg_solver.solve_iterations;
if converged
Matrix Decompositions
Truncated SVD for Large Matrices
use ;
use TruncatedSVD;
// Create a large data matrix (e.g., document-term matrix)
let dense_matrix = from_row_slice;
let sparse_matrix = from;
// Compute top 100 components for dimensionality reduction
let svd = new;
// The result contains:
// - svd.u: Left singular vectors (1000 x 100)
// - svd.singular_values: Singular values in descending order (100)
Principal Component Analysis (PCA) Example
use ;
use TruncatedSVD;
// Center your data matrix (subtract mean)
let centered_data = /* your centered data matrix */;
let sparse_data = from;
// Compute principal components
let n_components = 10;
let svd = new;
// svd.u contains the principal component loadings
// svd.singular_values contains the explained variance (after squaring)
Use Cases
🔬 Scientific Computing
- Finite element analysis
- Computational fluid dynamics
- Structural analysis
- Physics simulations
- Partial differential equations (PDEs) - AMG excels at discretized PDEs
🤖 Machine Learning & Data Science
- Large-scale linear regression
- Principal component analysis (PCA)
- Recommendation systems
- Natural language processing (LSA/LSI)
- Image processing and computer vision
📈 Numerical Analysis
- Solving partial differential equations
- Optimization problems
- Signal processing
- Graph algorithms
- Multigrid methods - AMG for hierarchical problem solving
Performance
This library is optimized for:
- Large sparse matrices (>10,000 dimensions)
- Memory efficiency - Minimal overhead beyond input data
- Numerical stability - Robust algorithms with proven convergence
- Parallel computation - Multi-threaded operations where beneficial
AMG Performance Characteristics
- Optimal complexity - O(n) for many PDE problems
- Scalable - Maintains efficiency as problem size increases
- Memory efficient - Hierarchical structure reduces memory requirements
- Grid-independent convergence - Performance doesn't degrade with mesh refinement
Algorithm Selection Guide
| Problem Type | Recommended Solver | Notes |
|---|---|---|
| Symmetric positive-definite | Conjugate Gradient | Fastest convergence |
| General square matrices | BiConjugate Gradient | Good for non-symmetric |
| Diagonally dominant | Jacobi or Gauss-Seidel | Simple and robust |
| Large-scale PCA/SVD | Truncated SVD | Memory efficient |
| Ill-conditioned systems | Relaxation methods | Adjustable convergence |
| DE discretizations | Algebraic Multigrid (AMG) | Optimal for grid-based problems |
Documentation
See API Documentation - Complete API reference
Contributing
We welcome contributions! Please see our contributing guidelines for details on:
- Bug reports and feature requests
- Code contributions and pull requests
- Documentation improvements
- Performance optimizations
Roadmap
- Preconditioned iterative methods
- Additional matrix decompositions (QR, LU)
- GPU acceleration support
- Distributed computing capabilities
License
Licensed under either of:
at your option.
Related Crates
nalgebra- Dense linear algebranalgebra-sparse- Sparse matrix formats