#include class Vector { public: double x[3]; Vector operator+(Vector &v) { Vector z; int i; for (i = 0; i < 3; i = i + 1) z.x[i] = x[i] + v.x[i]; return(z); } }; class DenseMatrix { public: double A[3][3]; Vector operator*(Vector &v) { Vector z; int i, j; for (i = 0; i < 3; i=i+1) z.x[i] = 0; for (i = 0; i < 3; i=i+1) for (j = 0; j < 3; j=j+1) z.x[i] = z.x[i] + A[i][j]*v.x[j]; return z; } }; double distance(Vector & a, Vector & b) { double sum = 0; int i; for (i = 0; i < 3; i = i + 1) sum = sum + fabs(a.x[i] - b.x[i]); return(sum); } Vector Jacobi(DenseMatrix & P, DenseMatrix & Q, Vector b) { Vector v1, v2; int i; double d; for (i = 0; i < 3; i = i + 1) { v1.x[i] = 0; v2.x[i] = 1; } d = 1.0; while ( d > 0.0001 ) { cout << v1.x[0] << "\t" << v1.x[1] << "\t" << v1.x[1] << "\n" ; v2 = P*v1 + Q*b; d = distance(v1, v2); v1 = v2; } return(v2); } // // Solving: [ 10 1 2 ] [ x1 ] [ 5 ] // [ 1 10 3 ] [ x2 ] = [ 6 ] // [ 2 3 10 ] [ x3 ] [ 7 ] // // [ 10 0 0 ] [ 0 -1 -2] // M = [ 0 10 0 ] N = [-1 0 -3] // [ 0 0 10 ] [-2 -3 0] // // -1 [ 0.1 0 0 ] -1 [ 0 -0.1 -0.2] // M = [ 0 0.1 0 ] M N = [-0.1 0 -0.3] // [ 0 0 0.1 ] [-0.2 -0.3 0] // int main(int argc, char *argv[]) { DenseMatrix P, Q; Vector sol, b; P.A[0][0] = 0.0; P.A[0][1] = -0.1; P.A[0][2] = -0.2; P.A[1][0] = -0.1; P.A[1][1] = 0.0; P.A[1][2] = -0.3; P.A[2][0] = -0.2; P.A[2][1] = -0.3; P.A[2][2] = 0.0; Q.A[0][0] = 0.1; Q.A[0][1] = 0.0; Q.A[0][2] = 0.0; Q.A[1][0] = 0.0; Q.A[1][1] = 0.1; Q.A[1][2] = 0.0; Q.A[2][0] = 0.0; Q.A[2][1] = 0.0; Q.A[2][2] = 0.1; b.x[0] = 5; b.x[1] = 6; b.x[2] = 7; sol = Jacobi(P, Q, b); cout << sol.x[0] << "\t" << sol.x[1] << "\t" << sol.x[1] << "\n" ; }