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 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 << ' '; // 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

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!