This commit is contained in:
AZEN-SGG 2025-05-11 17:02:30 +03:00
parent f140ae9722
commit 6efd4f5786
20 changed files with 51 additions and 34 deletions

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) && (a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[4], "%d", &m) == 1) && m > 0) && ((sscanf(argv[4], "%d", &m) == 1) && m > 0) &&
((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]); fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]);
return -1; return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
sscanf(argv[1], "%lf", &x_0) == 1 && sscanf(argv[1], "%lf", &x_0) == 1 &&
(sscanf(argv[2], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[2], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[3], "%d", &m) == 1) && (m > 0)) && ((sscanf(argv[3], "%d", &m) == 1) && (m > 0)) &&
((sscanf(argv[4], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[4], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s x_0 eps M k\n", argv[0]); fprintf(stderr, "Usage: %s x_0 eps M k\n", argv[0]);
return -1; return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) && (a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[4], "%d", &m) == 1) && m > 0) && ((sscanf(argv[4], "%d", &m) == 1) && m > 0) &&
((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]); fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]);
return -1; return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) && (a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[4], "%d", &m) == 1) && m > 0) && ((sscanf(argv[4], "%d", &m) == 1) && m > 0) &&
((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]); fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]);
return -1; return -1;

View file

@ -12,7 +12,7 @@ int main(int argc, char *argv[])
int m, k, cl, it, task = 5; int m, k, cl, it, task = 5;
double (*f) (double); double (*f) (double);
double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6}; //TODO: Rem f7 double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6};
int len_f = sizeof(f_lst) / sizeof(f_lst[0]); int len_f = sizeof(f_lst) / sizeof(f_lst[0]);
if ( if (
@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) && (a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[4], "%d", &m) == 1) && m > 0) && ((sscanf(argv[4], "%d", &m) == 1) && m > 0) &&
((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]); fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]);
return -1; return -1;

View file

@ -25,7 +25,7 @@ int main(int argc, char *argv[])
(a <= b) && (a <= b) &&
(sscanf(argv[4], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[4], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[5], "%d", &num_iter) == 1) && num_iter > 0) && ((sscanf(argv[5], "%d", &num_iter) == 1) && num_iter > 0) &&
((sscanf(argv[6], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[6], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s m a b eps M k\n", argv[0]); fprintf(stderr, "Usage: %s m a b eps M k\n", argv[0]);
return -1; return -1;

View file

@ -20,7 +20,7 @@ int main(int argc, char *argv[])
sscanf(argv[1], "%lf", &x_0) == 1 && sscanf(argv[1], "%lf", &x_0) == 1 &&
(sscanf(argv[2], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[2], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[3], "%d", &m) == 1) && (m > 0)) && ((sscanf(argv[3], "%d", &m) == 1) && (m > 0)) &&
((sscanf(argv[4], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[4], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s x_0 eps M k\n", argv[0]); fprintf(stderr, "Usage: %s x_0 eps M k\n", argv[0]);
return -1; return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) && (a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[4], "%d", &m) == 1) && m > 0) && ((sscanf(argv[4], "%d", &m) == 1) && m > 0) &&
((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]); fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]);
return -1; return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) && (a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) && (sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 0)) &&
((sscanf(argv[4], "%d", &m) == 1) && m > 0) && ((sscanf(argv[4], "%d", &m) == 1) && m > 0) &&
((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[5], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]); fprintf(stderr, "Usage: %s a b eps M k\n", argv[0]);
return -1; return -1;

View file

@ -1,6 +1,7 @@
#include "init_f.h" #include "init_f.h"
#include <math.h> #include <math.h>
#include <float.h>
static int cl = 0; static int cl = 0;
@ -11,9 +12,9 @@ int get_call_count (void)
return cl; return cl;
} }
int get_call_function_count (void) int get_call_function_count (void)
{ {
return cl_f; return cl;
} }
int get_call_derivative_count (void) int get_call_derivative_count (void)
@ -130,4 +131,4 @@ double d6 (double x)
else if (x > DBL_EPSILON) else if (x > DBL_EPSILON)
return (1.0 / (sqrt(sqrt_x + 1) * sqrt_x)) * 0.25; return (1.0 / (sqrt(sqrt_x + 1) * sqrt_x)) * 0.25;
return 0; return 0;
} }

View file

@ -2,7 +2,7 @@
#define INIT_F_H #define INIT_F_H
int get_call_count (void); int get_call_count (void);
int get_call_function_count (void) ; int get_call_function_count (void);
int get_call_derivative_count (void); int get_call_derivative_count (void);
double f0 (double x); double f0 (double x);

View file

