fn solve_linear(a: &[f64], b: &[f64], n: usize) -> Vec<f64>
Solve A x = b via Gaussian elimination with partial pivoting. A is n×n (row-major flat), b is n-length. Returns x.