7#ifndef model_RationalMatrix_cpp_
8#define model_RationalMatrix_cpp_
11#include <RationalMatrix.h>
18 std::pair<typename RationalMatrix<dim>::MatrixDimI,
typename RationalMatrix<dim>::IntScalarType> RationalMatrix<dim>::compute(
const MatrixDimD &R)
26 for (
int i = 0;
i <
dim; ++
i)
28 for (
int j = 0;
j <
dim; ++
j)
38 for (
int i = 0;
i <
dim; ++
i)
40 for (
int j = 0;
j <
dim; ++
j)
46 const double error = (im.template cast<double>() /
sigma - R).norm() / (
dim *
dim);
47 if (error > 100.0 * DBL_EPSILON)
49 std::cout <<
"error=" << error << std::endl;
50 std::cout <<
"maxDen=" << maxDen << std::endl;
52 << std::setprecision(15) << std::scientific << im.template cast<double>() /
sigma << std::endl;
53 std::cout <<
"= 1/" <<
sigma <<
"*\n"
54 << std::setprecision(15) << std::scientific << im << std::endl;
56 << std::setprecision(15) << std::scientific << R << std::endl;
57 throw std::runtime_error(
"Rational Matrix failed, check maxDen");
60 return std::make_pair(im, sigma);
67 integerMatrix(returnPair.
first),
74 returnPair(std::make_pair(Rn, Rd)),
RationalMatrix(const MatrixDimD &R)
const MatrixInt & integerMatrix
MatrixDimD asMatrix() const
static IntScalarType lcm(const IntScalarType &a, const IntScalarType &b)