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) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
sscanf(argv[1], "%lf", &x_0) == 1 &&
(sscanf(argv[2], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

@ -12,7 +12,7 @@ int main(int argc, char *argv[])
int m, k, cl, it, task = 5;
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]);
if (
@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

@ -25,7 +25,7 @@ int main(int argc, char *argv[])
(a <= b) &&
(sscanf(argv[4], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

@ -20,7 +20,7 @@ int main(int argc, char *argv[])
sscanf(argv[1], "%lf", &x_0) == 1 &&
(sscanf(argv[2], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

@ -22,7 +22,7 @@ int main(int argc, char *argv[])
(a <= b) &&
(sscanf(argv[3], "%lf", &eps) == 1 && (eps >= 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]);
return -1;

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -19,7 +19,7 @@ int main (int argc, char *argv[])
!((argc == 4) &&
sscanf(argv[1], "%lf", &x) == 1 &&
((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]);
return -1;

View file

@ -3,12 +3,13 @@
#include <math.h>
#include <float.h>
int t3_solve (
double t3_solve (
double (*f) (double),
double x, double h
) {
if (h < DBL_EPSILON)
double h_2 = h * h;
if (h_2 < NUM_FPE)
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
#define SOLVE_H
int t3_solve (
#define NUM_FPE 1e-300
double t3_solve (
double (*f) (double),
double x, double h
);