【C++】pinv()函数原型以及matlab中的pinv() —— 8
发布日期:2021-05-15 02:52:03 浏览次数:22 分类:精选文章

本文共 1068 字,大约阅读时间需要 3 分钟。

Pinv() 函数原型及验证

Pinv() 的原型

函数形式为 pinv(J, G, P),其中:

  • G 是一个正定矩阵。
  • P 是矩阵 J 的伪逆矩阵。

核心计算逻辑如下:

Matrix J_temp(2, 2);  
J_temp = J.transpose() * G * J;
P = (J_temp.inverse()) * J.transpose() * G;

详细步骤如下:

  • 计算 J_temp,结果为 J.transpose() * G * J
  • 计算 J_temp 的逆矩阵 J_temp.inverse()
  • 最终伪逆矩阵 P = J_temp.inverse() * J.transpose() * G

  • 验证等式成立

    通过实例验证,以下两种情况都满足等式:

    示例 1

    Matrix4d G;
    G << 5, 0, 0,
    0, 5, 0,
    0, 0, 5;
    Matrix3d B;
    B << 1, 2, 3,
    4, 5, 6,
    0, 0, 1;
    pinv(B, G, projection2); // 验证等式
    cout << "projection2 = " << endl << projection2 << endl;

    示例 2

    Matrix3d G;
    Matrix3d G << 50, 0, 0,
    0, 50, 0,
    0, 0, 50;
    Matrix3d B;
    B << 1, 2, 3,
    4, 5, 6,
    0, 0, 1;
    pinv(B, G, projection4); // 验证等式
    cout << "projection4 = " << endl << projection4 << endl;

    与 Matlab 的 pinv() 函数比较

    比较分析

    1. 结果一致性

    • 当调用 pinv2 函数(无 G 参参)时,与使用 pinv 函数(含 G 标量)得到的结果相同,无论 G 的取值。
    • 结果表明,该 pinv 实现与 Matlab 中的 pinv 函数看起来一致。

    2. 伪逆与逆矩阵一致性

    • 对于可逆矩阵 B,伪逆矩阵与逆矩阵相同。
    • 该性质符合数学理论:当矩阵可逆时,伪逆矩阵等于逆矩阵。

    结论

    • 我们实现的 pinv() 函数与 Matlab 中的 pinv() 函数行为一致。
    • 当矩阵 A 是可逆时,其伪逆矩阵等于逆矩阵。

    通过实例验证和理论推导,可以确认该 pinv() 函数的实现正确可靠。

    上一篇:【C++】windows下使用c++将数据输出到文件 —— 9
    下一篇:【C++】在子线程中调用c++类的成员函数——7

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月12日 08时53分51秒