矩阵变换是机器人学的基础,所以Jungle把这一节内容划分到“工业机器人”栏目。这一节Jungle用C++设计了矩阵的类Matrix,并设计了3个方法:

  • 矩阵相加add
  • 矩阵相乘multiply
  • 求矩阵的逆矩阵inverse
    有了这三个方法,足以进行机器人正逆运动学分析了。
    直接上代码:
#include<iostream>
#include<stdlib.h>
#include<math.h>class Matrix
{
public:Matrix(double a11, double a12, double a13, double a14,double a21, double a22, double a23, double a24,double a31, double a32, double a33, double a34,double a41, double a42, double a43, double a44);Matrix();~Matrix();//矩阵相乘static Matrix mutiply(Matrix A,Matrix B);//矩阵相加static Matrix add(Matrix A,Matrix B);//矩阵的逆static Matrix inverse(Matrix A);//二维数组,存储矩阵元素double M[4][4];
};
#include "Matrix.h"Matrix::Matrix()
{for(int i=0;i<4;i++){for(int j=0;j<4;j++)this->M[i][j] = 0.00;}
}Matrix::Matrix(double a11, double a12, double a13, double a14, double a21, double a22, double a23, double a24, double a31, double a32, double a33, double a34, double a41, double a42, double a43, double a44)
{M[0][0] = a11; M[0][1] = a12; M[0][2] = a13; M[0][3] = a14;M[1][0] = a21; M[1][1] = a22; M[1][2] = a23; M[1][3] = a24;M[2][0] = a31; M[2][1] = a32; M[2][2] = a33; M[2][3] = a34;M[3][0] = a41; M[3][1] = a42; M[3][2] = a43; M[3][3] = a44;
}Matrix::~Matrix()
{}// Function:两个矩阵相乘
// para:A-矩阵A
// para:B-矩阵B
// return:矩阵AB
Matrix Matrix::mutiply(Matrix A, Matrix B)
{Matrix Result;for(int m=0;m<4;m++){  for(int s=0;s<4;s++){for(int n=0;n<4;n++){  Result.M[m][s]+=A.M[m][n]*B.M[n][s];  }  }  }return Result;
}// Function:两个矩阵相加
// para:A-矩阵A
// para:B-矩阵B
// return:矩阵AB
Matrix Matrix::add(Matrix A, Matrix B)
{Matrix Result;for(int m=0;m<4;m++){  for(int s=0;s<4;s++){Result.M[m][s]=A.M[m][s]+B.M[m][s]; }  }return Result;
}// Function:求矩阵的逆
// para:A-矩阵A
// return:矩阵A的逆矩阵
Matrix Matrix::inverse(Matrix A)
{double E_Matrix[4][4];double mik;for(int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){if(i == j)E_Matrix[i][j] = 1.00;elseE_Matrix[i][j] = 0.00;}}double CalcuMatrix[4][8];for(int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){CalcuMatrix[i][j] = A.M[i][j];}for(int k = 4; k < 8; k++){CalcuMatrix[i][k] = E_Matrix[i][k-4];}}for(int i = 1; i <= 4-1; i++){for(int j = i+1; j <= 4; j++){mik = CalcuMatrix[j-1][i-1]/CalcuMatrix[i-1][i-1];for(int k = i+1;k <= 8; k++){CalcuMatrix[j-1][k-1] -= mik*CalcuMatrix[i-1][k-1];}}}for(int i=1;i<=4;i++){double temp = CalcuMatrix[i-1][i-1];for(int j=1;j<=8;j++){CalcuMatrix[i-1][j-1] = CalcuMatrix[i-1][j-1]/temp;}}for(int k=4-1;k>=1;k--){for(int i=k;i>=1;i--){mik = CalcuMatrix[i-1][k];for(int j=k+1;j<=8;j++){CalcuMatrix[i-1][j-1] -= mik*CalcuMatrix[k][j-1];}}}double InverseMatrix[4][4];for(int i=0;i<4;i++){for(int j=0;j<4;j++){InverseMatrix[i][j] = CalcuMatrix[i][j+4];}}Matrix Result;for(int i=0;i<4;i++){for(int j=0;j<4;j++){if(fabs(InverseMatrix[i][j]) < 0.0000001)InverseMatrix[i][j] = 0.00;Result.M[i][j] = InverseMatrix[i][j];}}return Result;
}

欢迎关注知乎专栏:Jungle是一个用Qt的工业Robot

欢迎关注Jungle的微信公众号:Jungle笔记

