pub mod types;
pub mod linalg;
use crate::{types::matrix::Matrix, types::vector::Vector, linalg::solver};
fn testLU() {
let mut A = Matrix::new(3,3);
A[(0,0)] = 1.0;
A[(1,0)] = 0.0;
A[(2,0)] = 1.0; A[(0,1)] = 2.0;
A[(1,1)] = 2.0;
A[(2,1)] = -2.0; A[(0,2)] = 1.0;
A[(1,2)] = 1.0;
A[(2,2)] = 1.0;
print!("LU Test\n");
print!("A\n{}",A);
let LU = solver::lu(&A, &Matrix::new(3,1));
print!("LU\n{}", LU);
}
fn solveTest() {
let eye: Matrix = Matrix::eye(3);
let mut b = Matrix::new(3, 1);
b[(0,0)] = 1.0;
b[(1,0)] = 2.0;
b[(2,0)] = 3.0;
let x = solver::solve(&eye,&b);
print!("x:\n{}", x);
}
fn main() {
let mat: Matrix = Matrix::new(3, 3);
let eye: Matrix = Matrix::eye(3);
let mut A = &mat + &eye;
let B = &mat - &eye;
A[(1, 0)] = 2.0;
A[(0, 1)] = 3.0;
let C = &eye * &A;
print!("{}", A);
print!("{}", B);
print!("{}", C);
let mut D = Matrix::eye(3);
if (eye == D) {
print!("Yes");
}
D.swap_row(0, 2);
print!("D:\n{}", D);
if (eye == D) {
print!("Yes\n");
} else {
print!("No\n");
}
let mut b = Matrix::new(3, 1);
b[(0,0)] = 1.0;
b[(1,0)] = 2.0;
b[(2,0)] = 3.0;
let E = &eye * &b;
print!("{}", E);
let x = solver::forward_sub(&eye, &b);
print!("forwardsub:\n{}", x);
let y = solver::back_sub(&eye, &b);
print!("backsub:\n{}", y);
testLU();
solveTest();
}