func TestSolveLeastSquaresQRT(t *testing.T) { M := 60 N := 40 K := 30 nb := 12 A := matrix.FloatUniform(M, N) B := matrix.FloatZeros(M, K) X0 := matrix.FloatUniform(N, K) // B = A*X0 Mult(B, A, X0, 1.0, 0.0, NOTRANS) W := matrix.FloatZeros(N, nb) T := matrix.FloatZeros(N, N) QR, err := DecomposeQRT(A, T, W, nb) if err != nil { t.Logf("decompose error: %v\n", err) } // B' = A.-1*B err = SolveQRT(B, QR, T, W, NOTRANS, nb) // expect B[0:N, 0:K] == X0, B[N:M, 0:K] == 0.0 var Xref matrix.FloatMatrix Bref := matrix.FloatZeros(M, K) Bref.SubMatrix(&Xref, 0, 0, N, K) Xref.Plus(X0) Bref.Minus(B) t.Logf("\nmin ||B - A*X0||\n\twhere B = A*X0\n") t.Logf("||B - A*X0||_1 ~~ 0.0: %e\n", NormP(Bref, NORM_ONE)) }