Skip to main content

NeumannSolver

Struct NeumannSolver 

Source
pub struct NeumannSolver {
    pub tolerance: f64,
    pub max_iterations: usize,
}
Expand description

Neumann Series solver for sparse linear systems.

Computes x = sum_{k=0}^{K} (I - A)^k * b by maintaining a residual vector and accumulating partial sums until convergence.

§Example

use ruvector_solver::types::CsrMatrix;
use ruvector_solver::neumann::NeumannSolver;

// Diagonally dominant 2x2: A = [[2, -0.5], [-0.5, 2]]
let a = CsrMatrix::<f32>::from_coo(2, 2, vec![
    (0, 0, 2.0_f32), (0, 1, -0.5_f32),
    (1, 0, -0.5_f32), (1, 1, 2.0_f32),
]);
let b = vec![1.0_f32, 1.0];

let solver = NeumannSolver::new(1e-6, 500);
let result = solver.solve(&a, &b).unwrap();
assert!(result.residual_norm < 1e-4);

Fields§

§tolerance: f64

Target residual L2 norm for convergence.

§max_iterations: usize

Maximum number of iterations before giving up.

Implementations§

Source§

impl NeumannSolver

Source

pub fn new(tolerance: f64, max_iterations: usize) -> Self

Create a new NeumannSolver.

§Arguments
  • tolerance - Stop when ||r|| < tolerance.
  • max_iterations - Upper bound on iterations.
Source

pub fn estimate_spectral_radius(matrix: &CsrMatrix<f32>) -> f64

Estimate the spectral radius of M = I - D^{-1}A via 10-step power iteration.

Runs [POWER_ITERATION_STEPS] iterations of the power method on the Jacobi iteration matrix M = I - D^{-1}A. Returns the Rayleigh-quotient estimate of the dominant eigenvalue magnitude.

§Arguments
  • matrix - The coefficient matrix A (must be square).
§Returns

Estimated |lambda_max(I - D^{-1}A)|. If this is >= 1.0, the Jacobi-preconditioned Neumann series will diverge.

Source

pub fn solve( &self, matrix: &CsrMatrix<f32>, rhs: &[f32], ) -> Result<SolverResult, SolverError>

Core Jacobi-preconditioned Neumann-series solve operating on f32.

Validates inputs, checks the spectral radius of I - D^{-1}A via power iteration, then runs the iteration returning a SolverResult.

§Errors

Trait Implementations§

Source§

impl Clone for NeumannSolver

Source§

fn clone(&self) -> NeumannSolver

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NeumannSolver

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl SolverEngine for NeumannSolver

Source§

fn solve( &self, matrix: &CsrMatrix<f64>, rhs: &[f64], budget: &ComputeBudget, ) -> Result<SolverResult, SolverError>

Solve via the Neumann series.

Adapts the f64 trait interface to the internal f32 solver by converting the input matrix and RHS, running the solver, then returning the f32 solution.

Source§

fn estimate_complexity( &self, profile: &SparsityProfile, n: usize, ) -> ComplexityEstimate

Estimate the computational cost of solving the given system without actually performing the solve. Read more
Source§

fn algorithm(&self) -> Algorithm

Return the algorithm identifier for this engine.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more