Task 8 is done?
This commit is contained in:
parent
c10e3d3bb1
commit
84233f1e84
6 changed files with 101 additions and 11 deletions
|
@ -44,7 +44,7 @@ static inline int is_null (const double a)
|
|||
|
||||
static inline int is_eps (const double a, const double eps)
|
||||
{
|
||||
return (((a < 0) ? -a : a) - eps) < DBL_EPSILON;
|
||||
return ((a < 0) ? -a : a) < eps;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -28,7 +28,8 @@ int t4_solve (
|
|||
|
||||
for (it = 1; it <= m; ++it)
|
||||
{
|
||||
c = b - ((b - a) / (y_b - y_a)) * y_b;
|
||||
// c = b - ((b - a) / (y_b - y_a)) * y_b;
|
||||
c = a - ((b - a) / (y_b - y_a)) * y_a;
|
||||
y = f(c);
|
||||
|
||||
if (is_eps(y, eps))
|
||||
|
|
50
2025.05.02/08Ex/comp.h
Normal file
50
2025.05.02/08Ex/comp.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
#ifndef COMP_H
|
||||
#define COMP_H
|
||||
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
|
||||
static inline double * fpmax (double *pa, double *pb, double fa, double fb, double *max_f_p)
|
||||
{
|
||||
if ((fa - fb) > DBL_EPSILON)
|
||||
{
|
||||
*max_f_p = fa;
|
||||
return pa;
|
||||
} else
|
||||
{
|
||||
*max_f_p = fb;
|
||||
return pb;
|
||||
}
|
||||
}
|
||||
|
||||
static inline double * fp_abs_max (double *pa, double *pb, double *fa, double *fb, double **max_f_p)
|
||||
{
|
||||
if ((fabs(*fa) - fabs(*fb)) > DBL_EPSILON)
|
||||
{
|
||||
*max_f_p = fa;
|
||||
return pa;
|
||||
} else
|
||||
{
|
||||
*max_f_p = fb;
|
||||
return pb;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int is_equal (const double a, const double b)
|
||||
{
|
||||
double diff = a - b;
|
||||
double max_val = (a > b) ? a : b;
|
||||
return ((diff < 0) ? -diff : diff) < (DBL_EPSILON * max_val);
|
||||
}
|
||||
|
||||
static inline int is_null (const double a)
|
||||
{
|
||||
return ((a < 0) ? -a : a) < DBL_EPSILON;
|
||||
}
|
||||
|
||||
static inline int is_eps (const double a, const double eps)
|
||||
{
|
||||
return (((a < 0) ? -a : a) - eps) < DBL_EPSILON;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -6,17 +6,54 @@
|
|||
int t8_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
double eps, int m, double *x
|
||||
double eps, int m, double *res
|
||||
) {
|
||||
int it = 1;
|
||||
double x_l = 0, y_l = 0, c = a, y = f(a);
|
||||
double h = a - b;
|
||||
double x_l = 0, y_l = 0, x = a, y = f(a);
|
||||
|
||||
if (fabs(b - a) < DBL_EPSILON)
|
||||
{
|
||||
*x = a;
|
||||
*res = a;
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (it <= m)
|
||||
{
|
||||
h *= -0.1;
|
||||
|
||||
while (1)
|
||||
{
|
||||
it++;
|
||||
|
||||
if (it > m)
|
||||
return -1;
|
||||
|
||||
x_l = x;
|
||||
y_l = y;
|
||||
|
||||
x += h;
|
||||
|
||||
if ((a - x) > DBL_EPSILON || (x - b) > DBL_EPSILON) {
|
||||
*res = x_l;
|
||||
return it;
|
||||
}
|
||||
|
||||
y = f(x);
|
||||
if ((y_l - y) > DBL_EPSILON) {
|
||||
if ((y_l - y) < eps) {
|
||||
*res = x_l;
|
||||
return it;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
for (double h = (b - a) * 0.1; fabs(h) > DBL_EPSILON; h *= -0.1)
|
||||
{
|
||||
do {
|
||||
|
@ -54,4 +91,4 @@ int t8_solve (
|
|||
|
||||
return it;
|
||||
}
|
||||
|
||||
*/
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
int t8_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
double eps, int m, double *x
|
||||
double eps, int m, double *res
|
||||
);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
script_name="$(basename "$0")"
|
||||
|
||||
iter="1000"
|
||||
eps="1e-14"
|
||||
|
||||
if [ "$#" -ne 1 ]; then
|
||||
echo "Не указан как параметр номер программы"
|
||||
|
@ -34,15 +36,15 @@ 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)" 1e-16 $iter $k"
|
||||
echo "$i $(./a0$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" 1e-16 $iter $k)"
|
||||
echo "./a0$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" $eps $iter $k"
|
||||
echo "$i $(./a0$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" $eps $iter $k)"
|
||||
((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)" 1e-16 $iter $k"
|
||||
echo "$i $(./a0$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" 1e-16 $iter $k)"
|
||||
echo "$i ./a0$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" $eps $iter $k"
|
||||
echo "$i $(./a0$prog.out "$(echo "$a / 10" | bc -l)" "$(echo "$b / 10" | bc -l)" $eps $iter $k)"
|
||||
((i+=2))
|
||||
done
|
||||
done
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue