Need to test
This commit is contained in:
parent
0c5beccc85
commit
00974efbc0
9 changed files with 72 additions and 29 deletions
|
|
@ -13,7 +13,7 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c)
|
||||||
double maximum = -1.;
|
double maximum = -1.;
|
||||||
int max_i = 0, max_j = 0;
|
int max_i = 0, max_j = 0;
|
||||||
|
|
||||||
//printf("\n--------- K = %d ---------\n", k);
|
// printf("\n--------- K = %d ---------\n", k);
|
||||||
|
|
||||||
// Ищем максимальный элемент минора
|
// Ищем максимальный элемент минора
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
|
|
@ -48,7 +48,7 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c)
|
||||||
if (fabs(maximum) < DBL_EPSILON)
|
if (fabs(maximum) < DBL_EPSILON)
|
||||||
return SINGULAR;
|
return SINGULAR;
|
||||||
|
|
||||||
//printf("Maximum = %lf for i = %d, j = %d\n", maximum, max_i, max_j);
|
// printf("Maximum = %lf for i = %d, j = %d\n", maximum, max_i, max_j);
|
||||||
|
|
||||||
// Меняем строки местами, если максимум находится не в k строке
|
// Меняем строки местами, если максимум находится не в k строке
|
||||||
if (max_i != k)
|
if (max_i != k)
|
||||||
|
|
@ -79,8 +79,8 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//print_matrix(A, n, n);
|
// print_matrix(A, n, n);
|
||||||
//printf("\n");
|
// printf("\n");
|
||||||
|
|
||||||
// Меняем столбцы местами
|
// Меняем столбцы местами
|
||||||
if (max_j != k)
|
if (max_j != k)
|
||||||
|
|
@ -90,23 +90,23 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c)
|
||||||
c[k] = swap_temp;
|
c[k] = swap_temp;
|
||||||
|
|
||||||
#pragma omp simd
|
#pragma omp simd
|
||||||
for (int in = k * n; in < n; in+=n)
|
for (int in = 0; in < n*n; in+=n)
|
||||||
{
|
{
|
||||||
double swap = A[in + k];
|
double swap = A[in + k];
|
||||||
A[in + k] = A[in + max_j];
|
A[in + k] = A[in + max_j];
|
||||||
A[in + max_j] = swap;
|
A[in + max_j] = swap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
print_matrix(A, n, n);
|
// print_matrix(A, n, n);
|
||||||
printf("\n");
|
// printf("\n");
|
||||||
*/
|
|
||||||
gauss_inverse(n, k, A, X);
|
gauss_inverse(n, k, A, X);
|
||||||
/*
|
|
||||||
print_matrix(A, n, n);
|
// print_matrix(A, n, n);
|
||||||
printf("Inverse matrix:\n");
|
// printf("Inverse matrix:\n");
|
||||||
print_matrix(X, n, n);
|
// print_matrix(X, n, n);
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gauss_back_substitution(n, A, X);
|
gauss_back_substitution(n, A, X);
|
||||||
|
|
@ -114,26 +114,37 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c)
|
||||||
// Возвращаем строки назад
|
// Возвращаем строки назад
|
||||||
for (int k = 0; k < n; ++k)
|
for (int k = 0; k < n; ++k)
|
||||||
{
|
{
|
||||||
int str_i = c[k];
|
int pnt_cur = c[k];
|
||||||
|
|
||||||
if (str_i != k)
|
if (pnt_cur != k)
|
||||||
|
{
|
||||||
|
int pnt_nxt = 0;
|
||||||
|
|
||||||
|
#pragma omp parallel for
|
||||||
for (int j = 0; j < n; ++j)
|
for (int j = 0; j < n; ++j)
|
||||||
{
|
{
|
||||||
int loc_k = k;
|
int loc_cur = pnt_cur;
|
||||||
int loc_i = str_i;
|
double temp_cur = X[k*n + j];
|
||||||
double elem = X[k*n + j];
|
double temp_nxt = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
X[loc_i*n + j] = elem;
|
temp_nxt = X[loc_cur*n + j];
|
||||||
elem = X[loc_i*n + j];
|
X[loc_cur*n + j] = temp_cur;
|
||||||
|
temp_cur = temp_nxt;
|
||||||
|
|
||||||
loc_k = loc_i;
|
loc_cur = c[loc_cur];
|
||||||
loc_i = c[loc_i];
|
} while (loc_cur != k);
|
||||||
if (j == n-1)
|
|
||||||
c[loc_k] = loc_k;
|
|
||||||
} while (loc_i != k);
|
|
||||||
|
|
||||||
X[k*n + j] = elem;
|
X[k*n + j] = temp_cur;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
pnt_nxt = c[pnt_cur];
|
||||||
|
c[pnt_cur] = pnt_cur;
|
||||||
|
pnt_cur = pnt_nxt;
|
||||||
|
} while (pnt_nxt != k);
|
||||||
|
|
||||||
|
c[k] = k;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
4
2025.04.04/14Ex/tests/d.txt
Normal file
4
2025.04.04/14Ex/tests/d.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
2 0 0 0
|
||||||
|
0 3 0 0
|
||||||
|
0 0 4 0
|
||||||
|
0 0 0 5
|
||||||
4
2025.04.04/14Ex/tests/l.txt
Normal file
4
2025.04.04/14Ex/tests/l.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
1 2 3 4
|
||||||
|
0 5 6 7
|
||||||
|
0 0 8 9
|
||||||
|
0 0 0 10
|
||||||
4
2025.04.04/14Ex/tests/lz.txt
Normal file
4
2025.04.04/14Ex/tests/lz.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
1 2 3 4
|
||||||
|
5 6 7 8
|
||||||
|
9 10 11 12
|
||||||
|
6 9 12 15
|
||||||
4
2025.04.04/14Ex/tests/nr.txt
Normal file
4
2025.04.04/14Ex/tests/nr.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
1 2 0 4
|
||||||
|
5 6 0 8
|
||||||
|
9 10 0 12
|
||||||
|
13 14 0 16
|
||||||
4
2025.04.04/14Ex/tests/ns.txt
Normal file
4
2025.04.04/14Ex/tests/ns.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
1 2 3 4
|
||||||
|
5 6 7 8
|
||||||
|
0 0 0 0
|
||||||
|
9 10 11 12
|
||||||
4
2025.04.04/14Ex/tests/pr.txt
Normal file
4
2025.04.04/14Ex/tests/pr.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
1 2 3 4
|
||||||
|
2 4 6 8
|
||||||
|
5 6 7 8
|
||||||
|
9 10 11 12
|
||||||
4
2025.04.04/14Ex/tests/rp.txt
Normal file
4
2025.04.04/14Ex/tests/rp.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
1 2 3 4
|
||||||
|
5 6 7 8
|
||||||
|
1 2 3 4
|
||||||
|
9 10 11 12
|
||||||
4
2025.04.04/14Ex/tests/w.txt
Normal file
4
2025.04.04/14Ex/tests/w.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
5 7 6 5
|
||||||
|
7 10 8 7
|
||||||
|
6 8 10 9
|
||||||
|
5 7 9 10
|
||||||
Loading…
Add table
Add a link
Reference in a new issue