【问题标题】:Eigen compund addition gives wrong result特征化合物加法给出错误的结果
【发布时间】:2018-06-13 03:39:15
【问题描述】:

我在程序中声明了两个 Eigen::RowVectorXd 变量,如下所示。我在复合加法语句sdf_grad+=gradval 中得到错误的结果。仅添加前两个元素,sdf_grad 向量中的其余元素变为 1e19。我不知道为什么会这样。请帮忙。

Eigen::RowVectorXd sdf_grad(24);
Eigen::VectorXd stress_dof = get_stress_dof();
Eigen::VectorXd strain_dof = get_strain_dof();


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];
        if(!m_shape->m_set_coordinate)
               m_shape->add_coordinates(this->get_xcoords(),this->get_ycoords());
        m_shape->update_shapefn(sval,tval);
        Eigen::MatrixXd Bs = get_bsmat_local(i,j);
        Eigen::Vector3d stress = Bs*stress_dof;
        Eigen::MatrixXd Bd = get_bmat(sval,tval);
        Eigen::Vector3d strain = Bd* strain_dof;


        Eigen::Vector3d cnfn = m_material->get_constitutive_function(stress,strain);
        auto WxJ  = qw[i] * qw[j] * m_shape->get_detJ();
        double delval=cnfn.norm();
        objval+=delval*WxJ;

        //SETTING GRADIENT OF STRESS DOF

        Eigen::MatrixXd CxBs = m_material->get_cmat()*Bs;
        Eigen::MatrixXd Bstrans = CxBs.transpose();
        Eigen::RowVectorXd gradval= (-WxJ/delval)*Bstrans*cnfn;
        sdf_grad+= gradval ; // Wrong Result.

    }
}

【问题讨论】:

    标签: c++ eigen3


    【解决方案1】:

    您没有对向量进行零初始化。写这个而不是第一行:

    Eigen::RowVectorXd sdf_grad = Eigen::RowVectorXd::Zero(24);
    

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2020-12-14
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多