IterativeSolvers
English | 简体中文
Rust implementations of iterative algorithms for solving linear systems.
Iterative Algorithms
- Conjugate Gradient (CG)
Supported Linear Algebra Libraries
You can choose your preferred backend using Cargo features:
[]
= { = "*", = false, = ["faer"] }
Usage
Consider the following differential equation:
-\frac{d^2 u}{dx^2} = \pi^2 \sin(\pi x) \quad \text{for} \quad x \in (0, 1)
with the boundary conditions:
u(0) = 0, \quad u(1) = 0.
The solution to this problem is:
u(x) = \sin(\pi x).
Now we use the central difference method to discretize the differential equation:
-\frac{u_{i+1} - 2u_i + u_{i-1}}{h^2} = \pi^2 \sin(\pi x_i) \quad \text{for} \quad i = 1, \ldots, N-1,
where $h = 1/N$ is the step size, and $u_i$ is the approximation of $u(x_i)$. The boundary conditions are:
u_0 = 0, \quad u_N = 0.
The coefficient matrix of this linear system is a symmetric tridiagonal matrix, whose diagonal elements are $2/h2$ and the sub-diagonal elements are $-1/h2$.
We can solve this linear system using the Conjugate Gradient (CG) method.
use ;
use DVector;
use PI;
If you want to know the residual, the approximate solution and the conjugate direction at each iteration, the iterator will help you.
let abstol = 1e-10;
let reltol = 1e-8;
let mut solver = CGnew.unwrap;
while let Some = solver.next
let e = .norm;
println!;
Acknowledgments
This library is a Rust implementation based on the Julia package IterativeSolvers.jl, which is licensed under the MIT License.
License
Licensed under either of:
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.