From 4096c5f1dcd75a8666bc7853a1b321e7ab2f5b26 Mon Sep 17 00:00:00 2001 From: AZEN-SGG Date: Tue, 8 Apr 2025 14:25:53 +0300 Subject: [PATCH] Start optimisation --- 2025.04.04/dist/Krivoruchenko_SK/Makefile | 6 +++--- 2025.04.04/dist/Krivoruchenko_SK/solve.c | 20 ++++++++++++++++---- 2025.04.04/dist/Krivoruchenko_SK/solve.h | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/2025.04.04/dist/Krivoruchenko_SK/Makefile b/2025.04.04/dist/Krivoruchenko_SK/Makefile index 17e5477..7e6bf9f 100644 --- a/2025.04.04/dist/Krivoruchenko_SK/Makefile +++ b/2025.04.04/dist/Krivoruchenko_SK/Makefile @@ -10,17 +10,17 @@ WFLAGS = -fstack-protector-all -W -Wall -Wextra -Wunused \ CFLAGS = -mfpmath=sse -std=gnu99 -O3 -TARGET = a.exe +TARGET = a.out OBJ = main.o solve.o array_io.o init_f.o matrix.o %.o: %.c gcc $(CFLAGS) $(WFLAGS) -c $< -o $@ $(TARGET): $(OBJ) - gcc $^ -o $@ -lm -lssp + gcc $^ -o $@ -lm gdb: CFLAGS = -mfpmath=sse -std=gnu99 -g gdb: clean $(TARGET) clean: - del *.o *.exe + del *.o *.out diff --git a/2025.04.04/dist/Krivoruchenko_SK/solve.c b/2025.04.04/dist/Krivoruchenko_SK/solve.c index b4c99c8..8a3f80d 100644 --- a/2025.04.04/dist/Krivoruchenko_SK/solve.c +++ b/2025.04.04/dist/Krivoruchenko_SK/solve.c @@ -36,7 +36,7 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c) // printf("Maximum = %lf i = %d j = %d\n", maximum, max_i, max_j); // Если максимальный по модулю элемент равен нулю, значит матрица вырождена - if (fabs(maximum) < eps) + if (maximum < eps) return SINGULAR; // Меняем строки местами, если максимум находится не в k строке @@ -138,19 +138,31 @@ int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c) } // Прямой ход Го ----- йда -void gauss_inverse(const int n, const int k, double * restrict A, double * restrict X) +void gauss_inverse(const int n, const int k, double * restrict A, double * restrict X, double eps) { const int kn = k*n; const int kk = kn + k; const double inv_akk = 1./A[kk]; - A[kk] = 1.; + A[kk] = 1.; + + if (eps > DBL_EPSILON) + eps = DBL_EPSILON; for (int ij = kk+1; ij < kn+n; ij++) A[ij] *= inv_akk; for (int ij = kn; ij < kn + n; ij++) X[ij] *= inv_akk; - + + for (int j = 0; j < k; ++j) + { + const double xkj = X[kn + j]; + if (fabs(xkj) <= eps) + continue; + + + } + for (int i = k+1; i < n; ++i) { const int in = i*n; diff --git a/2025.04.04/dist/Krivoruchenko_SK/solve.h b/2025.04.04/dist/Krivoruchenko_SK/solve.h index 2e54ac9..a0f0e1c 100644 --- a/2025.04.04/dist/Krivoruchenko_SK/solve.h +++ b/2025.04.04/dist/Krivoruchenko_SK/solve.h @@ -2,7 +2,7 @@ #define SOLVE_H int t14_solve(int n, double * restrict A, double * restrict X, int * restrict c); -void gauss_inverse(const int n, const int k, double * restrict A, double * restrict X); +void gauss_inverse(const int n, const int k, double * restrict A, double * restrict X, double eps); void gauss_back_substitution(const int n, double * restrict A, double * restrict X); #endif