矩阵求逆
时间:2019-11-10
本文章向大家介绍矩阵求逆,主要包括矩阵求逆使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
思路:
求A的逆矩阵,把A和单位矩阵I放在一个矩阵里
对A进行加减消元使A化成单位矩阵
此时原来单位矩阵转化成逆矩阵
原理大概就是 A(逆) * [A I] = [I A(逆)]
Code:
1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const double eps = 1E-8; 5 const int p = 1e9 + 7; 6 const int N = 405; 7 int n, m; 8 ll a[N][N << 1]; 9 ll pw(ll x, ll y) { 10 ll re = 1; 11 for (; y; y >>= 1) { 12 if (y & 1) { 13 re = re * x % p; 14 } 15 x = x * x % p; 16 } 17 return re; 18 } 19 void gauss() {//高斯消元 20 for (int i = 1; i <= n; i++) { 21 int pre = i; 22 for (int j = i + 1; j <= n; j++) { 23 if (fabs(a[j][i] - a[pre][i]) >= eps) { 24 pre = j; 25 } 26 } 27 for (int k = 1; k <= m; k++) {//交换着两行,记得把右侧新添矩阵也交换 28 swap(a[i][k], a[pre][k]); 29 } 30 if (fabs(a[i][i]) <= eps) { 31 printf("No Solution\n"); 32 exit(0); 33 } 34 ll inv = pw(a[i][i], p - 2);//求逆元 35 for (int k = i; k <= m; k++) { 36 a[i][k] = a[i][k] * inv % p; 37 } 38 for (int j = 1; j <= n; j++) { 39 if (i != j) { 40 for (int k = i + 1; k <= m; k++) {//在当前矩阵进行变换时,对所求矩阵也进行同样的变换 41 a[j][k] = (a[j][k] - a[j][i] * a[i][k] % p + p) % p; 42 } 43 a[j][i] = 0; 44 } 45 } 46 } 47 } 48 int main () { 49 scanf("%d", &n); 50 for (int i = 1; i <= n; i++) { 51 for (int j = 1; j <= n; j++) { 52 scanf("%lld", &a[i][j]); 53 } 54 a[i][n + i] = 1;//另一半初始化为元矩阵 55 } 56 m = n << 1; 57 gauss(); 58 for (int i = 1; i <= n; i++) { 59 for (int j = n + 1; j <= m; j++) { 60 printf("%lld%c", a[i][j], j == m ? '\n' : ' '); 61 } 62 } 63 return 0; 64 }
原文地址:https://www.cnblogs.com/Sundial/p/11830555.html
- Windows主机管理系统Websitepanel
- 自定义Appfabric Cache 配置提供程序
- 2017年发生在上海的科技大新闻
- REST当中为什么要使用HTTP PUT
- 推荐一个在Linux/Unix上架设ASP.NET的 WEB服务器--Jexus
- 人工智能与工业融合:没有你,对我很重要……
- DeepMind哈萨比斯对话哈里王子:2018年AI最大的突破在生物或化学
- 提升用户体验,微信小程序“授权失败”场景的优雅处理
- extjs 基础部分
- WordPress 网站开发“微信小程序”实战(二)
- Extjs form 组件
- Extjs grid 组件
- WordPress 网站开发“微信小程序”实战(三)
- Extjs mvc
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP共享内存详解 前言
- 为了--force-pivoting参数,我问候了sqlmap开发者
- flexible array柔性数组、不定长的数据结构Struct详解
- 如何优雅打印nginx header和body
- Go的CSP并发模型实现:M, P, G
- Golang依赖管理工具:glide从入门到精通使用
- Redis的Multi的内幕真相
- shell expect权威指南和实战
- 3种方式限制ip访问Oracle数据库
- 服务发现之consul的介绍、部署和使用
- Mybatis处理查询map 为null 导致查询map无该key对象
- 深入对比TOML,JSON和YAML
- consul配置参数大全、详解、总结
- 跳跃表原理和实现
- 你动、蒙娜丽莎跟着一起动,OpenCV这么用,表情口型造假更难防了