矩阵求逆,矩阵转置,矩阵相乘
矩阵求逆,矩阵转置,矩阵相乘
矩阵求逆用的高斯消元
#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;
}
矩阵求逆,矩阵转置,矩阵相乘相关推荐
- c++矩阵转置_python3 单行代码实现矩阵相乘
Python中有许多模块用来进行科学与数学的运算. 例如,numpy就是其中的一个,而且numpy中就有大量.好使的矩阵乘法的函数. 即便如此,我们还是可以探究一下如何用Python的自带函数,在一行 ...
- 矩阵以及转置矩阵python_Python实现的矩阵转置与矩阵相乘运算示例
本文实例讲述了Python实现的矩阵转置与矩阵相乘运算.分享给大家供大家参考,具体如下: 矩阵转置 方法一 :使用常规的思路 def transpose(M): # 初始化转置后的矩阵 result ...
- numpy 矩阵与向量相乘_高能!8段代码演示Numpy数据运算的神操作
作者|王天庆 来源|大数据(ID:hzdashuju) 导读:本文介绍一下在Python科学计算中非常重要的一个库--Numpy. Numpy是Numerical Python extensions ...
- 不是方阵有逆矩阵吗_吴恩达机器学习笔记18逆矩阵、矩阵转置
本文是吴恩达<机器学习>视频笔记第18篇,对应第1周第18个视频. "Linear Algebra review(optional)--Inverse and transpose ...
- python【蓝桥杯vip练习题库】ADV-304矩阵转置
**试题 算法提高 矩阵转置 资源限制 时间限制:1.0s 内存限制:256.0MB [问题描述] 给定一个n×m矩阵相乘,求它的转置.其中1≤n≤20,1≤m≤20,矩阵中的每个元素都在整数类型(4 ...
- c++矩阵转置_线性代数中的向量矩阵
目录 前言 符号约定 向量的基本性质 [定义,基向量,线性相关/无关*,向量点积] 矩阵的基本性质 [转置,广播,线性变换] 矩阵基本运算 [矩阵相乘,矩阵点积] 行列式 [概念,性质,右手法则,行列 ...
- Python矩阵计算类:计算矩阵加和、矩阵乘积、矩阵转置、矩阵行列式值、伴随矩阵和逆矩阵
最近在Python程序设计中遇到一道设计矩阵计算类的题目,原题目要求计算矩阵加和和矩阵乘积,而我出于设计和挑战自己的目的,为自己增加难度,因此设计出矩阵计算类,不仅可以求出矩阵加和和矩阵乘积,还能计算 ...
- 二维矩阵乘法、矩阵转置、 矩阵与向量乘法(java实现)
二维矩阵乘法.矩阵转置. 矩阵与向量乘法(java实现) 相关代码如下: package algorithms; //矩阵库 public class Matrisx { /***向量点相乘 doub ...
- python实现矩阵转置,乘法。 不使用numpy模块
从csv文件读取矩阵内容,实现矩阵的转置,乘法.判断是否为矩阵等功能,非矩阵时的自定义异常.不使用numpy模块. 完整代码: import csv import pandas as pd# 读取文件 ...
最新文章
- SQL命令执行数据库备份
- windows time 服务无法启动 错误1058 解决方法
- C++中对象数组的构造函数和析构函数调用
- 姚文详(Joseph Yiu):《ARM Cortex-M0权威指南》中文版目录
- python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...
- LayoutInflater中调用系统服务
- 【转】xargs命令详解,xargs与管道的区别
- python和lua哪个有前途_(转)LUA与python根本就不具有可比性
- 继承Comparable接口来实现排序
- localdatetime转化为date_LocalDateTime用法(jdk1.8 )
- 循环单链表 python_循环单链表报错
- matlab 0001,2014-11-03号 MatLab初探0001
- 回溯---含有相同元素求子集
- matlab 求二值图像图形的面积和重心
- 单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择...
- JS键盘KEYCODE值参考
- 南京邮电大学812自动控制原理高分经验
- 蓝牙模块有哪些种类?BLE低功耗蓝牙模块有什么特点?
- 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程
- javascript 幻灯片代码(含自动播放)