39 lines
897 B
Rust
39 lines
897 B
Rust
|
use std::cmp;
|
||
|
|
||
|
use nl::Hessenberg;
|
||
|
use na::{DMatrix, Matrix4};
|
||
|
|
||
|
quickcheck!{
|
||
|
fn hessenberg(n: usize) -> bool {
|
||
|
if n != 0 {
|
||
|
let n = cmp::min(n, 25);
|
||
|
let m = DMatrix::<f64>::new_random(n, n);
|
||
|
|
||
|
match Hessenberg::new(m.clone()) {
|
||
|
Some(hess) => {
|
||
|
let h = hess.h();
|
||
|
let p = hess.p();
|
||
|
|
||
|
relative_eq!(m, &p * h * p.transpose(), epsilon = 1.0e-7)
|
||
|
},
|
||
|
None => true
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn hessenberg_static(m: Matrix4<f64>) -> bool {
|
||
|
match Hessenberg::new(m) {
|
||
|
Some(hess) => {
|
||
|
let h = hess.h();
|
||
|
let p = hess.p();
|
||
|
|
||
|
relative_eq!(m, p * h * p.transpose(), epsilon = 1.0e-7)
|
||
|
},
|
||
|
None => true
|
||
|
}
|
||
|
}
|
||
|
}
|