gaussi

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <math.h>
 4 #include <time.h>
 5 #include <stdlib.h>
 6 using namespace std;
 7 const int MAXN = 10000;
 8 double a[MAXN][MAXN];
 9 double b[MAXN];
10 double x[MAXN];
11 int main()
12 {
13     int n=3;
14     double l;
15     int i,number;
16     double sum;
17     srand((unsigned) time(NULL)); 
18     printf("a[][]:
");
19     for(int i = 0;i<n;i++){
20         for(int j = 0;j<n;j++){
21             number = rand() % 11;
22             a[i][j]=(double)(number*1.131121);
23             printf("%f  ",a[i][j]);
24             sum+=a[i][j];
25         }
26         cout << endl;
27         b[i]=sum;
28         sum=0;
29     }
30     ///消元过程
31     for(int k = 0;k<n-1;k++){///消元行
32         for(int i = k+1;i<n;i++){///被消元行
33             l = a[i][k]/a[k][k];
34             for(int j = k;j<n;j++){
35                 a[i][j]-=l*a[k][j];
36             }
37             b[i]-=b[k]*l;
38         }
39     }
40     ///回带过程
41     for(int i = n-1;i>=0;i--){
42             x[i] = b[i];
43         for(int j = n-1;j>i;j--){
44             x[i] -= a[i][j]*x[j];
45         }
46         x[i] /= a[i][i];
47     }
48     ///高斯消元法输出 
49     printf("x[]:(gaussi)
");
50      for(int i = 0;i<n;i++){
51         printf("%.6f  ",x[i]);
52     }
53     cout << endl;
54 
55     //------------------------- 
56 
57     double maxs;
58     ///消元过程
59     for(int k = 0;k<n-1;k++){///消元行
60         int cur = k;
61         maxs = fabs(a[k][k]);
62         for(int i = k;i<n;i++)if(maxs<fabs(a[i][k])){maxs = fabs(a[i][k]);cur = i;}///选主元
63         if(cur != k){
64             double temp;
65             for(int j = k;j<n;j++){
66                 temp = a[k][j];
67                 a[k][j] = a[cur][j];
68                 a[cur][j] = temp;
69             }
70             temp = b[k];b[k] = b[cur];b[cur] = temp;
71         }
72 
73         for(int i = k+1;i<n;i++){///被消元行
74             l = a[i][k]/a[k][k];
75             for(int j = k;j<n;j++){
76                 a[i][j]-=l*a[k][j];
77             }
78             b[i]-=b[k]*l;
79         }
80     }
81 
82     ///回带过程
83     for(int i = n-1;i>=0;i--){
84             x[i] = b[i];
85         for(int j = n-1;j>i;j--){
86             x[i] -= a[i][j]*x[j];
87         }
88         x[i] /= a[i][i];
89     }
90     ///高斯列主元素消元法输出 
91      printf("x[]:(gaussi_row)
");
92      for(int i = 0;i<n;i++){
93         printf("%.6f  ",x[i]);
94     }
95     cout << endl;
96     return 0;
97 }
原文地址:https://www.cnblogs.com/DixinFan/p/9750582.html