当前位置: 首页 > news >正文

吉林市网站建设_网站建设公司_阿里云_seo优化

wordpress站群软件,网络销售平台,技术支持 东莞网站建设,山东莱钢建设有限公司网站矩阵是数学中一个重要的工具#xff0c;广泛应用于各种场景下的数值分析#xff0c;例如#xff0c;数字信号处理#xff0c;图像处理等。我们如何在程序中使用矩阵进行运算呢#xff1f;本文将为大家介绍一个开源的矩阵运算工具——Eigen。Eigen is a C template library… 矩阵是数学中一个重要的工具广泛应用于各种场景下的数值分析例如数字信号处理图像处理等。我们如何在程序中使用矩阵进行运算呢本文将为大家介绍一个开源的矩阵运算工具——Eigen。Eigen is a C template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.Eigen是一个用于线性运算的C 模板库支持 矩阵和矢量运算数值分析及其相关的算法。安装Eigen比较简单需要从官网下载源码并解压即可我现在的是最新的eigen-3.3.7版本。官网下载地址http://eigen.tuxfamily.org/index.php?titleMain_Page我们可以进入Eigen目录可以发现Eigen库主要包括如下几个模块组成CoreMatrix和Array类基础的线性代数运算和数组操作Geometry旋转平移缩放2维和3维的各种变换LU求逆行列式LU分解CholeskyLLT和LDLT Cholesky分解HouseholderHouseholder变换SVDSVD分解QRQR分解。Eigenvalues特征值特征向量分解。Sparse稀疏矩阵的存储和运算。Dense包含了Core、Geometry、LU、Cholesky、SVD、QR、Eigenvalues等模块。Eigen包含了Dense和Sparse模块。Eigen的食用方法非常之简单在使用时我们只需要从解压后的文件目录中找到需要使用的库然后在源代码中包含相应的库即可食用了。因为Eigen是用模板写的模板库所以只能把头文件包含进来使用。W君是在工程工作目录解压的请参考如下代码包含Eigen库。#include eigen_3_3_7/Eigen/EigenMatrix和Array模板类Eigen库提供有Matrix和Array两种模板类。它们定义如下typedef Matrix MyMatrixType;typedef Array MyArrayType其中通常我们会根据需要设置前三个参数其它为默认值即可。Scalar指定元素类型比如float, double, bool, int 等。RowsAtCompileTime指定行数或者设置成动态(Dynamic)ColsAtCompileTime指定列数或者设置成动态(Dynamic)Options标志位可以是ColMajor或RowMajor默认是ColMajor从上面可以看出行数和列数是允许固定大小也允许动态大小的所以下面的几种类型是可以的。Matrixdouble, 10, 5Matrixdouble, 10, DynamicMatrixdouble, Dynamic, 5Matrixdouble, Dynamic, DynamicArrayfloat ,Dynamic,1Arrayfloat ,10,3另外我们还可以使用Eigen库已经重定义的类型下面是一些简单的例子可参考。矩阵的定义和初始化下面我们先看看Matrix模板类它包含矩阵(Matrix)和向量(Vector)对于Vector来说它也是一个矩阵不过特殊的是行或者列数为1我们称作行向量或者列向量。接下来我们来写个程序来看一下。#include #include eigen_3_3_7/Eigen/Eigenint main(){ Eigen::MatrixXf matrix1(3,4); //定义了矩阵的大小但是没有初始化。 Eigen::Vector3f vector1; matrix1 Eigen::MatrixXf::Zero(3,4); //对矩阵进行初始化。 vector1 Eigen::Vector3f::Ones(); std::cout ------ matrix1 ------ std::endl matrix1 std::endl; std::cout ------ vector1 ------ std::endl vector1 std::endl;}在上面的代码中MatrixXf是一个行列可动态设置的矩阵Vector3f是一个有3个元素的列向量。typedef Matrix MatrixXf;typedef Matrix Vector3f;需要注意到是在定义矩阵大小时是没有初始化矩阵的需要重新对矩阵进行初始化这里是用Zero和Ones函数对其初始化Zero是初始化为全0而Ones是初始化为全1。最后我们看一下执行结果。当然我们也可以给定任意值每个值用逗号隔开不过这种方法只能适用于确定矩阵大小的情况下使用。 Eigen::MatrixXf matrix1(3,4); Eigen::Vector3f vector1; matrix1 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; vector1 1, 2, 3;执行结果如下另外我们还可以用()对某个元素进行访问我们可以对其可读和可写。 Eigen::MatrixXf matrix1(3,4); Eigen::Vector3f vector1; matrix1 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; vector1 1, 2, 3; matrix1(1,3) 100; vector1(1) 100;我们将matrix1的第2行第4列修改成100vector1的第2行修改成100程序执行结果如下矩阵的基本运算学习了矩阵的定义那我们下面来看一下几个基本的矩阵运算。Matrix重载了--××//这几个基本的四则运算。对于加减运算需要注意一下几点左右矩阵的行列对应相等数据的类型也要相同因为矩阵运算不支持隐式类型转换不支持和标量进行加减运算。我们来看一个例子#include #include eigen_3_3_7/Eigen/Eigenint main(){ Eigen::MatrixXf matrix1(2,3); Eigen::MatrixXf matrix2(2,3); matrix1 1, 2, 3, 5, 6, 7; matrix2 1, 1, 2, 2, 1, 1; std::cout ------ matrix1 ------ std::endl matrix1 std::endl; std::cout ------ matrix2 ------ std::endl matrix1 std::endl; std::cout ------ matrix1 matrix2 ------ std::endl matrix1 matrix2 std::endl;}执行结果如下关于乘除法运算矩阵支持矩阵和标量之间的乘除法运算标量和矩阵中的每个元素相运算。#include #include eigen_3_3_7/Eigen/Eigenint main(){ Eigen::MatrixXf matrix1(2,3); Eigen::MatrixXf matrix2(2,3); matrix1 1, 2, 3, 5, 6, 7; matrix2 1, 1, 2, 2, 1, 1; std::cout ------ matrix1 ------ std::endl matrix1 std::endl; std::cout ------ matrix2 ------ std::endl matrix2 std::endl; std::cout ------ matrix1 * 2 ------ std::endl matrix1 * 2 std::endl; std::cout ------ matrix2 / 2 ------ std::endl matrix2 / 2 std::endl;}执行结果如下关于矩阵和矩阵之间的乘法两个矩阵只有当左边的矩阵的列数等于右边矩阵的行数时,两个矩阵才可以进行矩阵的乘法运算 。如下图左边矩阵第i行的元素逐个和右边矩阵第j列的元素相乘乘积再相加就是第i行第j列的结果。对于Eigen库来说它通过重载运算符帮我们实现了这个运算过程我们直接使用运算符即可。#include #include eigen_3_3_7/Eigen/Eigenint main(){ Eigen::MatrixXf matrix1(2,3); Eigen::MatrixXf matrix2(3,2); matrix1 1, 2, 3, 5, 6, 7; matrix2 1, 1, 2, 1, 3, 1; std::cout ------ matrix1 ------ std::endl matrix1 std::endl; std::cout ------ matrix2 ------ std::endl matrix2 std::endl; std::cout ------ matrix1 * matrix2 ------ std::endl matrix1 * matrix2 std::endl;}执行结果如下另外还包括矩阵的转置、共轭和共轭转置等矩阵运算在Eigen中分别是有transpose()、conjugate()、adjoint()函数可实现。#include #include eigen_3_3_7/Eigen/Eigenint main(){ Eigen::MatrixXf matrix1(2, 3); Eigen::MatrixXf matrix2(2, 3); matrix1 1, 2, 3, 4, 5, 6; std::cout ------ matrix1 ------ std::endl matrix1 std::endl; // 转置 std::cout ------ matrix1 transpose------ std::endl matrix1.transpose() std::endl; // 共轭 std::cout ------ matrix1 conjugate------ std::endl matrix1.conjugate() std::endl; // 共轭转置 std::cout ------ matrix1 adjoint------ std::endl matrix1.adjoint() std::endl;}执行结果如下不过代码中实数的共轭还是其本身。数组的定义和初始化有的时候我们并不需要做线性代数矩阵运算而只是做元素级的操作这个时候就需要用到Array了。对Array来说它和Matrix的定义和初始化的方式是一样的。#include #include eigen_3_3_7/Eigen/Eigenint main(){ Eigen::ArrayXXf array1(2,3); Eigen::ArrayXXf array2(3,3); Eigen::ArrayXXf array3(5,10); array1(0,0) 1; array1(0,1) 2; array1(0,2) 2; array1(1,0) 1; array1(1,1) 2; array1(1,2) 2; array2 1, 2, 3, 4, 5, 6, 7, 8, 9; array3 Eigen::ArrayXXf::Ones(5, 10); std::cout ------ array1 ------ std::endl array1 std::endl; std::cout ------ array2 ------ std::endl array2 std::endl; std::cout ------ array3 ------ std::endl array3 std::endl;}这里的ArrayXXf也是Eigen库重定义的它行和列数可以动态设置。我们可以看到Array的初始化和Matrix也是类似的 。typedef Arraydouble,Dynamic ,Dynamic   ArrayXXf;下面是执行结果数组的基本运算Array同样也重载了四则运算但是这里数据只是对数组内的元素做算术运算而不是矩阵线性运算。所以对于Array来数两个数据的大小相同即行数和行数相同列数和列数相同它的四则运算就是取两个数组相应位置的元素参与运算运算的结果就是对应位置的值。当然也支持和标量之间的运算数组中的每个元素都乘以这个标量这个和矩阵一样。#include #include eigen_3_3_7/Eigen/Eigenint main(){ Eigen::ArrayXXf array1(2, 3); Eigen::ArrayXXf array2(2, 3); array1 1, 2, 3, 4, 5, 6; array2 1, 2, 1, 1, 1, 2; std::cout ------ array1 ------ std::endl array1 std::endl; std::cout ------ array2 ------ std::endl array2 std::endl; std::cout ------ array1 array2 ------ std::endl array1 array2 std::endl; std::cout ------ array1 - array2 ------ std::endl array1 - array2 std::endl; std::cout ------ array1 * array2 ------ std::endl array1 * array2 std::endl; std::cout ------ array1 / array2 ------ std::endl array1 / array2 std::endl; std::cout ------ array1 * 2 ------ std::endl array1 * 2 std::endl;}执行结果Matrix和Array两者是可以相互转换的。Matrix类有array()方法可将Matrix转换为Array。Array类有matrix()方法可将Array转换成Matrix。总之Eigen是一个很不错的开源库官网还有更加详细的文档大家可以参考http://eigen.tuxfamily.org/dox/GettingStarted.htmlhttp://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.htmlhttp://eigen.tuxfamily.org/dox/group__QuickRefPage.htmlhttp://eigen.tuxfamily.org/dox/Eigen2ToEigen3.html- End -阅读推荐大端模式与小端模式KMP匹配算法递归(Recursion Algorithm)VS Code 编译和调试C/C程序也可以这么爽5G毫米波感谢大家耐心的阅读如有所收获请记得点赞点亮在看分享转发也欢迎大家在下方留言一起交流学习感谢大家的支持
http://www.lebaoying.cn/news/51268.html

