c++ - 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@1
以Fx, Fy and M
. Fx,Fy 和 M 改变循环内的值,但不改变Fx@1, Fy@1,M@1
。循环退出后,Fx, Fy and M
恢复到循环前的状态。这里发生了什么?请帮忙。
解决方案
推荐阅读
- wpf - 禁用双击 Bing Map WPF 控件
- c# - 实体框架 + ODATA + 动态列映射
- cas - 指定身份验证后应返回的 CAS
- c - C 代码关于 %d 和 scanf 函数的问题
- mysql - 从同一个表mysql中选择每个条件后的行
- python - 用字典键/值替换占位符
- javascript - react-native-image-crop-picker 视频上传
- python - 无法导入最新(0.12.2)statsmodels.api:获取类型错误:需要整数(获取类型字节)
- c++ - Qt:存储 src 并包含在子目录中
- mysql - 如何让 MySQL 根据不同的基准返回多列值?