Gaussian elimination

Hi there I have tried to write a code that reads in values from an nxn matrix and then print those values out. I think I have succeeded in doing this. The next step I have tried is to solve the matrix using Gaussian elimination but I can't get the code to print out the values. Could someone please have a look at this and tell me where I'm going wrong. Thanks, Harry.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
 #include <cstdlib>
#include <cmath>
#include <vector>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;


int main()
{
    //create a 2D vector of doubles 
	vector< vector< double > > matrix; 


	int num_lines = 0;
    double temporary, r;
    int i, j, k, dimension, temp; /* counter variables for loops */


	// Open a file containing the matrix data
	ifstream myFile("test_data2.txt");
	// Check if file is open
	if(myFile.is_open())
	{
        // First step is to detect matrix size by assuming matrix is
        // square and counting number of columns.
        
        // Tempoary variable to hold current line to process
        string line;
        
        // Tempoary variable to hold number of rows and cols in square matrix
        int num_lines = 0;
        
        // Count rows / cols
        while(getline(myFile, line))
        {
            num_lines ++;
        }
    
        // Reset EOF flag
        myFile.clear();
        
        // Reset to start of file
        myFile.seekg(0, myFile.beg);
        
        // Second step is to grab lines from the file and process them
        // splitting each line into substrings and converting them into
        // doubles
        
        // For each line
        for(int l = 0; l < num_lines; l ++)
        {
            // Process line by line
            getline(myFile, line);
            
            // Tempoary vector to hold rows of matrix data
            vector<double> temp;
            
            // Tempoary variable to hold search positions
            int start = 0;
            int end;
            int length;
            
            // Get value by value
            for(int n = 0; n < num_lines; n ++)
            {
                // Break line down by finding commas
                end = line.find(',', start);
                length = end - start;
                
                // Extract substring
                string tempstr = line.substr(start, length);
                
                // Set next value of start
                start = end + 1;
                
                // Convert to double
                temp.push_back(atof(tempstr.c_str()));
            }
            
            // Add row to matrix
            matrix.push_back(temp);
        }
        // Close input file
		myFile.close();
	} else {
	    // If input file failed to open, print an error
		cout << "Error opening input file" << endl;
	}
	// Print out the matrix (will do nothing if input file open failed)
	cout << "Print out input file." << endl;
	
	for(int i = 0; i < matrix.size(); i ++)
	{
		for(int j = 0; j < matrix[i].size(); j ++)
		{
			cout << matrix[i][j];
            // Add commas and new lines when required
            // Remember not to add commas after rightmost values, or
            // a new line at the end of the last value
			if(j < matrix[i].size() - 1)
			{
				cout << ' '; // Character, not string
			}
			else
			{
				if(i < matrix[i].size() - 1)
				{
					cout << '\n'; // Character, not string
				}
			}
		}
	}

	




	 for (i = 0; i < num_lines; i++)
        for (j = num_lines; j < 2 * num_lines; j++)
            if (i == j % num_lines)
                matrix[i][j] = 1;
            else
                matrix[i][j] = 0;

    /* using gauss-jordan elimination */
    for (j = 0; j < num_lines; j++) {
        temp = j;

        /* finding maximum jth column element in last (dimension-j) rows */
        for (i = j + 1; i < num_lines; i++)
            if (matrix[i][j] > matrix[temp][j])
                temp = i;

        

        /* swapping row which has maximum jth column element */
        if (temp != j)
            for (k = 0; k < 2 * num_lines; k++) {
                temporary = matrix[j][k];
                matrix[j][k] = matrix[temp][k];
                matrix[temp][k] = temporary;
            }

        /* performing row operations to form required identity matrix out of the input matrix */
        for (i = 0; i < num_lines; i++)
            if (i != j) {
                r = matrix[i][j];
                for (k = 0; k < 2 * num_lines; k++)
                    matrix[i][k] -= matrix[j][k] * r / matrix[j][j];
            } else {
                r = matrix[i][j];
                for (k = 0; k < 2 * dimension; k++)
                    matrix[i][k] /= r;
            }
    }

    /* Display augmented matrix */
    printf("\n After Gauss-Jordan elimination, augmented matrix is : \n\n");

    for (i = 0; i < num_lines; i++) {
        for (j = 0; j < 2 * num_lines; j++)
            printf("  %4.2f", matrix[i][j]);
        printf("\n");
    }


    /* displaying inverse of the non-singular matrix */
    printf("\n\n\n The inverse of the entered non-singular matrix is : \n\n");

    for (i = 0; i < num_lines; i++) {
        for (j = num_lines; j < 2 * num_lines; j++)
            printf("  %.5f", matrix[i][j]);
        printf("\n");
    }



    return 0;
}
// EXAMPLE FILE
//1,2,3
//4.5,6.7,8.8
//-110,-55.3,+53.723
// END OF EXAMPLE FILE REMOVE COMMENTS AT TOP AND BOTTOM AND "//" characters before use. Save as "matrix.csv". 
Topic archived. No new replies allowed.