Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define EPS 1e-9
- using namespace std;
- struct Gauss{
- /* 1 1 | 3 5
- 1 -1 | 1 6
- {x+y=3}{x+y=5}
- {x-y=1}{x-y=6}
- */
- void show(vector<vector<double> > a, vector <vector< double> > b)
- {
- for(int i= 0;i< a.size();i ++) {
- for(int j= 0;j < a[i].size(); j ++) printf("%5.2lf ",a[i][j]);
- printf("| ");
- for(int j = 0; j < b[i].size(); j ++) printf("%5.2lf ",b[i][j]);
- printf("\n");
- }
- }
- int gauss(vector< vector< double > > &a , vector< vector<double > > &b)
- {
- // AX = B;
- // Here n -> # of equations, m = number of column in A, p = # column in B
- // The function returns the rank of the matrix
- int n = a.size(), m= a[0].size() , p = b[0].size();
- int r = 0;
- for(int c = 0; c < m && r < n ; c ++ ) {
- int j = r;
- for(int i = r+1; i < n; i ++ ) {
- if(fabs(a[i][c]) > fabs(a[j][c])) j= i;
- }
- if(fabs(a[j][c]) < EPS) continue;
- if(j!=r)swap(a[j],a[r]), swap(b[j],b[r]);
- double s = 1./a[r][c];
- for(int i = 0; i < m ; i ++ ) a[r][i] *= s;
- for(int i = 0; i < p ; i ++ ) b[r][i] *= s;
- for(int i=0;i < n ;i ++) if(i!=r) {
- double t = a[i][c];
- for(int j = 0; j < m ; j ++ ) a[i][j] -= t * a[r][j];
- for(int j = 0; j < p ; j ++ ) b[i][j] -= t * b[r][j];
- }
- r++;
- }
- return r;
- }
- }g;
- int main()
- {
- double a[][2] = {{1,1},{1,-1}};
- double b[][2] = {{3,1}, {5,6}};
- vector< vector<double> > A(2, vector<double> (2,0));
- for(int i = 0;i<2; i ++) {
- for(int j = 0; j < 2;j++) {
- A[i][j] = a[i][j];
- }
- }
- vector< vector<double> > B(2 , vector<double> (2,0));
- for(int i = 0; i <2;i ++ ) {
- for(int j = 0; j < 2; j ++ ) B[j][i] = b[i][j];
- }
- g.gauss(A,B);
- for(int i = 0; i < 2;i ++) printf("%lf ",B[i][0]); puts("");
- for(int i = 0; i < 2;i ++) printf("%lf ",B[i][1]);
- return 0;
- }
Add Comment
Please, Sign In to add comment