1
1
#include <math.h>
2
2
#include <stdio.h>
3
3
#include <stdlib.h>
4
+ #include <string.h>
4
5
5
6
#define MAX_RAND 1.0e2 //1.0e6
6
7
7
- void gen_augmented_matrix (double * * matrix , int n );
8
+ void swap_pivot (double * * matrix , int col , int n );
9
+ void generate_aug_matrix (double * * matrix , int n );
10
+ void print_aug_matrix (double * * matrix , int n );
8
11
void print_usage (char * prog );
9
12
10
13
int main (int argc , char * * argv ) {
@@ -14,21 +17,47 @@ int main(int argc, char **argv) {
14
17
exit (1 );
15
18
}
16
19
17
- int n , i , j , k ;
20
+ int n ;
21
+ int i , j , k ;
22
+ double factor ;
23
+ double interm ;
24
+ double * result ;
18
25
double * * matrix ;
19
26
20
27
srand (time (NULL ));
21
28
srand48 (time (NULL ));
22
29
23
30
n = atoi (argv [1 ]);
24
31
32
+ result = malloc (n * sizeof (double ));
33
+
34
+ memset (result , 0 , n * sizeof (double ));
35
+
25
36
matrix = malloc (n * sizeof (double ));
26
37
27
38
for (i = 0 ; i < n ; ++ i ) {
28
39
matrix [i ] = malloc ((n + 1 ) * sizeof (double ));
29
40
}
30
41
31
- gen_augmented_matrix (matrix , n );
42
+ generate_aug_matrix (matrix , n );
43
+
44
+ for (i = 0 ; i < n ; ++ i ) {
45
+ swap_pivot (matrix , i , n );
46
+
47
+ print_aug_matrix (matrix , n );
48
+
49
+ for (j = i + 1 ; j < n ; ++ j ) {
50
+ factor = matrix [j ][i ] / matrix [i ][i ];
51
+
52
+ printf ("Factor %f\n" , factor );
53
+
54
+ for (k = 0 ; k < n + 1 ; ++ k ) {
55
+ interm = factor * matrix [i ][k ];
56
+
57
+ matrix [j ][k ] -= interm ;
58
+ }
59
+ }
60
+ }
32
61
33
62
for (i = 0 ; i < n ; ++ i ) {
34
63
free (matrix [i ]);
@@ -39,7 +68,31 @@ int main(int argc, char **argv) {
39
68
return 0 ;
40
69
}
41
70
42
- void gen_augmented_matrix (double * * matrix , int n ) {
71
+ void swap_pivot (double * * matrix , int col , int n ) {
72
+ int i ;
73
+ int pivot ;
74
+ double max ;
75
+ double value ;
76
+ double * temp ;
77
+
78
+ for (i = col ; i < n ; ++ i ) {
79
+ value = fabs (matrix [i ][col ]);
80
+
81
+ if (value > max ) {
82
+ pivot = i ;
83
+
84
+ max = value ;
85
+ }
86
+ }
87
+
88
+ temp = matrix [pivot ];
89
+
90
+ matrix [pivot ] = matrix [col ];
91
+
92
+ matrix [col ] = temp ;
93
+ }
94
+
95
+ void generate_aug_matrix (double * * matrix , int n ) {
43
96
int i , j ;
44
97
45
98
for (i = 0 ; i < n ; ++ i ) {
@@ -53,6 +106,22 @@ void gen_augmented_matrix(double **matrix, int n) {
53
106
}
54
107
}
55
108
109
+ void print_aug_matrix (double * * matrix , int n ) {
110
+ int i , j ;
111
+
112
+ printf ("\n" );
113
+
114
+ for (i = 0 ; i < n ; ++ i ) {
115
+ for (j = 0 ; j < n ; ++ j ) {
116
+ printf ("%.2f\t" , matrix [i ][j ]);
117
+ }
118
+
119
+ printf ("\tx%i\t%.2f\n" , i + 1 , matrix [i ][n ]);
120
+ }
121
+
122
+ printf ("\n" );
123
+ }
124
+
56
125
void print_usage (char * prog ) {
57
126
printf ("%s n threads\n" , prog );
58
127
printf ("n - Size of the matrix\n" );
0 commit comments