生活随笔
收集整理的這篇文章主要介紹了
Gauss高斯消元——模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
就是線性代數的初等行變化:
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_backusing namespace std
;typedef long long ll
;
typedef pair
<int, int> pii
;
typedef unsigned long long ull
;const double pi
= acos(-1.0);
const double eps
= 1e-7;
const int inf
= 0x3f3f3f3f;inline ll
read() {ll f
= 1, x
= 0;char c
= getchar();while(c
< '0' || c
> '9') {if(c
== '-') f
= -1;c
= getchar();}while(c
>= '0' && c
<= '9') {x
= (x
<< 1) + (x
<< 3) + (c
^ 48);c
= getchar();}return f
* x
;
}const int N
= 110;double maze
[N
][N
], ans
[N
];
int n
;bool Gauss() {for(int i
= 1; i
<= n
; i
++) {int max_r
= i
;for(int j
= i
+ 1; j
<= n
; j
++)if(fabs(maze
[max_r
][i
]) < fabs(maze
[j
][i
]))max_r
= j
;if(fabs(maze
[max_r
][i
]) < eps
) return true;if(max_r
!= i
) swap(maze
[i
], maze
[max_r
]);double temp
= maze
[i
][i
];for(int j
= i
; j
<= n
+ 1; j
++)maze
[i
][j
] /= temp
;for(int j
= i
+ 1; j
<= n
; j
++) {temp
= maze
[j
][i
];for(int k
= i
; k
<= n
+ 1; k
++)maze
[j
][k
] -= temp
* maze
[i
][k
];}}for(int i
= n
; i
>= 1; i
--) {ans
[i
] = maze
[i
][n
+ 1];for(int j
= 1; j
< i
; j
++) {double temp
= maze
[j
][i
];maze
[j
][i
] -= temp
;maze
[j
][n
+ 1] -= maze
[i
][n
+ 1] * temp
;}}return false;
}int main
() {n
= read();for(int i
= 1; i
<= n
; i
++) {maze
[i
][0] = i
;for(int j
= 1; j
<= n
+ 1; j
++)maze
[i
][j
] = read();}if(Gauss()) {puts("No Solution");return 0;}for(int i
= 1; i
<= n
; i
++)printf("%.2f\n", ans
[i
]);return 0;
}
總結
以上是生活随笔為你收集整理的Gauss高斯消元——模板的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。