• Matlab/Eigen矩阵填充问题


     Matlab进行矩阵填充时可以填充空矩阵,相当于空矩阵不存在,例如一下代码:

    P_RES = [ P_xv          P_xvy                       P_xv*dy_dxv';
              P_yxv         P_y                         P_yxv*dy_dxv';
              dy_dxv*P_xv   dy_dxv*P_xvy                dy_dxv*P_xv*dy_dxv'+...
                                                        dy_dhd*Padd*dy_dhd'];

    结果是可行的。


    而使用C++ Eigen时,使用的填充代码是这样的:

        Eigen::MatrixXf  P13,P23,P33,P31,P32;
        P13 =   P_xv*dy_dxv.transpose();//13*6的矩阵
        P23 =   P_yxv*dy_dxv.transpose();//0*6的矩阵
        P33 =   dy_dxv*P_xv*dy_dxv.transpose() + dy_dhd*Padd*dy_dhd.transpose();//6*6的矩阵
        P31 =   dy_dxv*P_xv ;//6*13的矩阵
        P32 =   dy_dxv*P_xvy ;//6*0的矩阵
        P_RES<< 
            P_xv  ,    P_xvy  ,   P13 ,
            P_yxv ,     P_y   ,   P23 ,
            P31  ,      P32 ,     P33 ;


    矩阵的填充形式是这样的:

        P_RES<< 
            P_xv(13*13)  ,    P_xvy(13*0)  ,    13*6 ,
            P_yxv(0*13) ,     P_y(0,0)     ,     0*6 ,
            6*13       ,          6*0      ,     6*6 ;
    然而出现错误!


    原因:  

    /1./P_RES需要Resize!

        P_RES.resize(19,19);

    注意事项

          在Eigen矩阵填充时,注意子矩阵行列的对齐。

    对于

    [  13*13      13*6

        6*13        6*6      ] 这种填充方式是可以的


    [  13*13      6*13

        13*6        6*6      ] 这种填充方式是不可以的

  • 相关阅读:
    索引的使用说明
    如何在Linux 发行版本CentOS安装Oracle
    GNU/Linux 初學之旅
    Oracle数据库监听配置(转)
    Linux学习笔记7用户建立密码设置及删除用户
    Linux学习笔记6ls命令
    linux vi命令使用
    生成1千万个随机串号9位英文字母
    郁闷的夏天
    网络爬虫
  • 原文地址:https://www.cnblogs.com/wishchin/p/9200119.html
Copyright © 2020-2023  润新知