Expand description

An simple solver for sparse complex linear systems based on Eigen::SparseLU.

Complex Number representation

We use num::Complex to represent complex numbers. See num crate for more information.

Example

Lets consider the complex linear system bellow:

\begin{bmatrix}
1 - j1 & 0\\
0 & -1 + j1
\end{bmatrix}
\begin{bmatrix}
x_1 \\
x_2
\end{bmatrix}=
\begin{bmatrix}
1 \\
j1
\end{bmatrix}

We can solve this system as follows:

use num::Complex;
use sparse_complex::ComplexMatrix;

let mut m = ComplexMatrix::<f64>::new();
m.add_element(0, 0, Complex { re: 1., im: -1. });
m.add_element(1, 1, Complex { re: -1., im: 1. });
let mut b = vec![Complex::new(1., 0.), Complex::new(0., 1.)];
m.solve(&mut b).unwrap();

let expected = vec![Complex::new(0.5, 0.5), Complex::new(0.5, -0.5)];
assert_eq!(b, expected);

The solution of this system is:

\frac{1}{2}
\begin{bmatrix}
1 + j1 \\
1 - j1
\end{bmatrix}

Version Compatible

The sparse_complex crate is tested for rustc 1.61 and greater.

Structs

The complex matrix struct