c++ - 特征化合物加法给出错误的结果
问题描述
我在程序中声明了两个 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.
}
}
解决方案
您没有对向量进行零初始化。写这个而不是第一行:
Eigen::RowVectorXd sdf_grad = Eigen::RowVectorXd::Zero(24);
推荐阅读
- reactjs - 如何测试组件中的react useContext useReducer调度
- apache-spark - 如何在不更改火花代码的情况下减少分区数量
- java - DatePickerDialog 的 setTitle 不起作用
- ibm-datapower - 重试如何在 Datapower mpgw 服务中使用 routing-url 设置后端 URL?
- excel - 根据列“值”选择范围(值是日期)
- mysql - 使用临时表将 T-SQL 转换为 MySQL
- c - libmodbus:如何编译包含 libmodbus 库的应用程序?
- wordpress - 如何重命名 Wordpress 工具栏中的子菜单?
- html - 图像悬停效果 CSS。我希望我的图像看起来像这样:https://www.medi360.in/NewHome/Our_Specialists.html
- javascript - 有没有办法编写脚本来更新 React 功能组件道具?