Add Linux dist

This commit is contained in:
AZEN-SGG 2025-03-27 21:09:13 +03:00
parent 0a8c75a0cf
commit a5d5880f8a
18 changed files with 1892 additions and 0 deletions

16
2025.03.28/dist/Linux/Makefile vendored Normal file
View file

@ -0,0 +1,16 @@
FLAGS = -fstack-protector-all -W -Wall -Wextra -Wunused -Wcast-align -Werror -pedantic -pedantic-errors -Wfloat-equal -Wpointer-arith -Wformat-security -Wmissing-format-attribute -Wformat=1 -Wwrite-strings -Wcast-align -Wno-long-long -std=gnu99 -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wdeclaration-after-statement -Wbad-function-cast -Wnested-externs -fopenmp -O3
%.out: %.o solve.o array_io.o init_f.o matrix.o
gcc $(FLAGS) $^ -o $@ -lm -fopenmp
%.o: %.c
gcc -c $(FLAGS) $<
all: a01.out a02.out a03.out a04.out a05.out a06.out a07.out a08.out
solve.o: solve.c solve.h
array_io.o: array_io.c array_io.h
init_f.o: init_f.c init_f.h
matrix.o: matrix.c matrix.h
clean:
rm -f *.o *.out

126
2025.03.28/dist/Linux/a01.c vendored Normal file
View file

@ -0,0 +1,126 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include "array_io.h"
#include "io_status.h"
#include "solve.h"
/* ./a.out m n p k_a [filename_a] k_x [filename_x] */
int main(int argc, char *argv[])
{
double t, r1, r2, *a, *x_0, *x;
int n, m, p, k_a, k_x, task = 1;
char *name_a = 0, *name_x = 0;
if (!((argc == 6 || argc == 7 || argc == 8) &&
sscanf(argv[1], "%d", &m) == 1 &&
sscanf(argv[2], "%d", &n) == 1 &&
sscanf(argv[3], "%d", &p) == 1 &&
sscanf(argv[4], "%d", &k_a) == 1 &&
(k_a >= 0 && k_a <= 4) &&
(!(k_a == 0 && argc == 6)) &&
((k_a == 0 && sscanf(argv[6], "%d", &k_x) == 1) ||
(k_a != 0 && sscanf(argv[5], "%d", &k_x) == 1)) &&
(k_x >= 0 && k_x <= 4) &&
(!(k_x == 0 && argc == 6)) &&
(!((k_a == 0 && k_x == 0) && argc != 8))))
{
printf("Usage: %s m n p k_a [filename_a] k_x [filename_x]\n", argv[0]);
return 1;
}
if (argc != 6)
{
int i_x = 6;
if (k_a == 0) {name_a = argv[5];i_x++;}
if (k_x == 0) name_x = argv[i_x];
}
a = (double *)malloc((size_t)n * (size_t)n * sizeof(double));
if (!a)
{
printf("Not enough memory\n");
return 2;
}
x_0 = (double *)malloc((size_t)n * sizeof(double));
if (!x_0)
{
free(a);
printf("Not enough memory\n");
return 2;
}
x = (double *)malloc((size_t)n * sizeof(double));
if (!x)
{
free(a);
free(x_0);
printf("Not enough memory\n");
return 2;
}
if (name_a)
{ /* из файла */
io_status ret;
ret = read_matrix(a, n, n, name_a);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_a);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_a);
break;
}
free(a);
free(x_0);
free(x);
return 3;
} while (0);
} else init_matrix(a, n, n, k_a);
if (name_x)
{
io_status ret;
ret = read_matrix(x_0, n, 1, name_x);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_x);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_x);
break;
}
free(a);
free(x_0);
free(x);
return 3;
} while (0);
} else init_matrix(x_0, n, 1, k_x);
printf("Matrix A:\n");
print_matrix(a, n, n, p);
printf("Vector x_0:\n");
print_matrix(x_0, 1, n, p);
t = omp_get_wtime();
r1 = t1_solve(a, x_0, x, n, m);
t = omp_get_wtime() - t;
r2 = t1_get_residual_norm(x, x_0, n, r1);
printf("New vector:\n");
print_matrix(x, 1, n, p);
printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t);
free(a);
free(x_0);
free(x);
return 0;
}

145
2025.03.28/dist/Linux/a02.c vendored Normal file
View file

@ -0,0 +1,145 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include "array_io.h"
#include "io_status.h"
#include "matrix.h"
#include "solve.h"
/* ./a.out t m n p k_a [filename_a] k_x [filename_x] */
int main(int argc, char *argv[])
{
double tau, t, r1, r2, *a, *x_0, *b, *x;
int n, m, p, k_a, k_x, task = 2;
char *name_a = 0, *name_x = 0;
if (!((argc == 7 || argc == 8 || argc == 9) &&
sscanf(argv[1], "%lf", &tau) == 1 &&
sscanf(argv[2], "%d", &m) == 1 &&
sscanf(argv[3], "%d", &n) == 1 &&
sscanf(argv[4], "%d", &p) == 1 &&
sscanf(argv[5], "%d", &k_a) == 1 &&
(k_a >= 0 && k_a <= 4) &&
(!(k_a == 0 && argc == 7)) &&
((k_a == 0 && sscanf(argv[7], "%d", &k_x) == 1) ||
(k_a != 0 && sscanf(argv[6], "%d", &k_x) == 1)) &&
(k_x >= 0 && k_x <= 4) &&
(!(k_x == 0 && argc == 7)) &&
(!((k_a == 0 && k_x == 0) && argc != 9))))
{
printf("Usage: %s t m n p k_a [filename_a] k_x [filename_x]\n", argv[0]);
return 1;
}
if (argc != 7)
{
int i_x = 7;
if (k_a == 0) { name_a = argv[6]; i_x++; }
if (k_x == 0) name_x = argv[i_x];
}
a = (double *)malloc((size_t)n * (size_t)n * sizeof(double));
if (!a)
{
printf("Not enough memory\n");
return 2;
}
x_0 = (double *)malloc((size_t)n * sizeof(double));
if (!x_0)
{
free(a);
printf("Not enough memory\n");
return 2;
}
b = (double *)malloc((size_t)n * sizeof(double));
if (!b)
{
free(a);
free(x_0);
printf("Not enough memory\n");
return 2;
}
x = (double *)malloc((size_t)n * sizeof(double));
if (!x)
{
free(a);
free(x_0);
free(b);
printf("Not enough memory\n");
return 2;
}
if (name_a)
{ /* из файла */
io_status ret;
ret = read_matrix(a, n, n, name_a);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_a);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_a);
break;
}
free(a);
free(x_0);
free(b);
free(x);
return 3;
} while (0);
} else init_matrix(a, n, n, k_a);
if (name_x)
{
io_status ret;
ret = read_matrix(x_0, n, 1, name_x);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_x);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_x);
break;
}
free(a);
free(x_0);
free(b);
free(x);
return 3;
} while (0);
} else init_matrix(x_0, n, 1, k_x);
init_vec_b(a, b, n);
printf("Matrix A:\n");
print_matrix(a, n, n, p);
printf("Vector x_0:\n");
print_matrix(x_0, 1, n, p);
printf("Vector b:\n");
print_matrix(b, 1, n, p);
t = omp_get_wtime();
t2_solve(a, x_0, b, x, n, m, tau);
t = omp_get_wtime() - t;
r1 = get_r1(a, x, b, n);
r2 = get_r2_value(x, n);
printf("New vector:\n");
print_matrix(x, 1, n, p);
printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t);
free(a);
free(x_0);
free(b);
free(x);
return 0;
}

157
2025.03.28/dist/Linux/a03.c vendored Normal file
View file

@ -0,0 +1,157 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include "array_io.h"
#include "io_status.h"
#include "matrix.h"
#include "solve.h"
/* ./a.out m n p k_a [filename_a] k_x [filename_x] */
int main(int argc, char *argv[])
{
double t, r1, r2, *a, *x_0, *b, *x, *r;
int n, m, p, k_a, k_x, task = 3;
char *name_a = 0, *name_x = 0;
if (!((argc == 6 || argc == 7 || argc == 8) &&
sscanf(argv[1], "%d", &m) == 1 &&
sscanf(argv[2], "%d", &n) == 1 &&
sscanf(argv[3], "%d", &p) == 1 &&
sscanf(argv[4], "%d", &k_a) == 1 &&
(k_a >= 0 && k_a <= 4) &&
(!(k_a == 0 && argc == 6)) &&
((k_a == 0 && sscanf(argv[6], "%d", &k_x) == 1) ||
(k_a != 0 && sscanf(argv[5], "%d", &k_x) == 1)) &&
(k_x >= 0 && k_x <= 4) &&
(!(k_x == 0 && argc == 6)) &&
(!((k_a == 0 && k_x == 0) && argc != 8))))
{
printf("Usage: %s m n p k_a [filename_a] k_x [filename_x]\n", argv[0]);
return 1;
}
if (argc != 6)
{
int i_x = 6;
if (k_a == 0) {name_a = argv[5];i_x++;}
if (k_x == 0) name_x = argv[i_x];
}
a = (double *)malloc((size_t)n * (size_t)n * sizeof(double));
if (!a)
{
printf("Not enough memory\n");
return 2;
}
x_0 = (double *)malloc((size_t)n * sizeof(double));
if (!x_0)
{
free(a);
printf("Not enough memory\n");
return 2;
}
b = (double *)malloc((size_t)n * sizeof(double));
if (!b)
{
free(a);
free(x_0);
printf("Not enough memory\n");
return 2;
}
x = (double *)malloc((size_t)n * sizeof(double));
if (!x)
{
free(a);
free(x_0);
free(b);
printf("Not enough memory\n");
return 2;
}
r = (double *)malloc((size_t)n * sizeof(double));
if (!r)
{
free(a);
free(x_0);
free(b);
free(x);
printf("Not enough memory\n");
return 2;
}
if (name_a)
{ /* из файла */
io_status ret;
ret = read_matrix(a, n, n, name_a);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_a);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_a);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(a, n, n, k_a);
if (name_x)
{
io_status ret;
ret = read_matrix(x_0, n, 1, name_x);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_x);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_x);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(x_0, n, 1, k_x);
init_vec_b(a, b, n);
printf("Matrix A:\n");
print_matrix(a, n, n, p);
printf("Vector x_0:\n");
print_matrix(x_0, 1, n, p);
printf("Vector b:\n");
print_matrix(b, 1, n, p);
t = omp_get_wtime();
t3_solve(a, x_0, b, x, r, n, m);
t = omp_get_wtime() - t;
r1 = get_r1(a, x, b, n);
r2 = get_r2_value(x, n);
printf("New vector:\n");
print_matrix(x, 1, n, p);
printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t);
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 0;
}

157
2025.03.28/dist/Linux/a04.c vendored Normal file
View file

@ -0,0 +1,157 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include "array_io.h"
#include "io_status.h"
#include "matrix.h"
#include "solve.h"
/* ./a.out m n p k_a [filename_a] k_x [filename_x] */
int main(int argc, char *argv[])
{
double t, r1, r2, *a, *x_0, *b, *x, *r;
int n, m, p, k_a, k_x, task = 4;
char *name_a = 0, *name_x = 0;
if (!((argc == 6 || argc == 7 || argc == 8) &&
sscanf(argv[1], "%d", &m) == 1 &&
sscanf(argv[2], "%d", &n) == 1 &&
sscanf(argv[3], "%d", &p) == 1 &&
sscanf(argv[4], "%d", &k_a) == 1 &&
(k_a >= 0 && k_a <= 4) &&
(!(k_a == 0 && argc == 6)) &&
((k_a == 0 && sscanf(argv[6], "%d", &k_x) == 1) ||
(k_a != 0 && sscanf(argv[5], "%d", &k_x) == 1)) &&
(k_x >= 0 && k_x <= 4) &&
(!(k_x == 0 && argc == 6)) &&
(!((k_a == 0 && k_x == 0) && argc != 8))))
{
printf("Usage: %s m n p k_a [filename_a] k_x [filename_x]\n", argv[0]);
return 1;
}
if (argc != 6)
{
int i_x = 6;
if (k_a == 0) {name_a = argv[5];i_x++;}
if (k_x == 0) name_x = argv[i_x];
}
a = (double *)malloc((size_t)n * (size_t)n * sizeof(double));
if (!a)
{
printf("Not enough memory\n");
return 2;
}
x_0 = (double *)malloc((size_t)n * sizeof(double));
if (!x_0)
{
free(a);
printf("Not enough memory\n");
return 2;
}
b = (double *)malloc((size_t)n * sizeof(double));
if (!b)
{
free(a);
free(x_0);
printf("Not enough memory\n");
return 2;
}
x = (double *)malloc((size_t)n * sizeof(double));
if (!x)
{
free(a);
free(x_0);
free(b);
printf("Not enough memory\n");
return 2;
}
r = (double *)malloc((size_t)n * sizeof(double));
if (!r)
{
free(a);
free(x_0);
free(b);
free(x);
printf("Not enough memory\n");
return 2;
}
if (name_a)
{ /* из файла */
io_status ret;
ret = read_matrix(a, n, n, name_a);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_a);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_a);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(a, n, n, k_a);
if (name_x)
{
io_status ret;
ret = read_matrix(x_0, n, 1, name_x);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_x);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_x);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(x_0, n, 1, k_x);
init_vec_b(a, b, n);
printf("Matrix A:\n");
print_matrix(a, n, n, p);
printf("Vector x_0:\n");
print_matrix(x_0, 1, n, p);
printf("Vector b:\n");
print_matrix(b, 1, n, p);
t = omp_get_wtime();
t4_solve(a, x_0, b, x, r, n, m);
t = omp_get_wtime() - t;
r1 = get_r1(a, x, b, n);
r2 = get_r2_value(x, n);
printf("New vector:\n");
print_matrix(x, 1, n, p);
printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t);
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 0;
}

157
2025.03.28/dist/Linux/a05.c vendored Normal file
View file

@ -0,0 +1,157 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include "array_io.h"
#include "io_status.h"
#include "matrix.h"
#include "solve.h"
/* ./a.out m n p k_a [filename_a] k_x [filename_x] */
int main(int argc, char *argv[])
{
double t, r1, r2, *a, *x_0, *b, *x, *r;
int n, m, p, k_a, k_x, task = 5;
char *name_a = 0, *name_x = 0;
if (!((argc == 6 || argc == 7 || argc == 8) &&
sscanf(argv[1], "%d", &m) == 1 &&
sscanf(argv[2], "%d", &n) == 1 &&
sscanf(argv[3], "%d", &p) == 1 &&
sscanf(argv[4], "%d", &k_a) == 1 &&
(k_a >= 0 && k_a <= 4) &&
(!(k_a == 0 && argc == 6)) &&
((k_a == 0 && sscanf(argv[6], "%d", &k_x) == 1) ||
(k_a != 0 && sscanf(argv[5], "%d", &k_x) == 1)) &&
(k_x >= 0 && k_x <= 4) &&
(!(k_x == 0 && argc == 6)) &&
(!((k_a == 0 && k_x == 0) && argc != 8))))
{
printf("Usage: %s m n p k_a [filename_a] k_x [filename_x]\n", argv[0]);
return 1;
}
if (argc != 6)
{
int i_x = 6;
if (k_a == 0) {name_a = argv[5];i_x++;}
if (k_x == 0) name_x = argv[i_x];
}
a = (double *)malloc((size_t)n * (size_t)n * sizeof(double));
if (!a)
{
printf("Not enough memory\n");
return 2;
}
x_0 = (double *)malloc((size_t)n * sizeof(double));
if (!x_0)
{
free(a);
printf("Not enough memory\n");
return 2;
}
b = (double *)malloc((size_t)n * sizeof(double));
if (!b)
{
free(a);
free(x_0);
printf("Not enough memory\n");
return 2;
}
x = (double *)malloc((size_t)n * sizeof(double));
if (!x)
{
free(a);
free(x_0);
free(b);
printf("Not enough memory\n");
return 2;
}
r = (double *)malloc((size_t)n * sizeof(double));
if (!r)
{
free(a);
free(x_0);
free(b);
free(x);
printf("Not enough memory\n");
return 2;
}
if (name_a)
{ /* из файла */
io_status ret;
ret = read_matrix(a, n, n, name_a);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_a);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_a);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(a, n, n, k_a);
if (name_x)
{
io_status ret;
ret = read_matrix(x_0, n, 1, name_x);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_x);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_x);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(x_0, n, 1, k_x);
init_vec_b(a, b, n);
printf("Matrix A:\n");
print_matrix(a, n, n, p);
printf("Vector x_0:\n");
print_matrix(x_0, 1, n, p);
printf("Vector b:\n");
print_matrix(b, 1, n, p);
t = omp_get_wtime();
t5_solve(a, x_0, b, x, r, n, m);
t = omp_get_wtime() - t;
r1 = get_r1(a, x, b, n);
r2 = get_r2_value(x, n);
printf("New vector:\n");
print_matrix(x, 1, n, p);
printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t);
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 0;
}

157
2025.03.28/dist/Linux/a06.c vendored Normal file
View file

@ -0,0 +1,157 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include "array_io.h"
#include "io_status.h"
#include "matrix.h"
#include "solve.h"
/* ./a.out m n p k_a [filename_a] k_x [filename_x] */
int main(int argc, char *argv[])
{
double t, r1, r2, *a, *x_0, *b, *x, *r;
int n, m, p, k_a, k_x, task = 6;
char *name_a = 0, *name_x = 0;
if (!((argc == 6 || argc == 7 || argc == 8) &&
sscanf(argv[1], "%d", &m) == 1 &&
sscanf(argv[2], "%d", &n) == 1 &&
sscanf(argv[3], "%d", &p) == 1 &&
sscanf(argv[4], "%d", &k_a) == 1 &&
(k_a >= 0 && k_a <= 4) &&
(!(k_a == 0 && argc == 6)) &&
((k_a == 0 && sscanf(argv[6], "%d", &k_x) == 1) ||
(k_a != 0 && sscanf(argv[5], "%d", &k_x) == 1)) &&
(k_x >= 0 && k_x <= 4) &&
(!(k_x == 0 && argc == 6)) &&
(!((k_a == 0 && k_x == 0) && argc != 8))))
{
printf("Usage: %s m n p k_a [filename_a] k_x [filename_x]\n", argv[0]);
return 1;
}
if (argc != 6)
{
int i_x = 6;
if (k_a == 0) {name_a = argv[5];i_x++;}
if (k_x == 0) name_x = argv[i_x];
}
a = (double *)malloc((size_t)n * (size_t)n * sizeof(double));
if (!a)
{
printf("Not enough memory\n");
return 2;
}
x_0 = (double *)malloc((size_t)n * sizeof(double));
if (!x_0)
{
free(a);
printf("Not enough memory\n");
return 2;
}
b = (double *)malloc((size_t)n * sizeof(double));
if (!b)
{
free(a);
free(x_0);
printf("Not enough memory\n");
return 2;
}
x = (double *)malloc((size_t)n * sizeof(double));
if (!x)
{
free(a);
free(x_0);
free(b);
printf("Not enough memory\n");
return 2;
}
r = (double *)malloc((size_t)n * sizeof(double));
if (!r)
{
free(a);
free(x_0);
free(b);
free(x);
printf("Not enough memory\n");
return 2;
}
if (name_a)
{ /* из файла */
io_status ret;
ret = read_matrix(a, n, n, name_a);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_a);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_a);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(a, n, n, k_a);
if (name_x)
{
io_status ret;
ret = read_matrix(x_0, n, 1, name_x);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_x);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_x);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(x_0, n, 1, k_x);
init_vec_b(a, b, n);
printf("Matrix A:\n");
print_matrix(a, n, n, p);
printf("Vector x_0:\n");
print_matrix(x_0, 1, n, p);
printf("Vector b:\n");
print_matrix(b, 1, n, p);
t = omp_get_wtime();
t6_solve(a, x_0, b, x, r, n, m);
t = omp_get_wtime() - t;
r1 = get_r1(a, x, b, n);
r2 = get_r2_value(x, n);
printf("New vector:\n");
print_matrix(x, 1, n, p);
printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t);
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 0;
}

158
2025.03.28/dist/Linux/a07.c vendored Normal file
View file

