pub struct SymmetricMatrix<A>{ /* private fields */ }
Expand description
Symmetric matrix representation
A symmetric matrix has the property that A = A^T, meaning the element at position (i, j) is equal to the element at position (j, i). This allows storing only the lower or upper triangular part of the matrix, saving almost half the memory.
§Examples
use scirs2_core::ndarray::array;
use scirs2_linalg::specialized::SymmetricMatrix;
use scirs2_linalg::SpecializedMatrix;
// Create a 3x3 symmetric matrix
let a = array![
[1.0, 2.0, 3.0],
[2.0, 4.0, 5.0],
[3.0, 5.0, 6.0]
];
let sym = SymmetricMatrix::frommatrix(&a.view()).unwrap();
// Get elements
assert_eq!(sym.get(0, 0).unwrap(), 1.0);
assert_eq!(sym.get(0, 1).unwrap(), 2.0);
assert_eq!(sym.get(1, 0).unwrap(), 2.0); // Equal to (0, 1)
assert_eq!(sym.get(2, 1).unwrap(), 5.0);
// Matrix-vector multiplication
let x = array![1.0, 2.0, 3.0];
let y = sym.matvec(&x.view()).unwrap();
Implementations§
Source§impl<A> SymmetricMatrix<A>
impl<A> SymmetricMatrix<A>
Sourcepub fn new(lower: ArrayView2<'_, A>) -> LinalgResult<Self>
pub fn new(lower: ArrayView2<'_, A>) -> LinalgResult<Self>
Sourcepub fn frommatrix(a: &ArrayView2<'_, A>) -> LinalgResult<Self>
pub fn frommatrix(a: &ArrayView2<'_, A>) -> LinalgResult<Self>
Sourcepub fn cholesky(&self) -> LinalgResult<Array2<A>>
pub fn cholesky(&self) -> LinalgResult<Array2<A>>
Perform a Cholesky decomposition of the symmetric matrix
The Cholesky decomposition of a symmetric positive-definite matrix A is a lower triangular matrix L such that A = L * L^T.
§Returns
- Lower triangular matrix L such that A = L * L^T
LinalgError
if the matrix is not positive definite
Sourcepub fn solve(&self, b: &ArrayView1<'_, A>) -> LinalgResult<Array1<A>>
pub fn solve(&self, b: &ArrayView1<'_, A>) -> LinalgResult<Array1<A>>
Trait Implementations§
Source§impl<A> Clone for SymmetricMatrix<A>
impl<A> Clone for SymmetricMatrix<A>
Source§fn clone(&self) -> SymmetricMatrix<A>
fn clone(&self) -> SymmetricMatrix<A>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<A> Debug for SymmetricMatrix<A>
impl<A> Debug for SymmetricMatrix<A>
Source§impl<A> SpecializedMatrix<A> for SymmetricMatrix<A>
impl<A> SpecializedMatrix<A> for SymmetricMatrix<A>
Source§fn matvec(&self, x: &ArrayView1<'_, A>) -> LinalgResult<Array1<A>>
fn matvec(&self, x: &ArrayView1<'_, A>) -> LinalgResult<Array1<A>>
Perform matrix-vector multiplication: A * x
Source§fn matvec_transpose(&self, x: &ArrayView1<'_, A>) -> LinalgResult<Array1<A>>
fn matvec_transpose(&self, x: &ArrayView1<'_, A>) -> LinalgResult<Array1<A>>
Perform transposed matrix-vector multiplication: A^T * x
Source§fn to_dense(&self) -> LinalgResult<Array2<A>>
fn to_dense(&self) -> LinalgResult<Array2<A>>
Convert to a dense matrix representation
Source§fn to_operator(&self) -> LinalgResult<LinearOperator<A>>
fn to_operator(&self) -> LinalgResult<LinearOperator<A>>
Convert to a matrix-free operator
Auto Trait Implementations§
impl<A> Freeze for SymmetricMatrix<A>
impl<A> RefUnwindSafe for SymmetricMatrix<A>where
A: RefUnwindSafe,
impl<A> Send for SymmetricMatrix<A>
impl<A> Sync for SymmetricMatrix<A>
impl<A> Unpin for SymmetricMatrix<A>
impl<A> UnwindSafe for SymmetricMatrix<A>where
A: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more