特征在矩阵加法中失去负号
Eigen losing negative sign in matrix addition
我正在尝试使用 Eigen 库添加一个矩阵,我的结果在数值上没问题,但它缺少负号。加法后的结果是正确的,它是失去负号的最终加法。所有矩阵都声明为双精度。
我在两种情况下都有这段代码:
for(int i=0;i<9;i++){
mata<<MatrixXd::Zero(4,4);
for(int j=0;i<4;j++){
mata += matb.transpose()*(matc*matb)*scalar;
}
cout<<mata<<endl;
}
我也尝试过:
for(int i=0;i<9;i++){
mata<<MatrixXd::Zero(4,4);
for(int j=0;i<4;j++){
MatrixXd aux=matb.transpose();
MatrixXd aux2=(matc*matb)*scalar
mata += aux*aux2;
}
cout<<mata<<endl;
}
矩阵结果:
1.92186 -0.960928 -0.960928 -5.55112e-17
-0.960928 1.92186 -5.55112e-17 -0.960928
-0.960928 -5.55112e-17 1.92186 -0.960928
-5.55112e-17 -0.960928 -0.960928 1.92186
特征结果:
1.92186 -0.960928 -0.960928 5.55112e-17
-0.960928 1.92186 5.55112e-17 -0.960928
-0.960928 5.55112e-17 1.92186 -0.960928
5.55112e-17 -0.960928 -0.960928 1.92186
这是浮点计算精度的结果。 两者之间的顺序略有不同(第一个首先执行所有矩阵乘法,然后按scale
缩放,而第二个缩放在最后一个矩阵乘法之前)导致浮点结果的最低有效位或两个在最后一个矩阵乘法的各种加法和减法期间不同。
您看到的数字 (5.55112e-17) 出于所有实际目的,实际上是 0,结果是相同的。
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 特征命名访问向量段
- 将特征矩阵的向量设置为0
- 特征:模板函数中矩阵的平面图
- basic_string的前导/尾部不区分空格的特征
- 特征 3 类的模板专用化
- 特征 c++:复矩阵的面积双曲正切(atanh)
- C++ 中的特征向量计算
- 根据C++标准的定义实现"is_similar"类型特征
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- 有没有办法找到特征矩阵系数的中值?
- 如何将高维数据映射到特征类型?
- 将平面阵列重塑为复杂的特征类型
- 特征 LLT 模块给出不正确的结果?
- 特征模板化函数和维度
- 特征稀疏向量:求最大系数
- 特征 3.3.x:如何在所有行中操作 lamba?
- 特征在矩阵加法中失去负号