@ -0,0 +1,158 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include "array_io.h"
#include "io_status.h"
#include "matrix.h"
#include "solve.h"
/* ./a.out t m n p k_a [filename_a] k_x [filename_x] */
int main(int argc, char *argv[])
{
double tau, t, r1, r2, *a, *x_0, *b, *x, *r;
int n, m, p, k_a, k_x, task = 7;
char *name_a = 0, *name_x = 0;
if (!((argc == 7 || argc == 8 || argc == 9) &&
sscanf(argv[1], "%lf", &tau) == 1 &&
sscanf(argv[2], "%d", &m) == 1 &&
sscanf(argv[3], "%d", &n) == 1 &&
sscanf(argv[4], "%d", &p) == 1 &&
sscanf(argv[5], "%d", &k_a) == 1 &&
(k_a >= 0 && k_a <= 4) &&
(!(k_a == 0 && argc == 7)) &&
((k_a == 0 && sscanf(argv[7], "%d", &k_x) == 1) ||
(k_a != 0 && sscanf(argv[6], "%d", &k_x) == 1)) &&
(k_x >= 0 && k_x <= 4) &&
(!(k_x == 0 && argc == 7)) &&
(!((k_a == 0 && k_x == 0) && argc != 9))))
{
printf("Usage: %s t m n p k_a [filename_a] k_x [filename_x]\n", argv[0]);
return 1;
}
if (argc != 7)
{
int i_x = 7;
if (k_a == 0) { name_a = argv[6]; i_x++; }
if (k_x == 0) name_x = argv[i_x];
}
a = (double *)malloc((size_t)n * (size_t)n * sizeof(double));
if (!a)
{
printf("Not enough memory\n");
return 2;
}
x_0 = (double *)malloc((size_t)n * sizeof(double));
if (!x_0)
{
free(a);
printf("Not enough memory\n");
return 2;
}
b = (double *)malloc((size_t)n * sizeof(double));
if (!b)
{
free(a);
free(x_0);
printf("Not enough memory\n");
return 2;
}
x = (double *)malloc((size_t)n * sizeof(double));
if (!x)
{
free(a);
free(x_0);
free(b);
printf("Not enough memory\n");
return 2;
}
r = (double *)malloc((size_t)n * sizeof(double));
if (!r)
{
free(a);
free(x_0);
free(b);
free(x);
printf("Not enough memory\n");
return 2;
}
if (name_a)
{ /* из файла */
io_status ret;
ret = read_matrix(a, n, n, name_a);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_a);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_a);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(a, n, n, k_a);
if (name_x)
{
io_status ret;
ret = read_matrix(x_0, n, 1, name_x);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_x);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_x);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 3;
} while (0);
} else init_matrix(x_0, n, 1, k_x);
init_vec_b(a, b, n);
printf("Matrix A:\n");
print_matrix(a, n, n, p);
printf("Vector x_0:\n");
print_matrix(x_0, 1, n, p);
printf("Vector b:\n");
print_matrix(b, 1, n, p);
t = omp_get_wtime();
t7_solve(a, x_0, b, x, r, n, m, tau);
t = omp_get_wtime() - t;
r1 = get_r1(a, x, b, n);
r2 = get_r2_value(x, n);
printf("New vector:\n");
print_matrix(x, 1, n, p);
printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t);
free(a);
free(x_0);
free(b);
free(x);
free(r);
return 0;
}

172
2025.03.28/dist/Linux/a08.c vendored Normal file
View file

@ -0,0 +1,172 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include "array_io.h"
#include "io_status.h"
#include "matrix.h"
#include "solve.h"
/* ./a.out t m n p k_a [filename_a] k_x [filename_x] */
int main(int argc, char *argv[])
{
double tau, t, r1, r2, *a, *x_0, *b, *x, *r, *w;
int n, m, p, k_a, k_x, task = 8;
char *name_a = 0, *name_x = 0;
if (!((argc == 7 || argc == 8 || argc == 9) &&
sscanf(argv[1], "%lf", &tau) == 1 &&
sscanf(argv[2], "%d", &m) == 1 &&
sscanf(argv[3], "%d", &n) == 1 &&
sscanf(argv[4], "%d", &p) == 1 &&
sscanf(argv[5], "%d", &k_a) == 1 &&
(k_a >= 0 && k_a <= 4) &&
(!(k_a == 0 && argc == 7)) &&
((k_a == 0 && sscanf(argv[7], "%d", &k_x) == 1) ||
(k_a != 0 && sscanf(argv[6], "%d", &k_x) == 1)) &&
(k_x >= 0 && k_x <= 4) &&
(!(k_x == 0 && argc == 7)) &&
(!((k_a == 0 && k_x == 0) && argc != 9))))
{
printf("Usage: %s t m n p k_a [filename_a] k_x [filename_x]\n", argv[0]);
return 1;
}
if (argc != 7)
{
int i_x = 7;
if (k_a == 0) { name_a = argv[6]; i_x++; }
if (k_x == 0) name_x = argv[i_x];
}
a = (double *)malloc((size_t)n * (size_t)n * sizeof(double));
if (!a)
{
printf("Not enough memory\n");
return 2;
}
x_0 = (double *)malloc((size_t)n * sizeof(double));
if (!x_0)
{
free(a);
printf("Not enough memory\n");
return 2;
}
b = (double *)malloc((size_t)n * sizeof(double));
if (!b)
{
free(a);
free(x_0);
printf("Not enough memory\n");
return 2;
}
x = (double *)malloc((size_t)n * sizeof(double));
if (!x)
{
free(a);
free(x_0);
free(b);
printf("Not enough memory\n");
return 2;
}
r = (double *)malloc((size_t)n * sizeof(double));
if (!r)
{
free(a);
free(x_0);
free(b);
free(x);
printf("Not enough memory\n");
return 2;
}
w = (double *)malloc((size_t)n * sizeof(double));
if (!w)
{
free(a);
free(x_0);
free(b);
free(x);
free(r);
printf("Not enough memory\n");
return 2;
}
if (name_a)
{ /* из файла */
io_status ret;
ret = read_matrix(a, n, n, name_a);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_a);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_a);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
free(w);
return 3;
} while (0);
} else init_matrix(a, n, n, k_a);
if (name_x)
{
io_status ret;
ret = read_matrix(x_0, n, 1, name_x);
do {
switch (ret)
{
case SUCCESS:
continue;
case ERROR_OPEN:
printf("Cannot open %s\n", name_x);
break;
case ERROR_READ:
printf("Cannot read %s\n", name_x);
break;
}
free(a);
free(x_0);
free(b);
free(x);
free(r);
free(w);
return 3;
} while (0);
} else init_matrix(x_0, n, 1, k_x);
init_vec_b(a, b, n);
printf("Matrix A:\n");
print_matrix(a, n, n, p);
printf("Vector x_0:\n");
print_matrix(x_0, 1, n, p);
printf("Vector b:\n");
print_matrix(b, 1, n, p);
t = omp_get_wtime();
t8_solve(a, x_0, b, x, r, w, n, m, tau);
t = omp_get_wtime() - t;
r1 = get_r1(a, x, b, n);
r2 = get_r2_value(x, n);
printf("New vector:\n");
print_matrix(x, 1, n, p);
printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t);
free(a);
free(x_0);
free(b);
free(x);
free(r);
free(w);
return 0;
}

