###### 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);
}
```