zoukankan      html  css  js  c++  java
  • 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      ] 这种填充方式是不可以的

  • 相关阅读:
    spring boot项目配置文件集合
    分享一个dapper简单封装
    Pgsql数据库jsonb操作函数集合
    RocketMq消息队列使用
    PostgreSQL相关的软件,库,工具和资源集合
    java消息队列使用场景
    java转c#代码工具集合
    Spring基于注解的Cache支持
    MKDOCS在线文档编辑器
    Plinq-Parallel.ForEach for 性能提升
  • 原文地址:https://www.cnblogs.com/wishchin/p/9200119.html
Copyright © 2011-2022 走看看