相关文章:

  • 用wordpress建网站长沙公司网络推广
  • wordpress 菜单对应分类目录英文seo是什么意思
  • 专业模板网站制作服务html生成网站
  • 单纯做seo能否提升网站流量网站解决访问量超载
  • 个人公众号做电影网站吗怎么在百度上能搜到自己的网站
  • 正在进入一站式服务平台室内设计自学软件
  • 求个网站你懂我意思是网站调用网页内容
  • 建设网站的编程过程专门做生鲜的网站
  • 做婚庆网站有哪些内容商城网站怎么建
  • 通栏式网站婚纱网站
  • 怎么评判一个网站做的好与坏做网站套路
  • 网站建设开发报价方案模板下载十三师建设局网站
  • 小企业网站建设地点朱柏青建盏个人简介
  • iis7新建网站网站专题页ps教程
  • 无限个网站虚拟空间网络推广平台公司
  • 北京网站制作公司建站博物馆网站建设经验
  • 无锡建设网站的公司简介一站式的手机网站制作
  • 自己做网站帮公司出认证证书违法吗wordpress 调试 输出
  • 商城网站建设4262做网站加班多吗
  • 做网站域名哪里来广西钦州网站建设
  • 汽车营销型网站建设3d建模师的就业前景
  • 网站建设视频上传响应式网站设计软件
  • 网站文章怎么做才能被快速收录室内装饰网站模板
  • 怎么自己在家做网站wordpress nextgen
  • 国庆贺卡制作图片网站优化百度
  • 网站虚拟主机免备案金蝶软件是干什么的
  • 建设公共网站的目的龙海网站建设公司
  • 全国建设造价信息网站php和网站建设
  • 网站开发公司薪酬绩效网站被k怎么办
  • 企业做网站公司有哪些做婚纱网站策划方案