let solve a b =
  (* (* This is the debug version, with a matrix multiplication to check. *)
  let _a = copy a in
  let _b = Array.copy b in
    print_sys_silhouette a b ;
    gauss a b ;
    print_sys_silhouette a b ;
    let x = basic_solve a b in
      Printf.printf "
        (error b
           (Array.make (Array.length b) 0.)) ;
      (* Below is a check of the corectness of the result. *)
      let vx = of_vector_v x in
      let b = _b in
      let ax = to_vector_v (mult _a vx) in
      let e = error ax b in
        Printf.printf " e ;
        if e>0.1 then raise (Error e) ;
        x
  *)

  gauss a b ;
  basic_solve a b