gpt4 book ai didi

c++ - Eigen 在矩阵加法中失去负号

转载 作者:太空宇宙 更新时间:2023-11-04 15:13:23 25 4
gpt4 key购买 nike

我正在尝试使用 Eigen 库添加矩阵,我的结果在数值上没问题,但缺少负号。加法正确后的结果是最后加法去掉了负号。所有矩阵都声明为 double 。

我在这两种情况下都有这段代码:

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;
}

Matlab 结果:

    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

Eigen 结果:

    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 缩放,而第二个缩放在最后一个矩阵乘法之前)导致 float 的最低有效位或两位最后一次矩阵乘法的各种加减运算结果不同。

您看到的数字 (5.55112e-17) 实际上是 0,结果是相同的。

关于c++ - Eigen 在矩阵加法中失去负号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44551051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com