以C++本征计算的SSE值与真实值不同

SSE value calculated in C++ eigen is different from true value

本文关键字:真实 SSE C++ 计算      更新时间:2023-10-16

我是C++的初学者。任何帮助都将不胜感激!我可以成功编译并运行以下代码:

#include <Eigen/Dense>
#include <iostream>
#include <cmath>
using namespace Eigen;
int main()
{
  MatrixXf m1(10,1);
  m1 << 50,51,52,54,53,60,59,65,67,70;
  MatrixXf m3(3,10);
  MatrixXf m2(10,3);
  m3<< 1,1,1,1,1,1,1,1,1,1,     //Xf[,5:6]
       54,61,52,70,63,0,0,0,0,0,
       0,0,0,0,0,79,68,65,79,76;
  m2 << m3.transpose();
  MatrixXf I(10,10);
  I.setIdentity(10,10);
  float SSE =(m1.transpose()*(I-m2*(m2.transpose()*m2).inverse()*m2.transpose())*m1).determinant();
  std::cout << "SSE=" << std::endl;
  std::cout << SSE << std::endl << std::endl;
  system("pause");
}

SSE在C++中计算:87.7938,而SSE真值:88.29133

您需要使用MatrixXd而不是MatrixXf