40
2025.03.28/dist/Linux/array_io.c vendored Normal file
View file

@ -0,0 +1,40 @@
#include <stdio.h>
#include "array_io.h"
io_status read_matrix(double *a, int n, int m, const char *name)
{
int i, j;
FILE *fp;
if (!(fp = fopen(name, "r"))) return ERROR_OPEN;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
if (fscanf(fp, "%lf", a + i * m + j) != 1)
{fclose(fp); return ERROR_READ;}
fclose(fp);
return SUCCESS;
}
void print_matrix(const double *a, int n, int m, int p)
{
int np = (n > p ? p : n);
int mp = (m > p ? p : m);
int i, j;
for (i = 0; i < np; i++)
{
for (j = 0; j < mp; j++)
printf(" %10.3e", a[i * m + j]);
printf("\n");
}
}
void init_matrix(double *a, int n, int m, int k)
{
double (*q)(int, int, int, int);
double (*f[])(int, int, int, int) = {f1, f2, f3, f4};
int i, j;
q = f[k-1];
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
a[i * m + j] = q(n, m, i+1, j+1);
}

11
2025.03.28/dist/Linux/array_io.h vendored Normal file
View file

@ -0,0 +1,11 @@
#ifndef ARRAY_IO_H
#define ARRAY_IO_H
#include "io_status.h"
#include "init_f.h"
io_status read_matrix(double *a, int n, int m, const char *name);
void print_matrix(const double *a, int n, int m, int p);
void init_matrix(double *a, int n, int m, int k);
#endif

30
2025.03.28/dist/Linux/init_f.c vendored Normal file
View file

@ -0,0 +1,30 @@
#include "init_f.h"
#include <stdlib.h>
#define MAX(n, m) (n < m ? m : n)
double f1(int n, int m, int i, int j)
{
return MAX(n, m) - MAX(i, j) + 1;
}
double f2(int n, int m, int i, int j)
{
(void)n;
(void)m;
return MAX(i, j);
}
double f3(int n, int m, int i, int j)
{
(void)n;
(void)m;
return abs(i - j);
}
double f4(int n, int m, int i, int j)
{
(void)n;
(void)m;
return 1./(i+j-1);
}

9
2025.03.28/dist/Linux/init_f.h vendored Normal file
View file

@ -0,0 +1,9 @@
#ifndef INIT_F_H
#define INIT_F_H
double f1(int n, int m, int i, int j);
double f2(int n, int m, int i, int j);
double f3(int n, int m, int i, int j);
double f4(int n, int m, int i, int j);
#endif

13
2025.03.28/dist/Linux/io_status.h vendored Normal file
View file

@ -0,0 +1,13 @@
#ifndef IO_STATUS_H
#define IO_STATUS_H
#define LEN 1234
typedef enum _io_status
{
SUCCESS,
ERROR_OPEN,
ERROR_READ
} io_status;
#endif

73
2025.03.28/dist/Linux/matrix.c vendored Normal file
View file

