Lines Matching refs:Solver
13 template<typename Solver, typename Rhs, typename DenseMat, typename DenseRhs>
14 void check_sparse_solving(Solver& solver, const typename Solver::MatrixType& A, const Rhs& b, const DenseMat& dA, const DenseRhs& db)
16 typedef typename Solver::MatrixType Mat;
24 solver.compute(A);
25 if (solver.info() != Success)
27 std::cerr << "sparse solver testing: factorization failed (check_sparse_solving)\n";
31 x = solver.solve(b);
32 if (solver.info() != Success)
34 std::cerr << "sparse solver testing: solving failed\n";
37 VERIFY(oldb.isApprox(b) && "sparse solver testing: the rhs should not be modified!");
43 solver.analyzePattern(A);
44 solver.factorize(A);
45 if (solver.info() != Success)
47 std::cerr << "sparse solver testing: factorization failed (check_sparse_solving)\n";
51 x = solver.solve(b);
52 if (solver.info() != Success)
54 std::cerr << "sparse solver testing: solving failed\n";
57 VERIFY(oldb.isApprox(b) && "sparse solver testing: the rhs should not be modified!");
66 x.block(0,0,x.rows(),x.cols()) = solver.solve(b.block(0,0,b.rows(),b.cols()));
67 VERIFY(oldb.isApprox(b) && "sparse solver testing: the rhs should not be modified!");
72 template<typename Solver, typename Rhs>
73 void check_sparse_solving_real_cases(Solver& solver, const typename Solver::MatrixType& A, const Rhs& b, const Rhs& refX)
75 typedef typename Solver::MatrixType Mat;
81 solver.compute(A);
82 if (solver.info() != Success)
84 std::cerr << "sparse solver testing: factorization failed (check_sparse_solving_real_cases)\n";
88 x = solver.solve(b);
89 if (solver.info() != Success)
91 std::cerr << "sparse solver testing: solving failed\n";
111 template<typename Solver, typename DenseMat>
112 void check_sparse_determinant(Solver& solver, const typename Solver::MatrixType& A, const DenseMat& dA)
114 typedef typename Solver::MatrixType Mat;
118 solver.compute(A);
119 if (solver.info() != Success)
121 std::cerr << "sparse solver testing: factorization failed (check_sparse_determinant)\n";
126 VERIFY_IS_APPROX(refDet,solver.determinant());
130 template<typename Solver, typename DenseMat>
131 int generate_sparse_spd_problem(Solver& , typename Solver::MatrixType& A, typename Solver::MatrixType& halfA, DenseMat& dA, int maxSize = 300)
133 typedef typename Solver::MatrixType Mat;
149 halfA.template selfadjointView<Solver::UpLo>().rankUpdate(M);
168 template<typename Solver> void check_sparse_spd_solving(Solver& solver)
170 typedef typename Solver::MatrixType Mat;
180 int size = generate_sparse_spd_problem(solver, A, halfA, dA);
191 check_sparse_solving(solver, A, b, dA, b);
192 check_sparse_solving(solver, halfA, b, dA, b);
193 check_sparse_solving(solver, A, dB, dA, dB);
194 check_sparse_solving(solver, halfA, dB, dA, dB);
195 check_sparse_solving(solver, A, B, dA, dB);
196 check_sparse_solving(solver, halfA, B, dA, dB);
212 halfA.template selfadjointView<Solver::UpLo>() = it.matrix().template triangularView<Eigen::Lower>().twistedBy(pnull);
215 check_sparse_solving_real_cases(solver, it.matrix(), it.rhs(), it.refX());
216 check_sparse_solving_real_cases(solver, halfA, it.rhs(), it.refX());
222 template<typename Solver> void check_sparse_spd_determinant(Solver& solver)
224 typedef typename Solver::MatrixType Mat;
231 generate_sparse_spd_problem(solver, A, halfA, dA, 30);
234 check_sparse_determinant(solver, A, dA);
235 check_sparse_determinant(solver, halfA, dA );
239 template<typename Solver, typename DenseMat>
240 int generate_sparse_square_problem(Solver&, typename Solver::MatrixType& A, DenseMat& dA, int maxSize = 300)
242 typedef typename Solver::MatrixType Mat;
257 template<typename Solver> void check_sparse_square_solving(Solver& solver)
259 typedef typename Solver::MatrixType Mat;
268 int size = generate_sparse_square_problem(solver, A, dA);
274 check_sparse_solving(solver, A, b, dA, b);
275 check_sparse_solving(solver, A, dB, dA, dB);
289 check_sparse_solving_real_cases(solver, it.matrix(), it.rhs(), it.refX());
295 template<typename Solver> void check_sparse_square_determinant(Solver& solver)
297 typedef typename Solver::MatrixType Mat;
304 generate_sparse_square_problem(solver, A, dA, 30);
307 check_sparse_determinant(solver, A, dA);