1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
| #include <iostream.h>
#include <math.h>
void main (void)
{
int N,i,j,k;
cout <<"Enter N: "; // Ввод номера варианта
cin >>N;
double A[4][4]={{2,1,0,0},{1,2*N,-0.5,0},{0,1,-5,2},{0,0,1,4}},
// Матрица А, приведённая к трехдиагональному виду
R[4][1]={{0.2*N+1},{2*N},{-N+5},{0.2*N+8}},
X[4][1]={{0},{0},{0},{0}},
B[4][1]={{0},{0},{0},{0}}, // Элементы ниже главной диагонали
C[4][1]={{0},{0},{0},{0}}, // Элементы из главной диагонали
D[4][1]={{0},{0},{0},{0}}, //Элементы выше главной диагонали
delta[4][1]={{0},{0},{0},{0}},
lambda[4][1]={{0},{0},{0},{0}};
cout <<endl<<"Matrix A"<<endl; // Вывод матрицы А
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
cout<<A[i][j]<<" ";
}
cout <<endl;
}
cout <<endl;
cout <<"Matrix R"<<endl; // Вывод матрицы R
for (i=0; i<4; i++)
{
cout<<R[i][0];
cout<<endl;
}
cout <<endl;
for (i=0; i<4; i++)
{
C[i][0]=A[i][i]; // Заполнение С элементами из главной диагонали матрицы А
}
cout <<"Matrix C"<<endl; // Вывод вектора С
for (i=0; i<4; i++)
{
cout<<C[i][0];
cout<<endl;
}
cout <<endl;
for (i=0; i<3; i++)
{
B[i+1][0]=A[i+1][i];
// Заполнение вектора В элементами, стоящими ниже главной диагонали матрицы А
}
cout <<"Matrix B"<<endl; // Вывод вектора В
for (i=0; i<4; i++)
{
cout<<B[i][0];
cout<<endl;
}
cout <<endl;
for (i=0; i<3; i++)
{
D[i][0]=A[i][i+1];
// Заполнение вектора D элементами, стоящими выше главной диагонали матрицы А
}
cout <<"Matrix D"<<endl; // Вывод вектора D
for (i=0; i<4; i++)
{
cout<<D[i][0];
cout<<endl;
}
cout <<endl;
delta[0][0]=-D[0][0]/C[0][0];
// Первый элемент ?1 равен отрицательному отношению первых элементов векторов D и С
lambda[0][0]=R[0][0]/C[0][0];
// Первый элемент ?1 равен отрицательному отношению первых элементов векторов R и С
// Вычисление коэффициентов ?i и ?i :
for (i=1; i<4; i++)
{
delta[i][0]=-D[i][0]/(C[i][0]+B[i][0]*delta[i-1][0]);
lambda[i][0]=(R[i][0]-B[i][0]*lambda[i-1][0])/(C[i][0]+B[i][0]*delta[i-1][0]);
}
cout <<"Matrix delta"<<endl; // Вывод матрицы ?
for (i=0; i<4; i++)
{
cout<<delta[i][0];
cout<<endl;
}
cout <<endl;
cout <<"Matrix lambda"<<endl; // Вывод матрицы ?
for (i=0; i<4; i++)
{
cout<<lambda[i][0];
cout<<endl;
}
cout <<endl;
X[3][0]=lambda[3][0]; // Старшему элементу Х присваиваем третье значение ?
for (i=2; i>-1; i--)
{
X[i][0]=delta[i][0]*X[i+1][0]+lambda[i][0]; // x(i) = ?(i)*x(i+1) + ?(i)
}
cout <<"Matrix X"<<endl; // Вывод Х (решения)
for (i=0; i<4; i++)
{
cout<<X[i][0];
cout<<endl;
}
cout <<endl;
if ((fabs(A[0][0])>fabs(A[0][1]+A[0][2]+A[0][3])) && (fabs(A[1][1])>fabs(A[1][0]+A[1][2]+A[1][3])) && (fabs(A[2][2])>fabs(A[2][0]+A[2][1]+A[2][3])) && (fabs(A[3][3])>fabs(A[3][0]+A[3][2]+A[3][1])))
cout<<"Da"<<endl;
else
cout<<"Net"<<endl;
} |