@ -0,0 +1,73 @@
#include "matrix.h"
#include <math.h>
void init_vec_b(const double * restrict a, double * restrict b, int n)
{
#pragma omp parallel for
for (int i = 0; i < n; ++i)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int k = 0; k < n; k+=2)
sum += a[i * n + k];
b[i] = sum;
}
}
void matvec_mul(int n, const double * restrict A, const double * restrict x, double * restrict x_k)
{
#pragma omp parallel for
for (int i = 0; i < n; i++)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; j++)
sum += A[i * n + j] * x[j];
x_k[i] = sum;
}
}
double get_r1(const double * restrict A, const double * restrict x_k, const double * restrict b, int n)
{
double norm_r1x_1 = 0;
double residual_norm_1 = 0;
double r1 = 0;
#pragma omp parallel for reduction(+:residual_norm_1, norm_r1x_1)
for (int i = 0; i < n; ++i)
{
double bi = b[i];
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * x_k[j];
residual_norm_1 += fabs(sum - bi);
norm_r1x_1 += fabs(bi);
}
r1 = residual_norm_1 / norm_r1x_1;
return r1;
}
double get_r2_value(const double * restrict x_k, int n)
{
double relative_error = 0;
double total_diff = 0;
double template_sum = 0;
#pragma omp parallel for reduction(+:total_diff, template_sum)
for (int i = 0; i < n; ++i)
{
short int modi = !(i & 1);
total_diff += fabs(x_k[i] - modi);
template_sum += modi;
}
relative_error = total_diff / template_sum;
return relative_error;
}

9
2025.03.28/dist/Linux/matrix.h vendored Normal file
View file

@ -0,0 +1,9 @@
#ifndef MATRIX_H
#define MATRIX_H
void init_vec_b(const double * restrict a, double * restrict b, int n);
void matvec_mul(int n, const double * restrict A, const double * restrict x, double * restrict x_k);
double get_r1(const double * restrict A, const double * restrict x_k, const double * restrict b, int n);
double get_r2_value(const double * restrict x_k, int n);
#endif

446
2025.03.28/dist/Linux/solve.c vendored Normal file
View file

