Question: Below is a c++ code for gaussian elimination. I am reading in a data file that has integer N, followed by N*N doubles representing the
Below is a c++ code for gaussian elimination. I am reading in a data file that has integer N, followed by N*N doubles representing the matrix A, and lastly N values representing the vector b. Howevre I am trying to print the results following computing the matrix using Gaussaian to the screen and to an output text file. Neither results are working, not sure if I am calling my variable wrong. See code below. Also my data file has over 400 integers.
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
//create a 2D vector of doubles
vector< vector< double > > matrix;
ofstream fout; // declares an object of type ofstream
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("q1data.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
// 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 << ' '; // 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 */
cout << "After Gauss-Jordan elimination, augmented matrix is: " << endl << endl;
//test
cout << "T E S T " << endl;
cout << matrix [i][j] << endl << endl;
for (i = 0; i < num_lines; i++)
{
for (j = 0; j < 2 * num_lines; j++)
// test
ofstream out_data("testing.txt");
fout << matrix[i][j];
cout << "test";
cout << endl << endl;
}
return 0;
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
