30 for (
int i = 0; i < dim; ++i)
32 for (
int j = 0; j < dim; ++j)
42 for (
int i = 0; i < dim; ++i)
44 for (
int j = 0; j < dim; ++j)
46 im(i, j) = nums(i, j) * (sigma / dens(i, j));
50 const double error = (im.template cast<double>() / sigma - R).norm() / (dim * dim);
51 if (error > FLT_EPSILON)
53 std::cout <<
"error=" << error << std::endl;
54 std::cout <<
"maxDen=" << maxDen << std::endl;
56 << std::setprecision(15) << std::scientific << im.template cast<double>() / sigma << std::endl;
57 std::cout <<
"= 1/" << sigma <<
"*\n"
58 << std::setprecision(15) << std::scientific << im << std::endl;
60 << std::setprecision(15) << std::scientific << R << std::endl;
61 throw std::runtime_error(
"Rational Matrix failed, check maxDen");
64 return std::make_pair(im, sigma);
72 throw std::runtime_error(
"Rational Matrix construction failed: denominator matrix has zeros");
78 for (
int i = 0; i < dim; ++i)
80 for (
int j = 0; j < dim; ++j)
87 for (
int i = 0; i < dim; ++i)
89 for (
int j = 0; j < dim; ++j)
91 im(i, j) = RnReduced(i, j) * sigma / RdReduced(i, j);
95 std::cout << Rn << std::endl;
96 std::cout << Rd << std::endl;
97 std::cout << RnReduced << std::endl;
98 std::cout << RdReduced << std::endl;
99 std::cout << im << std::endl;
100 std::cout << sigma <<std::endl;
103 return std::make_pair(im, sigma);