@ -8,7 +8,8 @@ if [ "$#" -ne 1 ]; then
exit 1 exit 1
fi fi
prog=$(printf "%02d" "$1") num=$(printf "%02d" "$1")
prog="a$num.out"
mkdir -p tests mkdir -p tests
@ -18,14 +19,14 @@ if [ -f Makefile ]; then
make make
fi fi
if [ ! -f a0$prog.out ]; then if [ ! -f $prog ]; then
echo "Отсутствует исполняемый файл... [a0$prog.out]" echo "Отсутствует исполняемый файл... [$prog]"
echo "Завершение..." echo "Завершение..."
exit 2 exit 2
fi fi
outlog="$(pwd)/tests/out_a${prog}_$script_name.log" outlog="$(pwd)/tests/out_a${num}_$script_name.log"
errlog="$(pwd)/tests/err_a${prog}_$script_name.log" errlog="$(pwd)/tests/err_a${num}_$script_name.log"
rm -f "$outlog" "$errlog" rm -f "$outlog" "$errlog"
@ -36,15 +37,21 @@ i=2
for (( k = 3 ; k < 7; k++ )); do for (( k = 3 ; k < 7; k++ )); do
for (( a = -100 ; a < -40 ; a++ )); do for (( a = -100 ; a < -40 ; a++ )); do
for (( b = -9 ; b < 10 ; b++ )); do for (( b = -9 ; b < 10 ; b++ )); do
echo "./a0$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" $eps $iter $k" x="$(echo "$a / 10" | bc -l)"
echo "$i $(./a$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" $eps $iter $k)" y="$(echo "$b / 10" | bc -l)"
cmd="./$prog $poly_deg $x $y $eps $iter $k"
echo "$cmd"
echo "$i $(eval "$cmd")"
((i+=2)) ((i+=2))
done done
done done
for (( a = -9 ; a < 10 ; a++ )); do for (( a = -9 ; a < 10 ; a++ )); do
for (( b = 11 ; b < 100 ; b++ )); do for (( b = 11 ; b < 100 ; b++ )); do
echo "$i ./a0$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" $eps $iter $k" x="$(echo "$a / 10" | bc -l)"
echo "$i $(./a$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" $eps $iter $k)" y="$(echo "$b / 10" | bc -l)"
cmd="./$prog $poly_deg $x $y $eps $iter $k"
echo "$cmd"
echo "$i $(eval "$cmd")"
((i+=2)) ((i+=2))
done done
done done

View file

@ -1,6 +1,8 @@
#ifndef INIT_F_H #ifndef INIT_F_H
#define INIT_F_H #define INIT_F_H
#define NUM_FPE 1e-300
int get_call_count (void); int get_call_count (void);
double f0 (double x); double f0 (double x);
double f1 (double x); double f1 (double x);

View file

@ -3,11 +3,11 @@
#include <math.h> #include <math.h>
#include <float.h> #include <float.h>
int t1_solve ( double t1_solve (
double (*f) (double), double (*f) (double),
double x, double h double x, double h
) { ) {
if (h < DBL_EPSILON) if (h < NUM_FPE)
return DBL_MAX; return DBL_MAX;
return (f(x + h) - f(x)) / h; return (f(x + h) - f(x)) / h;
} }

View file

@ -1,7 +1,9 @@
#ifndef SOLVE_H #ifndef SOLVE_H
#define SOLVE_H #define SOLVE_H
int t1_solve ( #define NUM_FPE 1e-300
double t1_solve (
double (*f) (double), double (*f) (double),
double x, double h double x, double h
); );

View file

@ -3,11 +3,11 @@
#include <math.h> #include <math.h>
#include <float.h> #include <float.h>
int t2_solve ( double t2_solve (
double (*f) (double), double (*f) (double),
double x, double h double x, double h
) { ) {
if (h < DBL_EPSILON) if (h < NUM_FPE)
return DBL_MAX; return DBL_MAX;
return (f(x + h) - f(x - h)) / (2 * h); return (f(x + h) - f(x - h)) / (2 * h);
} }

View file

@ -1,7 +1,9 @@
#ifndef SOLVE_H #ifndef SOLVE_H
#define SOLVE_H #define SOLVE_H
int t2_solve ( #define NUM_FPE 1e-300
double t2_solve (
double (*f) (double), double (*f) (double),
double x, double h double x, double h
); );

View file

@ -19,7 +19,7 @@ int main (int argc, char *argv[])
!((argc == 4) && !((argc == 4) &&
sscanf(argv[1], "%lf", &x) == 1 && sscanf(argv[1], "%lf", &x) == 1 &&
((sscanf(argv[2], "%lf", &h) == 1) && (h > 0)) && ((sscanf(argv[2], "%lf", &h) == 1) && (h > 0)) &&
((sscanf(argv[3], "%d", &k) == 1) && ((0 <= k) && (k <= len_f)))) ((sscanf(argv[3], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
) { ) {
fprintf(stderr, "Usage: %s x h k\n", argv[0]); fprintf(stderr, "Usage: %s x h k\n", argv[0]);
return -1; return -1;

View file

@ -3,12 +3,13 @@
#include <math.h> #include <math.h>
#include <float.h> #include <float.h>
int t3_solve ( double t3_solve (
double (*f) (double), double (*f) (double),
double x, double h double x, double h
) { ) {
if (h < DBL_EPSILON) double h_2 = h * h;
if (h_2 < NUM_FPE)
return DBL_MAX; return DBL_MAX;
return (f(x + h) - 2 * f(x) + f(x - h)) / (h * h); return (f(x + h) - 2 * f(x) + f(x - h)) / h_2;
} }

View file

@ -1,7 +1,9 @@
#ifndef SOLVE_H #ifndef SOLVE_H
#define SOLVE_H #define SOLVE_H
int t3_solve ( #define NUM_FPE 1e-300
double t3_solve (
double (*f) (double), double (*f) (double),
double x, double h double x, double h
); );