@ -0,0 +1,446 @@
#include "solve.h"
#include "matrix.h"
#include <math.h>
double t1_solve(const double * restrict A, double * restrict x_0, double * restrict x, int n, int m)
{
for (int i = 0; i < m; ++i)
{
double * swap_temp;
matvec_mul(n, A, x_0, x);
swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
if (m % 2 == 0)
{
for (int i = 0; i < n; i++)
{
double temp = x[i];
x[i] = x_0[i];
x_0[i] = temp;
}
} else
{
double * swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
return t1_get_eigenvalue_approx(A, x, x_0, n);
}
double t1_get_eigenvalue_approx(const double * restrict A, double * restrict x_k, double * restrict x, int n)
{
double dot_Ax_x = 0;
double dot_x_x = 0;
double rayleigh_quotient = 0;
#pragma omp parallel for reduction(+:dot_Ax_x, dot_x_x)
for (int i = 0; i < n; i++)
{
double x_i = x_k[i];
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; j++)
sum += A[i * n + j] * x_k[j];
x[i] = sum;
dot_Ax_x += sum * x_i;
dot_x_x += x_i * x_i;
}
rayleigh_quotient = dot_Ax_x / dot_x_x;
return rayleigh_quotient;
}
double t1_get_residual_norm(double * restrict x_k, double * restrict x, int n, double r1)
{
double norm_r1x_1 = 0;
double residual_norm_1 = 0;
double relative_residual = 0;
#pragma omp parallel for reduction(+:residual_norm_1, norm_r1x_1)
for (int i = 0; i < n; ++i)
{
double rx = r1 * x_k[i];
residual_norm_1 += fabs(x[i] - rx);
norm_r1x_1 += fabs(rx);
}
relative_residual = residual_norm_1 / norm_r1x_1;
return relative_residual;
}
void t2_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, int n, int m, double t)
{
for (int k = 0; k < m; ++k)
{
double * swap_temp;
matvec_mul(n, A, x_0, x);
#pragma omp simd
for (int i = 0; i < n; ++i)
x[i] = (b[i] - x[i]) * t + x_0[i];
swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
if (m % 2 == 0) // Проверил 100 раз
for (int i = 0; i < n; i++)
{
double temp = x[i];
x[i] = x_0[i];
x_0[i] = temp;
}
else
{
double * swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
}
void t3_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m)
{
for (int k = 0; k < m; ++k)
{
double *swap_temp = 0;
double t = 0;
double dot_r_r = 0, dot_Ar_r = 0;
#pragma omp parallel for
for (int i = 0; i < n; ++i)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * x_0[j];
r[i] = sum - b[i];
}
#pragma omp parallel for reduction(+:dot_r_r, dot_Ar_r)
for (int i = 0; i < n; ++i)
{
double ri = r[i];
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * r[j];
dot_Ar_r += sum * ri;
dot_r_r += ri * ri;
}
t = dot_r_r / dot_Ar_r;
#pragma omp simd
for (int i = 0; i < n; ++i)
x[i] = x_0[i] - r[i]*t;
swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
if (m % 2 == 0) // Проверил 100 раз
#pragma omp simd
for (int i = 0; i < n; i++)
{
double temp = x[i];
x[i] = x_0[i];
x_0[i] = temp;
}
else
{
double * swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
}
void t4_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m)
{
for (int k = 0; k < m; ++k)
{
double *swap_temp = 0;
double t = 0;
double dot_Ar_r = 0, dot_Ar_Ar = 0;
#pragma omp parallel for
for (int i = 0; i < n; ++i)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * x_0[j];
r[i] = sum - b[i];
}
#pragma omp parallel for reduction(+:dot_Ar_r, dot_Ar_Ar)
for (int i = 0; i < n; ++i)
{
double ri = r[i];
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * r[j];
dot_Ar_r += sum * ri;
dot_Ar_Ar += sum * sum;
}
t = dot_Ar_r / dot_Ar_Ar;
#pragma omp simd
for (int i = 0; i < n; ++i)
x[i] = x_0[i] - r[i]*t;
swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
if (m % 2 == 0) // Проверил 100 раз
#pragma omp simd
for (int i = 0; i < n; i++)
{
double temp = x[i];
x[i] = x_0[i];
x_0[i] = temp;
}
else
{
double * swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
}
void t5_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m)
{
for (int k = 0; k < m; ++k)
{
double *swap_temp = 0;
double t = 0;
double dot_Dr_r = 0, dot_ADr_Dr = 0;
#pragma omp parallel for
for (int i = 0; i < n; ++i)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * x_0[j];
r[i] = sum - b[i];
}
#pragma omp parallel for reduction(+:dot_Dr_r)
for (int i = 0; i < n; ++i)
{
double d_ri = r[i] / A[i*n +i];
dot_Dr_r += d_ri * r[i];
r[i] = d_ri;
}
#pragma omp parallel for reduction(+:dot_ADr_Dr)
for (int i = 0; i < n; ++i)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * r[j];
dot_ADr_Dr += sum * r[i];
}
t = dot_Dr_r / dot_ADr_Dr;
#pragma omp simd
for (int i = 0; i < n; ++i)
x[i] = x_0[i] - r[i]*t;
swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
if (m % 2 == 0) // Проверил 100 раз
#pragma omp simd
for (int i = 0; i < n; i++)
{
double temp = x[i];
x[i] = x_0[i];
x_0[i] = temp;
}
else
{
double * swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
}
void t6_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m)
{
for (int k = 0; k < m; ++k)
{
double *swap_temp = 0;
double t = 0;
double dot_ADr_r = 0, dot_ADr_ADr = 0;
#pragma omp parallel for
for (int i = 0; i < n; ++i)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * x_0[j];
r[i] = (sum - b[i]) / A[i*n + i];
}
#pragma omp parallel for reduction(+:dot_ADr_r, dot_ADr_ADr)
for (int i = 0; i < n; ++i)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * r[j];
dot_ADr_r += sum * r[i] * A[i*n + i];
dot_ADr_ADr += sum * sum;
}
t = dot_ADr_r / dot_ADr_ADr;
#pragma omp simd
for (int i = 0; i < n; ++i)
x[i] = x_0[i] - (r[i]*t);
swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
if (m % 2 == 0) // Проверил 100 раз
#pragma omp simd
for (int i = 0; i < n; i++)
{
double temp = x[i];
x[i] = x_0[i];
x_0[i] = temp;
}
else
{
double * swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
}
void t7_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m, double t)
{
(void)r;
for (int k = 0; k < m; ++k)
{
double * swap_temp;
#pragma omp parallel for
for (int i = 0; i < n; ++i)
{
double sum = 0;
#pragma omp simd reduction(+:sum)
for (int j = 0; j < n; ++j)
sum += A[i*n + j] * x_0[j];
x[i] = x_0[i] + ((b[i] - sum) / A[i*n + i]) * t;
}
swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
if (m % 2 == 0) // Проверил 100 раз
for (int i = 0; i < n; i++)
{
double temp = x[i];
x[i] = x_0[i];
x_0[i] = temp;
}
else
{
double * swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
}
void t8_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, double * restrict w, int n, int m, double t)
{
(void)r;
(void)w;
for (int k = 0; k < m; ++k)
{
double * swap_temp;
for (int i = 0; i < n; ++i)
{
double sum_x = 0;
double sum_r = 0;
double temp = 0;
double aii = A[i*n + i];
#pragma omp simd reduction(+:sum_x, sum_r)
for (int j = 0; j < i; ++j)
{
double aij = A[i*n + j];
double rj = aij * x_0[j];
sum_x += rj - aij * x[j];
sum_r += rj;
}
temp = aii * x_0[i];
sum_x += temp;
sum_r += temp;
#pragma omp simd reduction(+:sum_r)
for (int j = i+1; j < n; ++j)
sum_r += A[i*n + j] * x_0[j];
x[i] = (sum_x + (b[i] - sum_r) * t) / aii;
}
swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
if (m % 2 == 0) // Проверил 100 раз
for (int i = 0; i < n; i++)
{
double temp = x[i];
x[i] = x_0[i];
x_0[i] = temp;
}
else
{
double * swap_temp = x;
x = x_0;
x_0 = swap_temp;
}
}

16
2025.03.28/dist/Linux/solve.h vendored Normal file
View file

@ -0,0 +1,16 @@
#ifndef SOLVE_H
#define SOLVE_H
double t1_solve(const double * restrict A, double * restrict x_0, double * restrict x, int n, int m);
double t1_get_eigenvalue_approx(const double * restrict A, double * restrict x_k, double * restrict x, int n);
double t1_get_residual_norm(double * restrict x_k, double * restrict x, int n, double r1);
void t2_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, int n, int m, double t);
void t3_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m);
void t4_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m);
void t5_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m);
void t6_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m);
void t7_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, int n, int m, double t);
void t8_solve(const double * restrict A, double * restrict x_0, const double * restrict b, double * restrict x, double * restrict r, double * restrict w, int n, int m, double t);
#endif