C++应用Eigen库对应实现matlab中部分函数问题

目录
  • 将Eigen加入到项目中
  • 使用Eigen中函数及功能
  • 问题及解决方式
  • 注意事项
  • 总结

将Eigen加入到项目中

1.如下图将Eigen库文件夹加入到项目目录中。

2.将Eigen文件加入到运行环境变量中

3.在项目头文件中包含Eigen。

使用Eigen中函数及功能

1)声明矩阵,向量,数组:

图中声明了一个2x3的矩阵,矩阵中数据类型为float。

第一个参数为矩阵中数据类型,第二参数为行数,第三为列数。

当参数为Dynamic时为动态,程序会自动检测需要设置XxX矩阵。

2)矩阵赋值

方法一:

方法二:

方法三:

3)复数矩阵赋值方式

输出矩阵

使用方法

4)伴随矩阵,共轭矩阵,伴随矩阵

使用方法

5)矩阵重塑

使用方法

6)矩阵运算

a)矩阵加法、减法、乘法

行列相等矩阵相加减运用方法:

行列不等的矩阵相加减运用方法:

矩阵于常数

矩阵于常数想加减运用方法及输出结果:

此处不能直接对matrix进行常数加减,需要将其转化为array后进行加减运算。

b)三角函数

所有数学函数输入的值均以弧度计算,函数会对矩阵中每个值进行相应的运算。

其中矩阵需要转为array才能进行运算。

测试结构体:

用法:

m1.array().atan(); m1.array().asin(); m1.array().acos();

m1.array().sin(); m1.array().cos(); m1.array().tan();

c)其他,

测试结构体:

使用方法:

  • log(m1.array())将m1中各元素取自然对数返回结果矩阵
  • log2(m1.array())将m1中各元素取基数为2对数返回结果矩阵
  • log10(m1.array())将m1中各元素取基数为10对数返回结果矩阵:
  • m1.sum(): 返回矩阵m1中所有元素的和
  • m1.prod(): 返回矩阵m1中所有元素的积
  • m1.mean(): 返回矩阵m1中所有有元素的平均值
  • m1.trace():返回矩阵的迹,即返回主对角线上元素的和。如果不是方阵或者为向量,仍返回对角线元素的和。
  • m1.minCoeff(): 返回矩阵中最小的元素
  • m1.maxCoeff(): 返回矩阵中最大的元素
  • abs( m1.array()):将m1中各元素取绝对值返回结果矩阵
  • square( m1.array()):将m1中各元素开方返回结果矩阵

7)元胞数组转换成矩阵(matlab代码中cell2mat)

未找到

8)查找矩阵中非0元素下表(matlab代码中find)

未找到

9)Splines插值

此处只用eigen库实现了一维Splines插值法

实现类:

使用方法

10)曲线拟合(对应matlab函数polyfit)

被和谐了

11)多项式计算(对应matlab函数polyval)

未找到

12)直线拟合

被和谐了

问题及解决方式

问题一:

原因:程序操作了矩阵行列边界之外的数值;

解决方法:查询代码,查看在哪操作了数组边界之外数据,修改。

问题二:编译时出现error C2338: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES

原因:矩阵赋值时出现不匹配现象,比如一个3x2的矩阵向2x3矩阵赋值,就会报此类错误。

注意事项

