c/c++开发分享C++实现矩阵对称正交化的示例代码

服务器sass管理系统

1.python代码import numpy as npimport pandas as pddf=pd.dataframe()df[‘fac_01’]=(34, 45, 65)df[‘fac_02’

1.python代码

%ignore_pre_1%

2.c++的eigen库实现

  #include "eigen/dense"  using namespace eigen;  int main()  {      //初始化      matrixxf a(3, 2);      a(0,0) = 34;a(0,1) = 56;      a(1,0) = 45;a(1,1) = 25;      a(2,0) = 65;a(2,1) = 94;      //生成正交矩阵      matrixxf aex = a.transpose() * a;      int nrowsize = aex.rows();      int ncolsize = aex.cols();      //求特征根、特征向量      selfadjointeigensolver<matrix2f> eigensolver(aex);      matrixxf d = eigensolver.eigenvalues();      matrixxf u = eigensolver.eigenvectors();      std::cout<<"特征根如下:" <<std::endl;      nrowsize = d.rows();      ncolsize = d.cols();      for(size_t i=0; i<nrowsize; i++)      {          for(size_t j=0; j<ncolsize; j++)          {              std::cout<<d(i,j)<<"    ";          }          std::cout<<std::endl;      }      std::cout<<"特征向量如下:" <<std::endl;      nrowsize = u.rows();      ncolsize = u.cols();      for(size_t i=0; i<nrowsize; i++)      {          for(size_t j=0; j<ncolsize; j++)          {              std::cout<<u(i,j)<<"    ";          }          std::cout<<std::endl;      }      //生成np.diag(d**(-0.5)))对角线矩阵      matrixxf dex(2,2);      for(size_t i=0; i<2; i++)      {          for(size_t j=0; j<2; j++)          {              if(i == j)              {                  dex(i,j) = pow(d(i,0),-0.5);              }              else              {                  dex(i,j) = 0;              }          }      }      nrowsize = dex.rows();      ncolsize = dex.cols();      std::cout<<"对角线矩阵如下:" <<std::endl;      for(size_t i=0; i<nrowsize; i++)      {          for(size_t j=0; j<ncolsize; j++)          {              std::cout<<dex(i,j)<<"    ";          }          std::cout<<std::endl;      }      //生成过度矩阵s      matrixxf s = u * dex * u.transpose();      //生成正交化矩阵      matrixxf r = a * s;      nrowsize = r.rows();      ncolsize = r.cols();      std::cout<<"正交化结果如下:" <<std::endl;      for(size_t i=0; i<nrowsize; i++)      {          for(size_t j=0; j<ncolsize; j++)          {              std::cout<<r(i,j)<<"    ";          }          std::cout<<std::endl;      }  	return 0;  }

3.结果对比

C++实现矩阵对称正交化的示例代码

到此这篇关于c++实现矩阵对称正交化的文章就介绍到这了,更多相关c++矩阵对称正交化内容请搜索<猴子技术宅>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<猴子技术宅>!

需要了解更多c/c++开发分享C++实现矩阵对称正交化的示例代码,都可以关注C/C++技术分享栏目—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/793630.html

发表评论

邮箱地址不会被公开。 必填项已用*标注