矩阵求逆

摘要:
=j){40for{//在当前矩阵进行变换时,对所求矩阵也进行同样的变换41a[j][k]=%p;42}43a[j][i]=0;44}45}46}47}48intmain(){49scanf;50for{51for{52scanf;53}54a[i][n+i]=1;//另一半初始化为元矩阵55}56m=n˂˂1;57gauss();58for{59for{60printf("%lld%c",a[i][j],j==m?

LuoguP4783

思路:

求A的逆矩阵,把A和单位矩阵I放在一个矩阵里

对A进行加减消元使A化成单位矩阵

此时原来单位矩阵转化成逆矩阵

原理大概就是 A(逆) * [A I] = [I A(逆)]

Code:

1 #include <bits/stdc++.h>
2 #define ll long long
3 using namespacestd;
4 const double eps = 1E-8;
5 const int p = 1e9 + 7;
6 const int N = 405;
7 intn, 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     returnre;
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
");
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 intmain () {
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 ? '' : ' ');
61 }
62 }
63     return 0;
64 }
View Code

免责声明:文章转载自《矩阵求逆》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【转】Exchange Server 的防火墙开放端口Qt 自定义事件详细实例(继承QEvent,然后QCoreApplication::postEvent()、sendEvent())下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# ——遍历控件按顺序存到二维数组

 如上图需要把它们按这个顺序存到二维数组中 先存到一维数组,再用冒泡法排序,然后后存到二维数组 public Control[] tableLayoutPanelControls = new Control[16]; //先存到以为数组 public Control[,] tableLayoutPanelControlss = new Contro...

深入理解Faiss 原理&amp;amp;源码 (一) 编译

目录 深入理解Faiss 原理&源码 (一) 编译 mac下安装 安装mac xcode工具包 安装 openblas 安装swig 安装libomp 编译faiss 附录 深入理解Faiss 原理&源码 (一) 编译 Faiss系列, 从单机lib到构建大规模分布式向量检索系统, 且听我娓娓道来 Faiss是什么? F...

矩阵求逆c++实现

矩阵求逆c++实现 http://www.2cto.com/kf/201405/297388.html 2014-05-02     我来说两句    来源:矩阵求逆c++实现   收藏    我要投稿 高斯消元法可以用来找出一个可逆矩阵的逆矩阵。设A 为一个N * N的矩阵,其逆矩阵可被两个分块矩阵表示出来。将一个N * N单位矩阵 放在...

Java Array二维数组使用

二维数组:元素为一维数组的数组 package myArray.arrayarray; /* *二维数组:元素为一维数组的数组 * * 定义格式: * A:数组类型[][] 数组名; (推荐用法) * B:数组类型 数组名[][]; * C:数组类型[] 数组名[]; * 初始化: *...

matlab练习程序(动感模糊)

  其实在matlab中调用系统函数fspecial和imfilter这两个函数就能很简单的实现动感模糊,不过我可不想就这样简单的实现,所以就自己从头写了。动感模糊最复杂的就是构造卷积矩阵了,卷积矩阵由两个参数决定,模糊半径r和模糊角度theta,通过这两个参数,就能构造不同的模板矩阵,而图像卷积时则和普通的卷积没有什么区别。   构造模板矩阵,首先是通过...

说说高斯过程回归

说说高斯过程回归作者介绍:新浪微博ID @妖僧老冯, 9月将赴南京大学(直博生),方向是机器学习与数据挖掘 编者:小便和作者打过几次交道,一直以为是他是已“修成正果”的某某博士,便“毕恭毕敬”地去邀请他写篇牛文。细聊之后才得知小伙子原来是90后,9月份才博士入学。这篇文章对GP进行了深度科普,数学公式是有一些的,但耐心读读,都不是问题的。高斯过程是机器学习...