Skip to main content

gmres

Function gmres 

Source
pub fn gmres<T, F>(
    apply_a: F,
    b: &T,
    x0: &T,
    options: &GmresOptions,
) -> Result<GmresResult<T>, KrylovError>
where T: TensorVectorSpace, F: Fn(&T) -> Result<T>,
Expand description

Solve A x = b using GMRES (Generalized Minimal Residual Method). This implements the restarted GMRES algorithm that works with abstract tensor types through the TensorVectorSpace trait’s vector space operations.

§Algorithm

GMRES builds an orthonormal basis for the Krylov subspace K_m = span{r_0, A r_0, A^2 r_0, ..., A^{m-1} r_0} and finds the solution that minimizes ||b - A x|| over this subspace.

§Type Parameters

  • T - A tensor type implementing TensorVectorSpace
  • F - A function that applies the linear operator: F(x) = A x

§Arguments

  • apply_a - Function that applies the linear operator A to a tensor
  • b - Right-hand side tensor
  • x0 - Initial guess
  • options - Solver options

§Returns

A GmresResult containing the solution and convergence information.

§Errors

Returns an error when the options have an overflowing capacity (a KrylovError::InvalidOptions), when the operator and vectors have incompatible shapes, when the affine coefficients are all zero (a KrylovError::NoAffineCoefficient for affine solves), or when an underlying tensor or backend operation fails (a KrylovError::Operation). Non-convergence is reported through the result’s converged flag and does not produce an error.