###### tags: `code` # c14086028-homework-7-2 ###### tags `use'c' to find a vector ,which is in C(A), is most approach to vector b` ```cpp= #include<stdio.h> #include<stdlib.h> #include<math.h> #define N 8 void initial(double [N][N]); void matrixmulvector(double [N][N], double [N]); double computernorm2(double [N]); double linearlyapproach(double [N][N],double [N][N],double [N],double [N]); int main() { double A[N][N] = { {} }; double LD[N][N] = { {} }; double D2[N][N] = { {} }; double x[N] = { 1,1,1,1,1,1,1,1 }; double x1[N] = { 1,1,1,1,1,1,1,1 }; double b[N] = { 5,10,12,16,20,24,28,31 }; double k = 0; initial(A); /* give the value of entries of L , U and D then print they */ for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (j == i) { D2[i][j] = (double)1/A[i][j]; } else { D2[i][j] = 0; } } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (j != i) { LD[i][j] = -A[i][j]; } else { LD[i][j] = 0; } } } double a = 0; matrixmulvector(A, x); double l2[N] = {}; for (int i = 0; i < N; i++) { l2[i] = b[i] - x[i]; } a=computernorm2(l2); printf("%lf\n", a); while (a>0.0000001) { linearlyapproach(D2,LD,x1,b); for (int i = 0; i < N; i++) { x[i] = x1[i]; } matrixmulvector(A, x); for (int i = 0; i < N; i++) { l2[i] = 0.0; l2[i] = b[i] - x[i]; } a = computernorm2(l2); printf("%lf\n", a); } printf("the x whitch is belng to C(A) is max approach to b is \n"); for (int i = 0; i < N; i++) { printf("%lf\n",x1[i]); } printf("the distance is %lf\n", a); system("pause"); return 0; } void initial(double A[N][N]) { for (int i = 0; i < N; i++) { A[i][i] = 3; if ((i + 1) < N) { A[i][i + 1] = 1; A[i + 1][i] = 1; } } }double linearlyapproach(double D2[N][N], double LD[N][N], double x[N], double b[N]) { double li = 0; double g[N] = {0,0,0,0,0,0,0,0}; matrixmulvector(LD, x); for (int i = 0; i < N; i++) { g[i] = x[i] + b[i]; } matrixmulvector(D2, g); for (int i = 0; i < N; i++) { x[i] = g[i]; } return 0; } void matrixmulvector(double A[N][N], double x[N]) { double k[N] = { 0,0,0,0,0,0,0,0 }; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { k[i] += A[i][j] * x[j]; } } for (int i = 0; i < N; i++) { x[i] = k[i]; } } double computernorm2(double x[N]) { double l = 0; for (int i = 0; i < N; i++) { l += x[i] * x[i]; } return sqrt((double)l); } ```