Qt中,QDbug无法输出矩阵;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C++读入"N,X,Y,Z"格式文本文件到Eigen3 Matrix

    C++读入"N,X,Y,Z"格式文本文件到Eigen3 Matrix,以及相同格式输出方法 很多数据资料的格式类似这样: 1,-2085738.7757,5503702.8697,2892977.6829 2,-2071267.5135,5520926.7235,2883341.8135 3,-2079412.5535,5512450.8800,2879771.2119 4,-2093693.1744,5511218.2651,2869861.8947 5,-2113681.5062,

  • C++ Eigen库计算矩阵特征值及特征向量

    本文主要讲解利用Eigen库计算矩阵的特征值及特征向量并与Matlab计算结果进行比较. C++Eigen库代码 #include <iostream> #include <Eigen/Dense> #include <Eigen/Eigenvalues> using namespace Eigen; using namespace std; void Eig() { Matrix3d A; A << 1, 2, 3, 4, 5, 6, 7, 8, 9; c

  • C++之eigen安装与测试方式

    目录 C++eigen安装与测试 1.eigen库安装 2.查看eigen的版本号 C++ eigen使用 eigen几何模块的使用方法 总结 C++eigen安装与测试 1.eigen库安装 1)方法一:源码安装(推荐) 官网下载.或git下载eigen源码 cd eigen mkdir build cd build cmake .. sudo make install #安装后,头文件安装在/usr/local/include/eigen3/ #移动头文件 sudo cp -r /usr/l

  • C++应用Eigen库对应实现matlab中部分函数问题

    目录 将Eigen加入到项目中 使用Eigen中函数及功能 问题及解决方式 注意事项 总结 将Eigen加入到项目中 1.如下图将Eigen库文件夹加入到项目目录中. 2.将Eigen文件加入到运行环境变量中 3.在项目头文件中包含Eigen. 使用Eigen中函数及功能 1)声明矩阵,向量,数组: 图中声明了一个2x3的矩阵,矩阵中数据类型为float. 第一个参数为矩阵中数据类型,第二参数为行数,第三为列数. 当参数为Dynamic时为动态,程序会自动检测需要设置XxX矩阵. 2)矩阵赋值

  • R语言技巧Rcpp与Eigen库之间的相互转换

    当我们在使用Rcpp时,进行矩阵运算最简单的是使用Eigen库进行相关操作,可以很轻松地讲R中向量化与矩阵化的思想应用到C++代码上,从而对代码进行加速.可参考前面的博客:利用RcppEigen进行矩阵运算. 但有时,我们却必须使用Rcpp进行DataFrame,List等对象格式的处理.或者如果我们涉及到缺失值的处理,也需要使用Rcpp中的函数来做. 所以,如何在两种矩阵或向量格式,NumericVector/Matrix与VectorXd/MatrixXd之间相互转化就变得非常重要. 我们可

  • 详解Matlab中 sort 函数用法

    (1)B=sort(A) 对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排序. eg: A=[1,5,3],则sort(A)=[1,3,5] A=[1,5,3;2,4,1],则sort(A)=[1,4,1;2,5,3] (2)B=sort(A,dim),对数组按指定方向进行升序排序, dim =1,表示对每一列进行排序,,dim=2表示对每一行进行排序. (3)B=sort(A,dim,mode),mode为指定排序模式,mode为"ascend"时,

  • 简述Matlab中size()函数的用法

    size()函数用来获取矩阵的行数和列数. (1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size(A), 当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c. (3)size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数.其中r=size(A,1)该语句返回的时矩阵A的行数, c=si

  • matlab中实现矩阵删除一行或一列的方法

    实例如下所示: >> A=[1,2,3;4,5,6;7,8,9] A = 1 2 3 4 5 6 7 8 9 删除行: >> A(2,:)=[] A = 1 2 3 7 8 9 删除列: >> A(:,2)=[] A = 1 3 7 9 以上这篇matlab中实现矩阵删除一行或一列的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: Python numpy 提取矩阵的某一行或某一列的实例 Python矩阵常见运算操

  • matlab中imadjust函数的作用及应用举例

    imadjust简介 imadjust是一个计算机函数,该函数用于调节灰度图像的亮度或彩色图像的颜色矩阵.在matlab的命令窗口中键入: doc imadjust或者help imadjust即可获得该函数的帮助信息, 键入type imadjust可以查看函数的源代码. 调用格式: J = imadjust(I) J = imadjust(I,[low_in; high_in],[low_out; high_out]) J = imadjust(I,[low_in; high_in],[lo

  • Python3标准库之threading进程中管理并发操作方法

    1. threading进程中管理并发操作 threading模块提供了管理多个线程执行的API,允许程序在同一个进程空间并发的运行多个操作. 1.1 Thread对象 要使用Thread,最简单的方法就是用一个目标函数实例化一个Thread对象,并调用start()让它开始工作. import threading def worker(): """thread worker function""" print('Worker') threads

  • 对Matlab中共轭、转置和共轭装置的区别说明

    共轭 转置 共轭转置 The symbols (·)T , (·)∗, and (·)H are,respectively, the transpose, complex conjugate and Hermitian transpose operators. 这里使用随机产生的矩阵来说明问题,例如: A=randn(2,2)+randn(2,2)*i A=randn(2,2)+randn(2,2)*j A=randn(2,2)+randn(2,2)*1i 三种方式结果一致,为了程序的稳定性,建

  • Matlab中plot基本用法的具体使用

    本文主要介绍了Matlab中plot基本用法的具体使用,分享给大家,具体如下: >> y=[0 0.58 0.70 0.95 0.83 0.25]; >> plot(y) 生成的图形是以序号为横坐标.数组y的数值为纵坐标画出的线 >> x=linspace(0,2*pi,30); % 生成一组线性等距的数值 >> y=sin(x); >> plot(x,y) 生成的图形是上30个点连成的光滑的正弦曲线. x为横轴y为纵轴 多重线 在同一个画面上可

随机推荐