相关疑难解决方法(0)

如何实现Matlab的mldivide(又名反斜杠运算符"\")

我正在尝试开发一个面向矩阵的小型数学库(我使用Eigen 3进行矩阵数据结构和操作)我想实现一些方便的Matlab函数,比如广泛使用的反斜杠运算符(相当于mldivide)以计算线性系统的解(以矩阵形式表示).

有关如何实现这一目标的详细解释吗?(我已经用经典的SVD分解实现了Moore-Penrose伪反向pinv函数,但我读过的地方A\b并不总是如此pinv(A)*b,至少Matalb并不是那么简单)

谢谢

c++ matlab matrix linear-algebra equation-solving

19
推荐指数
1
解决办法
2万
查看次数

用2平方矩阵模拟matlab的mrdivide

我有2个19x19平方矩阵(a和b),我正在尝试使用斜杠(mrdivide)运算符来执行除法

c = a / b
Run Code Online (Sandbox Code Playgroud)

我试图在OpenCV中实现它.我发现有一些人建议使用,cv::solve但到目前为止,我一直无法找到任何能让我得到任何接近matlab的结果的东西.

有谁知道如何用opencv实现mrdivide?

我试过以下代码:

cv::Mat mldivide(const cv::Mat& A, const cv::Mat& B ) 
{
    //return  b * A.inv();
    cv::Mat a;
    cv::Mat b;
    A.convertTo( a, CV_64FC1 );
    B.convertTo( b, CV_64FC1 );

    cv::Mat ret;
    cv::solve( a, b, ret, cv::DECOMP_NORMAL );

    cv::Mat ret2;
    ret.convertTo( ret2, A.type() );
    return ret2;
}
Run Code Online (Sandbox Code Playgroud)

然后,我按如下方式实现了mrdivide:

cv::Mat mrdivide(const cv::Mat& A, const cv::Mat& B ) 
{
   return mldivide( A.t(), B.t() ).t();
}
Run Code Online (Sandbox Code Playgroud)

(编辑:根据答案,当我正确使用它时,这确实给了我正确的答案!)

这给了我一个错误的答案,就像matlab一样.根据评论我也尝试过

cv::Mat mrdivide(const cv::Mat& A, const cv::Mat& B …
Run Code Online (Sandbox Code Playgroud)

c++ matlab opencv linear-algebra

3
推荐指数
1
解决办法
671
查看次数

标签 统计

c++ ×2

linear-algebra ×2

matlab ×2

equation-solving ×1

matrix ×1

opencv ×1