OpenCV expm() 函数
OpenCV expm() function
OpenCV 有一个 exp(inMat, outMat)
函数,returns 一个矩阵,其中每个单元格 (i,j) 是 exp(inMat.at<>(i, j))
。
是否有函数 returns 实际上是矩阵的指数(即 e^A)?
在 MATLAB 中,函数是 expm(A)
。
没有函数,但是,可以将矩阵分解为特征值并使用exp(inMat, outMat)
函数,即
void expm(const Mat& m0, Mat& m1)
{
Mat eval, evec;
cv::eigenNonSymmetric(m0, eval, evec);
Mat eveci = evec.t().inv();
Mat exp_eval;
cv::exp(eval, exp_eval);
m1 = evec.t() * Mat::diag(exp_eval) * eveci;
}
用法示例:
double a[] = {0, 1, -3, 4};
Mat m0(2, 2, CV_64FC1, a);
Mat m1(2, 2, CV_64FC1);
cout << "Matrix m0 : \n" << m0 << "\n";
expm(m0, m1);
cout << "Matrix m1 : \n" << m1 << "\n";
OpenCV 有一个 exp(inMat, outMat)
函数,returns 一个矩阵,其中每个单元格 (i,j) 是 exp(inMat.at<>(i, j))
。
是否有函数 returns 实际上是矩阵的指数(即 e^A)?
在 MATLAB 中,函数是 expm(A)
。
没有函数,但是,可以将矩阵分解为特征值并使用exp(inMat, outMat)
函数,即
void expm(const Mat& m0, Mat& m1)
{
Mat eval, evec;
cv::eigenNonSymmetric(m0, eval, evec);
Mat eveci = evec.t().inv();
Mat exp_eval;
cv::exp(eval, exp_eval);
m1 = evec.t() * Mat::diag(exp_eval) * eveci;
}
用法示例:
double a[] = {0, 1, -3, 4};
Mat m0(2, 2, CV_64FC1, a);
Mat m1(2, 2, CV_64FC1);
cout << "Matrix m0 : \n" << m0 << "\n";
expm(m0, m1);
cout << "Matrix m1 : \n" << m1 << "\n";