当前位置: 首页 > 知识库问答 >
问题:

特征复合加法给出错误的结果

归翔
2023-03-14

我在程序中声明了两个Eigen::RowVectorXd变量,如下所示。我在复合加法语句中得到了错误的结果。仅添加前两个元素,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.

    }
}

共有1个答案

卫寒
2023-03-14

你没有初始化你的向量。写下以下内容,而不是第一行:

Eigen::RowVectorXd sdf_grad = Eigen::RowVectorXd::Zero(24);
 类似资料:
  • 我试图解决一个稀疏线性系统Ax=B与Eigen库在C,然而下面的微不足道的例子似乎给出了一个不正确的解决方案: 我没有看到任何错误,算法返回“0”表示“成功”,但我得到的解决方案是 这显然不是这个系统的解决方案,正确的方法是

  • 问题内容: 根据Wolfram Mathematica: cos(50) = 0.6427876096865394 ; 但是这段Java代码: 给出 0.9649660284921133 。 有什么问题吗? 问题答案: 期望参数以弧度为单位。这将返回您需要的结果:

  • 我在两个特征类中有两个几何,一个名为“HY90299”,另一个名为“hyboxsdo”,这两个几何不相交。 但是当我在oralce中运行空间查询时, “从 HY90299 t,hyboxsdo g 中选择sdo_relate(t.shape,g.shape ,'mask=ANYINTERACT') ” , 我的预言机版本是11g 追加

  • 我正在用Eigen 3将一个MATLAB代码移植到C,我决定构造我的线性解算器,而不是从矩阵对象调用它,这样我就可以重用它了。不幸的是,它没有产生预期的结果。经过几次测试后,我将问题追溯到了似乎是线性解算器对象的地方,如以下相关代码所示: 结果是: 该算法在MATLAB中的第一次迭代产生了一个近似单位矩阵,可以在C中通过反转矩阵并从矩阵对象调用解算器来观察该矩阵。 但使用解算器对象时,结果完全错误

  • 我的任务是使用用户填充的int数组合并两个数组,我们必须假设用户最多有10000个输入,用户输入负数停止。然后将数组从最小到最大排序并打印出来。起初我以为这很容易,但当我完成时,我开始得到如下输出: 正如你所看到的,这六个是不合适的,我不知道如何修复它。这是源代码,我已经包括了大量的评论,因为我真的希望你们能帮助我尽你们最大的能力。如果可以使用相同的技术而不在代码中实现新的技术和方法,请这样做。我

  • 我有一个简单的方法,可以获取当前日期,将其转换为特定格式,然后作为字符串返回。到目前为止,它还不错(上次尝试是在1月31日左右),但由于某种原因,当我今天尝试它时,它返回字符串“2013-02-43”。 现在很明显,2月份没有43天,我不知道为什么它会返回这个。我到处寻找解决方案,但似乎没有一个适合我的具体问题。以下是代码: 为了记录在案,我尝试过使用Calendar.get实例()等。结果相同。