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";