矩阵求逆,矩阵转置,矩阵相乘

矩阵求逆用的高斯消元

#include <bits/stdc++.h>using namespace std;const double eps = 1e-8;class Matrix
{private:int n, m;float mat[50][50] = {0}, mat_b[50][50] = {0};public://输入矩阵void get_matrix();//转置矩阵Matrix T();//求逆矩阵Matrix ling();//合并矩阵Matrix add(Matrix &B);//重载运算符,矩阵乘法Matrix operator*(Matrix &B);//重载运算符,输出coutfriend ostream &operator<<(ostream &, Matrix &);
};void Matrix::get_matrix()
{puts("输入矩阵行和列");cin >> n >> m;puts("请输入矩阵的内容");for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> mat[i][j];mat_b[i][j] = (i == j ? 1.0 : 0.0);}}
}Matrix Matrix::T()
{Matrix C;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){C.mat[j][i] = mat[i][j];}}C.n = m;C.m = n;return C;
}Matrix Matrix::add(Matrix &B)
{B.n = n;B.m = m;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){B.mat[i][j] = mat[i][j];}}for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){B.mat_b[i][j] = mat_b[i][j];}}return B;
}Matrix Matrix::ling()
{Matrix C;C = this->add(C);if (n != m){puts("错误");}else{for (int i = 1; i <= n; ++i){ //枚举当前处理到第几列for (int j = i; j <= n; ++j){ //找到一个第i列不为空的行if (fabs(C.mat[i][i]) > eps){for (int k = i; k <= n; ++k) //交换i,j行swap(C.mat[i][k], C.mat[j][k]);break;}}// for(int k = 1; k <= n; k++) {//     for(int l = 1; l <= n; l++) {//         cout << C.mat[k][l] << " ";//     }//     cout << endl;// }// cout << endl;if (fabs(C.mat[i][i]) < eps){cout << "不存在逆矩阵" << endl;return C;}//这里就是将第i行下面所有行的第i列清空,变成一个阶梯型的矩阵double aii_inv = 1.0 / C.mat[i][i];//将第i行都乘上a[i][i]的逆C.mat[i][i] = 1.0;for (int j = i + 1; j <= n; ++j){C.mat[i][j] = C.mat[i][j] * aii_inv;}for (int j = 1; j <= n; ++j){C.mat_b[i][j] = C.mat_b[i][j] * aii_inv;}//将第i行下面的所有第i列的元素值清空for (int j = i + 1; j <= n; ++j){for (int k = i + 1; k <= n; ++k){C.mat[j][k] = C.mat[j][k] - C.mat[i][k] * C.mat[j][i];}for (int k = 1; k <= n; ++k){C.mat_b[j][k] = C.mat_b[j][k] - C.mat_b[i][k] * C.mat[j][i];}C.mat[j][i] = 0.0;}}// output(a,b);//从下往上第推删除A矩阵第i列后的所有元素for (int i = n; i >= 1; --i){for (int j = i - 1; j >= 1; --j){for (int k = 1; k <= n; ++k){//处理的是第i行和第j行的数据C.mat_b[j][k] = C.mat_b[j][k] - C.mat[j][i] * C.mat_b[i][k];}C.mat[j][i] = 0.0;}}//到了这里说明A矩阵已经变为单位矩阵了,此时的B矩阵就是A矩阵的逆矩阵了for (int i = 1; i <= n; ++i){for (int j = 1; j <= n; ++j){C.mat[i][j] = C.mat_b[i][j];}}}return C;
}ostream &operator<<(ostream &out, Matrix &obj)
{for (int i = 1; i <= obj.n; i++){for (int j = 1; j <= obj.m; j++){out << obj.mat[i][j] << " ";}out << endl;}return out;
}Matrix Matrix::operator*(Matrix &B)
{Matrix C;C = this->add(C);if (m != B.n){cout << "无法匹配" << endl;return B;}else{for (int i = 1; i <= n; i++){for (int j = 1; j <= B.m; j++){for (int k = 1; k <= m; k++){C.mat[i][j] += mat[i][k] * B.mat[k][j];}}}C.n = n;C.m = B.m;return C;}
}int main()
{Matrix mat1, mat2, mat3;mat1.get_matrix();puts("矩阵求逆");mat2 = mat1.ling();cout << mat2 << endl;puts("矩阵转置");mat3 = mat1.T();cout << mat3 << endl;puts("矩阵相乘");mat1.get_matrix();mat2.get_matrix();mat3 = mat1 * mat2;cout << mat3 << endl;system("pause");return 0;
}

矩阵求逆,矩阵转置,矩阵相乘相关推荐

  1. c++矩阵转置_python3 单行代码实现矩阵相乘

    Python中有许多模块用来进行科学与数学的运算. 例如,numpy就是其中的一个,而且numpy中就有大量.好使的矩阵乘法的函数. 即便如此,我们还是可以探究一下如何用Python的自带函数,在一行 ...

  2. 矩阵以及转置矩阵python_Python实现的矩阵转置与矩阵相乘运算示例

    本文实例讲述了Python实现的矩阵转置与矩阵相乘运算.分享给大家供大家参考,具体如下: 矩阵转置 方法一 :使用常规的思路 def transpose(M): # 初始化转置后的矩阵 result ...

  3. numpy 矩阵与向量相乘_高能!8段代码演示Numpy数据运算的神操作

    作者|王天庆 来源|大数据(ID:hzdashuju) 导读:本文介绍一下在Python科学计算中非常重要的一个库--Numpy. Numpy是Numerical Python extensions ...

  4. 不是方阵有逆矩阵吗_吴恩达机器学习笔记18逆矩阵、矩阵转置

    本文是吴恩达<机器学习>视频笔记第18篇,对应第1周第18个视频. "Linear Algebra review(optional)--Inverse and transpose ...

  5. python【蓝桥杯vip练习题库】ADV-304矩阵转置

    **试题 算法提高 矩阵转置 资源限制 时间限制:1.0s 内存限制:256.0MB [问题描述] 给定一个n×m矩阵相乘,求它的转置.其中1≤n≤20,1≤m≤20,矩阵中的每个元素都在整数类型(4 ...

  6. c++矩阵转置_线性代数中的向量矩阵

    目录 前言 符号约定 向量的基本性质 [定义,基向量,线性相关/无关*,向量点积] 矩阵的基本性质 [转置,广播,线性变换] 矩阵基本运算 [矩阵相乘,矩阵点积] 行列式 [概念,性质,右手法则,行列 ...

  7. Python矩阵计算类:计算矩阵加和、矩阵乘积、矩阵转置、矩阵行列式值、伴随矩阵和逆矩阵

    最近在Python程序设计中遇到一道设计矩阵计算类的题目,原题目要求计算矩阵加和和矩阵乘积,而我出于设计和挑战自己的目的,为自己增加难度,因此设计出矩阵计算类,不仅可以求出矩阵加和和矩阵乘积,还能计算 ...

  8. 二维矩阵乘法、矩阵转置、 矩阵与向量乘法(java实现)

    二维矩阵乘法.矩阵转置. 矩阵与向量乘法(java实现) 相关代码如下: package algorithms; //矩阵库 public class Matrisx { /***向量点相乘 doub ...

  9. python实现矩阵转置,乘法。 不使用numpy模块

    从csv文件读取矩阵内容,实现矩阵的转置,乘法.判断是否为矩阵等功能,非矩阵时的自定义异常.不使用numpy模块. 完整代码: import csv import pandas as pd# 读取文件 ...

最新文章

  1. SQL命令执行数据库备份
  2. windows time 服务无法启动 错误1058 解决方法
  3. C++中对象数组的构造函数和析构函数调用
  4. 姚文详(Joseph Yiu):《ARM Cortex-M0权威指南》中文版目录
  5. python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...
  6. LayoutInflater中调用系统服务
  7. 【转】xargs命令详解,xargs与管道的区别
  8. python和lua哪个有前途_(转)LUA与python根本就不具有可比性
  9. 继承Comparable接口来实现排序
  10. localdatetime转化为date_LocalDateTime用法(jdk1.8 )
  11. 循环单链表 python_循环单链表报错
  12. matlab 0001,2014-11-03号 MatLab初探0001
  13. 回溯---含有相同元素求子集
  14. matlab 求二值图像图形的面积和重心
  15. 单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择...
  16. JS键盘KEYCODE值参考
  17. 南京邮电大学812自动控制原理高分经验
  18. 蓝牙模块有哪些种类?BLE低功耗蓝牙模块有什么特点?
  19. 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程
  20. javascript 幻灯片代码(含自动播放)

热门文章

  1. 解决前置音频线的接法
  2. 概率论考研笔记(三)
  3. EasyUI快速入门实战教程(一)
  4. 学校校园教务老师选课排课系统 毕业设计毕设源码毕业论文参考(1)功能概要
  5. 在GeoServer中使用Udig配置的地图样式
  6. Java 实现Dbhelper 支持大数据增删改
  7. 【CSDN编程竞赛】赛后总结
  8. xposed开发11 - 微信红包
  9. 服务器2012打开远程端口,Windows Server 2012远程默认端口3389的修改
  10. 基于Android社区生鲜O2O订购系统设计与实现 毕业设计-附源码231443