{
bool operator()(const Matx<_Tp, m, n>&, Matx<_Tp, n, m>&, int) const
{
- CV_Assert(false);
return false;
}
};
bool operator()(const Matx<_Tp, m, l>&, const Matx<_Tp, m, n>&,
Matx<_Tp, l, n>&, int) const
{
- CV_Assert(false);
return false;
}
};
{
Matx<_Tp, n, m> b;
bool ok;
- if( m == n && (method == DECOMP_LU || method == DECOMP_CHOLESKY) )
+ if (method == DECOMP_LU || method == DECOMP_CHOLESKY)
+ {
+ CV_Assert(m == n);
ok = cv::internal::Matx_FastInvOp<_Tp, m, n>()(*this, b, method);
+ }
else
{
Mat A(*this, false), B(b, false);
{
Matx<_Tp, n, l> x;
bool ok;
- if( m == n && (method == DECOMP_LU || method == DECOMP_CHOLESKY) )
+ if (method == DECOMP_LU || method == DECOMP_CHOLESKY)
+ {
+ CV_Assert(m == n);
ok = cv::internal::Matx_FastSolveOp<_Tp, m, n, l>()(*this, rhs, x, method);
+ }
else
{
Mat A(*this, false), B(rhs, false), X(x, false);
cv::Vec<float, 3> b(4, 5, 7);
cv::Matx<float, 2, 1> xQR = A.solve(b, DECOMP_QR);
cv::Matx<float, 2, 1> xSVD = A.solve(b, DECOMP_SVD);
- EXPECT_LE(cvtest::norm(xQR, xSVD, CV_RELATIVE_L2), FLT_EPSILON);
+ EXPECT_LE(cvtest::norm(xQR, xSVD, CV_RELATIVE_L2), 0.001);
cv::Matx<float, 2, 3> iA = A.inv(DECOMP_SVD);
EXPECT_LE(cvtest::norm(A*iA, Matx<float, 3, 3>::eye(), CV_RELATIVE_L2), 0.6);
}