+static unsigned matrix_solve3()
+{
+ unsigned result = 0;
+ symbol x("x");
+ symbol t1("t1"), t2("t2"), t3("t3");
+ matrix A = {
+ {3+6*x, 6*(x+x*x)/(2+3*x), 0},
+ {-(2+7*x+6*x*x)/x, -2-2*x, 0},
+ {-2*(2+3*x)/(1+2*x), -6*x/(1+2*x), 1+4*x}
+ };
+ matrix B = {{0}, {0}, {0}};
+ matrix X = {{t1}, {t2}, {t3}};
+ for (auto algo : vector<int>({
+ solve_algo::gauss, solve_algo::divfree, solve_algo::bareiss, solve_algo::markowitz
+ })) {
+ matrix sol(A.solve(X, B, algo));
+ if (!normal((A*sol - B).evalm()).is_zero_matrix()) {
+ clog << "Solving " << A << " * " << X << " == " << B << " with algo=" << algo << endl
+ << "erroneously returned " << sol << endl;
+ result += 1;
+ }
+ }
+ return result;
+}
+