eigen

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 23, 2026 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package eigen solves real symmetric generalized eigenproblems.

Solve computes the lowest eigenpairs of

A x = lambda B x

for symmetric A and symmetric positive-definite B. The implementation is a deterministic block locally-optimal preconditioned conjugate-gradient iteration. It uses operators rather than requiring a particular matrix representation; SparseSymmetric is provided for assembled finite-element systems.

Index

Constants

This section is empty.

Variables

View Source
var ErrNotConverged = errors.New("eigen: iteration did not converge")

Functions

This section is empty.

Types

type Identity

type Identity struct{ N int }

Identity is an identity operator of dimension N.

func (Identity) Dim

func (i Identity) Dim() int

func (Identity) MulVec

func (i Identity) MulVec(dst, src []float64)

type Operator

type Operator interface {
	Dim() int
	MulVec(dst, src []float64)
}

Operator is a real square linear operator. MulVec must support distinct dst and src slices of length Dim().

type Options

type Options struct {
	NumEigenpairs  int
	Tolerance      float64
	MaxIterations  int
	Seed           uint64
	Preconditioner Preconditioner
}

type Preconditioner

type Preconditioner interface {
	Apply(dst, src []float64)
}

Preconditioner approximately applies the inverse of an operator.

func NewDiagonalPreconditioner

func NewDiagonalPreconditioner(a *SparseSymmetric, floor float64) Preconditioner

NewDiagonalPreconditioner constructs a Jacobi preconditioner. Entries whose magnitude is at most floor use a positive floor.

func NewIC0Preconditioner

func NewIC0Preconditioner(a *SparseSymmetric, shift float64) (Preconditioner, error)

NewIC0Preconditioner constructs a zero-fill incomplete Cholesky factor of A+shift*I. It returns an error if a positive pivot cannot be formed.

type Result

type Result struct {
	Eigenvalues  []float64
	Eigenvectors [][]float64
	Residuals    []float64
	Iterations   int
	Converged    bool
}

func Solve

func Solve(a, b Operator, options Options) (*Result, error)

Solve returns the lowest generalized symmetric eigenpairs. Eigenvectors are B-orthonormal and have a deterministic sign (largest component positive). A non-converged Result is returned together with ErrNotConverged.

type SparseSymmetric

type SparseSymmetric struct {
	// contains filtered or unexported fields
}

SparseSymmetric stores both triangles of an assembled symmetric matrix in compressed row form. Construct one with SymmetricBuilder.

func (*SparseSymmetric) At

func (a *SparseSymmetric) At(i, j int) float64

At returns A(i,j).

func (*SparseSymmetric) Diagonal

func (a *SparseSymmetric) Diagonal() []float64

Diagonal returns a copy of the matrix diagonal.

func (*SparseSymmetric) Dim

func (a *SparseSymmetric) Dim() int

func (*SparseSymmetric) MulVec

func (a *SparseSymmetric) MulVec(dst, src []float64)

MulVec multiplies dst = A src.

func (*SparseSymmetric) Nonzeros

func (a *SparseSymmetric) Nonzeros() int

Nonzeros reports the number of stored entries, counting both triangles.

type SymmetricBuilder

type SymmetricBuilder struct {
	// contains filtered or unexported fields
}

SymmetricBuilder accumulates the upper triangle of a sparse symmetric matrix. Repeated Add calls to the same entry are summed.

func NewSymmetricBuilder

func NewSymmetricBuilder(n int) *SymmetricBuilder

func (*SymmetricBuilder) Add

func (b *SymmetricBuilder) Add(i, j int, value float64)

func (*SymmetricBuilder) Build

func (b *SymmetricBuilder) Build() *SparseSymmetric

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL