///|
/// Compute a determinant with partial pivoting. The method is intended for
/// small online covariance matrices, not for large dense linear algebra.
pub fn Matrix::determinant(self : Matrix) -> Double {
if self.rows != self.cols {
0.0
} else {
let work = Matrix::{
rows: self.rows,
cols: self.cols,
values: copy_vector(self.values),
}
let mut sign = 1.0
let mut result = 1.0
for column in 0.. magnitude {
pivot = row
magnitude = candidate
}
}
if magnitude <= 1.0e-15 {
result = 0.0
} else {
if pivot != column {
for j in 0.. Array[Double]? {
if self.rows != self.cols || right_hand_side.length() != self.rows {
None
} else {
let work = Matrix::{
rows: self.rows,
cols: self.cols,
values: copy_vector(self.values),
}
let result = copy_vector(right_hand_side)
let mut solvable = true
for column in 0.. magnitude {
pivot = row
magnitude = candidate
}
}
if magnitude <= 1.0e-15 {
solvable = false
} else {
if pivot != column {
for j in column.. Matrix? {
if self.rows != self.cols {
None
} else {
let result = Matrix::new(self.rows, self.cols)
let mut valid = true
for column in 0.. valid = false
Some(solution) =>
for row in 0.. Matrix {
let result = Matrix::new(left.length(), right.length())
for row in 0.. Unit {
let rows = if vector.length() < matrix.rows {
vector.length()
} else {
matrix.rows
}
let cols = if vector.length() < matrix.cols {
vector.length()
} else {
matrix.cols
}
for row in 0.. Array[Double] {
Array::makei(matrix.rows, row => {
let mut total = 0.0
for col in 0..