C++设计矩阵,实现矩阵相乘和求逆矩阵相关推荐

  1. python实现求矩阵行列式、求逆矩阵等各种矩阵操作(不使用numpy包)

    def submatrix(A,i,j):#矩阵A第i行第j列元素的余矩阵p=len(A)#矩阵的行数q=len(A[0])#矩阵的列数C=[[A[x][y] for y in range(q) if ...

  2. 矩阵乘法如何去逆矩阵_矩阵乘法和求逆

    矩阵乘法如何去逆矩阵 数据科学与机器学习的线性代数 (LINEAR ALGEBRA FOR DATA SCIENCE AND MACHINE LEARNING) We are going to tre ...

  3. python求1到n的乘积_Python实现矩阵相乘的三种方法小结

    问题描述 分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为22∗2222∗22, 23∗2323∗23, 24∗2424∗24, 25∗2525∗25, 26∗2626∗26, 27∗2727 ...

  4. C语言 n*n矩阵求值及求逆矩阵

    求出矩阵的值以及输出逆矩阵,英语不好,略拗口. 上代码: #include<stdio.h> #include<string.h> #include<math.h> ...

  5. ker矩阵是什么意思_用初等变换求逆矩阵的小小解释

    在我们学习逆矩阵的过程中,肯定会遇到这样一种求逆矩阵的方法: 若A是一个n阶可逆矩阵, (虚竖线打不出,凑合着看吧!)这一过程中经历了一系列初等行变换,并且我们下结论说: 中的 就是A的逆矩阵! 按逻 ...

  6. 【SIMULINK】simulink实现信号矩阵整合、求逆、转置、分解、向量矩阵相乘(非matlab)

    [SIMULINK]simulink实现信号矩阵整合.求逆.转置.分解.乘(非matlab) simulink实现信号矩阵,并实现分解 simulink实现信号矩阵求逆 simulink实现信号矩阵转 ...

  7. c语言逆值,C语言 n*n矩阵求值及求逆矩阵

    求出矩阵的值以及输出逆矩阵,英语不好,略拗口. 上代码: #include #include #include int map1[110][110],i,j,k,l,m,n,p,vis[110][11 ...

  8. java求矩阵_java实现的n*n矩阵求值及求逆矩阵算法示例

    本文实例讲述了java实现的n*n矩阵求值及求逆矩阵算法.分享给大家供大家参考,具体如下: 先来看看运行结果: java版的写出来了,用的跟c语言相同的算法,然后看看能不能以后加个框做成程序: imp ...

  9. C语言求任意两个矩阵相乘的算法(初学尝试矩阵乘法)

    C语言求任意两个矩阵相乘的算法(不同于大部分规格固定的矩阵乘法) 结果图如下   : 代码如下: //----- 任意两个矩阵相乘 # include <stdio.h> int main ...

最新文章

  1. java继承 映射_hibernate继承关系映射和java反射机制的运用
  2. 指尖检测的几种新方法
  3. Repeater控件的分隔线
  4. python算法编程_Python算法编程
  5. arcgis将点的属性赋值给面
  6. dubbo-admin管理平台搭建
  7. 结构化程序goto语句_C ++ goto语句| 查找输出程序| 套装1
  8. .gitkeep文件的作用
  9. SpringBoot系列: Eclipse+Maven环境准备
  10. ewebeditor for php任意文件上传漏洞
  11. 数据结构与算法必知基础知识
  12. 分类网络 resnet
  13. 全面理解Gatner的企业信息管理成熟度模型
  14. 校园内网服务器维修视频,怎么搭建校园高清视频直播系统
  15. 白帽黑客必备的15个技能点
  16. 微信小程序自定义地址选择器
  17. 为什么别人的移动开发效率是你的2倍?丨课程推广
  18. Layui表格排序例子
  19. EJB到底是什么?(推荐)
  20. conda环境(生信环境搭建)

热门文章

  1. 大白菜装机教程win10_关于联想扬天B41-30-NTZ(L)使用U盘重装Win10系统的详细步骤
  2. https默认端口443_为什么选择80作为默认HTTP端口,选择443作为默认HTTPS端口?
  3. 【钢琴人狂喜】如何利用AI一键转MIDI并编辑,最后用特效钢琴完美演绎出来?(Giant MIDI-Piano+Domino汉化版1.43+Embers特效钢琴)
  4. R语言使用fmsb包可视化基本雷达图(radar chart、蜘蛛图spider plot)、数据预处理(计算每个变量的最大值和最小值、并合并到原数据集)、可视化单个数据对象的雷达图
  5. 软件测试人员到底需不需要懂代码,我来告诉你
  6. 漂亮的字体组合的秘密
  7. 学习笔记:上网认证6 批量wifi 使用 freeradius 实现统一中央认证
  8. 面试题之二:中断服务函数
  9. Bootstrap书籍分类
  10. 服务器系统及软件常见漏洞