首页 > 解决方案 > Eigen::Matrix 的值在循环后消失

问题描述

Eigen::Matrix在执行循环之前声明并在循环Eigen::Matrix内使用变量。但是即使在循环执行之后,预定义变量的值也不会改变。

Eigen::Matrix<double,1,24> Fx,Fy,M;
Fx.setZero(); Fy.setZero(); M.setZero();
for(unsigned int i=0;i<qn.size();i++)
{
    for(unsigned int j=0;j<qn.size();j++)
    {
        double sval=qn[i];
        double tval=qn[j];
        m_shape->update_shapefn(sval,tval);
        Eigen::MatrixXd J = m_shape->get_jacobian();
        double dxds,dxdt,dyds,dydt;
        dxds=J(0,0);dxdt=J(0,1);dyds=J(1,0);dydt=J(1,1);
        Eigen::MatrixXd Bs =get_bsmat_local(i,j);
         Eigen::Matrix<double,1,24> Sx,Sy,Sxy,Tx,Ty,Fx,Fy,M;
         Sx.setZero();Sy.setZero();Sxy.setZero();Tx.setZero();Ty.setZero();

         Sx=Bs.row(1);
         Sy=Bs.row(0);
         Sxy=-1*Bs.row(2);

         Tx=face.nx*Sx+face.ny*Sxy;
         Ty=face.ny*Sy+face.nx*Sxy;

         double Jds= sqrt(dxds*dxds+dyds*dyds);
         double Jdt= sqrt(dxdt*dxdt+dydt*dydt);

         if(face.id==0 )
         {
             Fx.noalias() += qw[i]*qw[j]*Tx*Jds;
             Fy.noalias() += qw[i]*qw[j]*Ty*Jds;
             M.noalias()  +=  qw[i]*qw[j]*(m_shape->X()*Ty-m_shape->Y()*Tx)*Jds;
         }        
    }
}

Fx, Fy, M是预定义的变量。当我在 Qt-creator 中调试循环时,我观察到在循环内部,有一些变量Fx@1, Fy@1, M@1Fx, Fy and M. Fx,Fy 和 M 改变循环内的值,但不改变Fx@1, Fy@1,M@1。循环退出后,Fx, Fy and M恢复到循环前的状态。这里发生了什么?请帮忙。

标签: c++eigen3

解决方案


推荐阅读