// Problem 4: Jacobi and Gauss-Seidel methods #include #include #include #include #include using namespace std; const double TOL = 1e-6; const int MAX_ITER = 100; int main() { // Rearranged system (weakly diagonally dominant): // 7x1 - 3x2 + 4x3 = 6 // 2x1 + 5x2 + 3x3 = -5 // -3x1 + 2x2 + 6x3 = 2 double b[3] = {6, -5, 2}; // Jacobi cout << "Jacobi Method:\n"; vector x = {0, 0, 0}; for (int iter = 1; iter <= MAX_ITER; iter++) { vector x_old = x; x[0] = (b[0] + 3*x_old[1] - 4*x_old[2]) / 7; x[1] = (b[1] - 2*x_old[0] - 3*x_old[2]) / 5; x[2] = (b[2] + 3*x_old[0] - 2*x_old[1]) / 6; double maxDiff = max({fabs(x[0]-x_old[0]), fabs(x[1]-x_old[1]), fabs(x[2]-x_old[2])}); if (maxDiff < TOL) { cout << "Converged in " << iter << " iterations\n"; break; } } for (int i = 0; i < 3; i++) cout << "x" << (i+1) << " = " << fixed << setprecision(6) << x[i] << "\n"; // Gauss-Seidel cout << "\nGauss-Seidel Method:\n"; x = {0, 0, 0}; for (int iter = 1; iter <= MAX_ITER; iter++) { vector x_old = x; x[0] = (b[0] + 3*x[1] - 4*x[2]) / 7; x[1] = (b[1] - 2*x[0] - 3*x[2]) / 5; x[2] = (b[2] + 3*x[0] - 2*x[1]) / 6; double maxDiff = max({fabs(x[0]-x_old[0]), fabs(x[1]-x_old[1]), fabs(x[2]-x_old[2])}); if (maxDiff < TOL) { cout << "Converged in " << iter << " iterations\n"; break; } } for (int i = 0; i < 3; i++) cout << "x" << (i+1) << " = " << fixed << setprecision(6) << x[i] << "\n"; return 0; }