pub fn complex_inv_u(u: ComplexMatrix) -> ComplexMatrix {
    let mut w = u.clone();

    match u.row {
        1 => {
            w[(0, 0)] = 1f64 / w[(0, 0)];
            w
        }
        2 => {
            let a = w[(0, 0)];
            let b = w[(0, 1)];
            let c = w[(1, 1)];
            let d = a * c;

            w[(0, 0)] = 1f64 / a;
            w[(0, 1)] = -b / d;
            w[(1, 1)] = 1f64 / c;
            w
        }
        _ => {
            let (u1, u2, u3, u4) = u.block();
            let m1 = complex_inv_u(u1);
            let m3 = u3;
            let m4 = complex_inv_u(u4);
            let m2 = -(m1.clone() * u2 * m4.clone());

            complex_combine(m1, m2, m3, m4)
        }
    }
}
Inverse of upper triangular matrix

# Examples
```rust
#[macro_use]
extern crate peroxide;
use peroxide::fuga::*;
use peroxide::complex::matrix::*;

fn main() {
let a = ml_cmatrix("2.0+2.0i 2.0+2.0i;
0.0+0.0i 1.0+1.0i");
let b = cmatrix(vec![C64::new(0.25f64, -0.25f64),
C64::new(-0.5f64, 0.5f64),
C64::new(0.0f64, 0.0f64),
C64::new(0.5f64, -0.5f64)],
2, 2, Row
);
assert_eq!(complex_inv_u(a), b);
}
```
src/complex/matrix.rs