### 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.

 ``123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188`` `````` #include #include #include #include #include #include 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 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.