pub struct MatrixEquationSolver {
pub show_steps: bool,
}Expand description
Matrix equation solver specialized for noncommutative types
Handles equations of the form:
- Left multiplication: A*X = B (solution: X = A^(-1)*B)
- Right multiplication: XA = B (solution: X = BA^(-1))
§Examples
ⓘ
use mathhook_core::{symbol, expr};
use mathhook_core::algebra::solvers::matrix_equations::MatrixEquationSolver;
use mathhook_core::algebra::solvers::EquationSolver;
let solver = MatrixEquationSolver::new();
let A = symbol!(A; matrix);
let B = symbol!(B; matrix);
let X = symbol!(X; matrix);
// Solve A*X = B for X
let equation = expr!((A*X) - B);
let result = solver.solve(&equation, &X);Fields§
§show_steps: boolImplementations§
Source§impl MatrixEquationSolver
impl MatrixEquationSolver
Sourcepub fn solve_left_division(
&self,
a: &Expression,
b: &Expression,
) -> Result<Expression, SolverError>
pub fn solve_left_division( &self, a: &Expression, b: &Expression, ) -> Result<Expression, SolverError>
Solve left division: A*X = B → X = A^(-1)*B
§Arguments
A- The left coefficient matrix/operatorB- The right-hand side
§Examples
ⓘ
use mathhook_core::{symbol, expr};
use mathhook_core::algebra::solvers::matrix_equations::MatrixEquationSolver;
let solver = MatrixEquationSolver::new();
let A = symbol!(A; matrix);
let B = symbol!(B; matrix);
let solution = solver.solve_left_division(&A, &B);
// solution should be A^(-1)*BSourcepub fn solve_right_division(
&self,
a: &Expression,
b: &Expression,
) -> Result<Expression, SolverError>
pub fn solve_right_division( &self, a: &Expression, b: &Expression, ) -> Result<Expression, SolverError>
Solve right division: XA = B → X = BA^(-1)
§Arguments
A- The right coefficient matrix/operatorB- The right-hand side
§Examples
ⓘ
use mathhook_core::{symbol, expr};
use mathhook_core::algebra::solvers::matrix_equations::MatrixEquationSolver;
let solver = MatrixEquationSolver::new();
let A = symbol!(A; matrix);
let B = symbol!(B; matrix);
let solution = solver.solve_right_division(&A, &B);
// solution should be B*A^(-1)Trait Implementations§
Source§impl Clone for MatrixEquationSolver
impl Clone for MatrixEquationSolver
Source§fn clone(&self) -> MatrixEquationSolver
fn clone(&self) -> MatrixEquationSolver
Returns a duplicate of the value. Read more
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for MatrixEquationSolver
impl Debug for MatrixEquationSolver
Source§impl Default for MatrixEquationSolver
impl Default for MatrixEquationSolver
Source§impl EquationSolver for MatrixEquationSolver
impl EquationSolver for MatrixEquationSolver
Source§fn solve(&self, equation: &Expression, variable: &Symbol) -> SolverResult
fn solve(&self, equation: &Expression, variable: &Symbol) -> SolverResult
Solve equation for given variable
Source§fn solve_with_explanation(
&self,
equation: &Expression,
variable: &Symbol,
) -> (SolverResult, StepByStepExplanation)
fn solve_with_explanation( &self, equation: &Expression, variable: &Symbol, ) -> (SolverResult, StepByStepExplanation)
Solve with step-by-step explanation
Source§fn can_solve(&self, equation: &Expression) -> bool
fn can_solve(&self, equation: &Expression) -> bool
Check if solver can handle this equation type
Auto Trait Implementations§
impl Freeze for MatrixEquationSolver
impl RefUnwindSafe for MatrixEquationSolver
impl Send for MatrixEquationSolver
impl Sync for MatrixEquationSolver
impl Unpin for MatrixEquationSolver
impl UnwindSafe for MatrixEquationSolver
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)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