IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【22】Eigen的常见用法总结 -> 正文阅读

[C++知识库]【22】Eigen的常见用法总结

1 向量和矩阵的运算主要包含

(1)矩阵和矩阵的运算

(2)向量和向量的运算

(3)矩阵和向量的运算

(4)矩阵和向量的标量运算

(5)矩阵的自身运算、分解、逆矩阵、伴随矩阵

2 易犯错误点

(1)向量的叉乘只能针对三维向量,向量的点乘对于向量长度没有限制;

(2)向量默认为行向量;

(3)矩阵和矩阵的除法,需要转换为数组运算

(4)向量和向量的乘法和除法则需要转换为数组运算;

(5)数组运算是支持所有数学运算的,数组和矩阵可以互相转化。

3? 使用说明

#include<iostream>
#include<vector>
#include<array>
#include <Eigen/Dense>

using namespace std;
using namespace Eigen;

void main()
{
    //向量和向量运算
    Eigen::Vector3f vec1(1, 2, 3);
    Eigen::Vector3f vec2(1, 2, 3);        
    std::cout << vec1+vec2 << std::endl;//246
    std::cout << vec1-vec2 << std::endl;//000
    std::cout << vec1.array() * vec2.array() << std::endl;//149
    std::cout << vec1.array() / vec2.array() << std::endl;//111
    //点应向量的元素相乘在乘,对相加,长度任意
    std::cout << vec1.dot(vec2) << std::endl;//14
    //向量的叉乘,新的向量垂直于原来的两个向量,只能是长度为3的向量
    std::cout << vec1.cross(vec2) << std::endl;//000

    //矩阵和矩阵的运算
    Eigen::MatrixXd m1(2, 2);
    m1 << 1, 2, 3, 4;
    Eigen::MatrixXd m2(2, 2);
    m2 << 1, 2, 3, 4;
    std::cout << m1 + m2 << std::endl;
    std::cout << m1 - m2 << std::endl;
    std::cout << m1 * m2 << std::endl;
    std::cout << m1 * 0.1 << std::endl;
    //矩阵无法直接进行除法,需要转换为数组后在进行除法,本质就是矩阵每一个元素相除
    std::cout << m1.array() / m2.array() << std::endl;

    //矩阵和向量的运算
    Eigen::Vector3f vec11(1,2,3);
    Eigen::MatrixXf m4(3, 3);
    m4 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
    //矩阵和向量的运算必须保证维度一样,简言之就是从矩阵中拿出一个向量再进行运算
    std::cout << m4.col(1) + vec11 << std::endl;
    std::cout << m4.col(1) - vec11 << std::endl;
    std::cout << m4.col(1).array() * vec11.array() << std::endl;
    std::cout << m4.col(1).array() / vec11.array() << std::endl;
    //向量的长度任意
    std::cout << m4.col(1).dot( vec11)<< std::endl;
    Eigen::Vector3f block = m4.row(1);
    //向量的长度只能为3
   std::cout << block.cross(vec11) << std::endl;

    矩阵的计算,转置、共轭、伴随
    Eigen::MatrixXf m5(2, 2);
    m5 << 1, 2, 3, 4;
    cout << "Here is the matrix a\n" << m5 << endl;
    cout << "Here is the matrix a^T\n" << m5.transpose() << endl;
    cout << "Here is the conjugate of a\n" << m5.conjugate() << endl;
    cout << "Here is the matrix a^*\n" << m5.adjoint() << endl;

    QR分解
    Matrix3d A;
    A << 1, 1, 1, 2, -1, -1, 2, -4, 5;
    HouseholderQR<Matrix3d> qr;
    qr.compute(A);
    MatrixXd R = qr.matrixQR().triangularView<Upper>();
    MatrixXd Q = qr.householderQ();
    std::cout << "QR2(): HouseholderQR---------------------------------------------" << std::endl;
    std::cout << "A " << std::endl << A << std::endl << std::endl;
    std::cout << "qr.matrixQR()" << std::endl << qr.matrixQR() << std::endl << std::endl;
    std::cout << "R" << std::endl << R << std::endl << std::endl;
    std::cout << "Q " << std::endl << Q << std::endl << std::endl;
    std::cout << "Q*R" << std::endl << Q * R << std::endl << std::endl;
}

参考博客:

Eigen中的基本函数_我是小沙的博客-CSDN博客_eigen函数Eigen: C++开源矩阵计算工具——Eigen的简单用法_Augusdi的博客-CSDN博客_eigen矩阵Eigen中的基本函数_我是小沙的博客-CSDN博客_eigen函数

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:22:53  更:2022-04-18 17:27:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:41:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码