Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- double f1 (double);
- double df1 (double);
- double d2f1 (double);
- double f2 (double);
- double df2 (double);
- double d2f2 (double);
- double f3 (double);
- double df3 (double);
- double d2f3 (double);
- double get_masheps ();
- double get_h (int, int, double);
- double get_dpm (double, double (*f) (double), double);
- double get_dp (double, double (*f) (double), double);
- double get_dpdm (double, double (*f) (double), double);
- double get_diff (double, double (*df) (double), double);
- void calculate (double (*f) (double), double (*df) (double), double (*d2f) (double), double, double);
- double f1 (double x)
- {
- return sin (x);
- }
- double df1 (double x)
- {
- return cos (x);
- }
- double d2f1 (double x)
- {
- return (-sin (x));
- }
- double f2 (double x)
- {
- return 100 * 100 * 10 * sin (x);
- }
- double df2 (double x)
- {
- return 100 * 100 * 10 * cos (x);
- }
- double d2f2 (double x)
- {
- return -100 * 100 * 10 * sin (x);
- }
- double f3 (double x)
- {
- return tan (x);
- }
- double df3 (double x)
- {
- return 1. / (cos (x) * cos (x));
- }
- double d2f3 (double x)
- {
- return 2. * sin (x) / (cos (x) * cos (x) * cos (x));
- }
- double get_masheps ()
- {
- double tmp = 1.;
- while (tmp + 1. > 1.)
- tmp /= 2.;
- return tmp * 2.;
- }
- double get_h (int k, int m, double eps)
- {
- double res = 0.;
- res = pow (10, k) * pow (eps, 1. / m);
- return res;
- }
- double get_dpm (double h, double (*f) (double), double x)
- {
- double tmp = 0.;
- tmp = (f (x + h) - f (x - h)) / (2. * h);
- return tmp;
- }
- double get_dp (double h, double (*f) (double), double x)
- {
- double tmp = 0.;
- tmp = (f (x + h) - f (x)) / h;
- return tmp;
- }
- double get_dpdm (double h, double (*f) (double), double x)
- {
- double tmp = 0.;
- tmp = (f (x + h) - 2 * f (x) + f (x - h)) / (h * h);
- return tmp;
- }
- double get_diff (double my_df, double (*df) (double), double x)
- {
- double res = 0.;
- res = fabs (my_df - df (x));
- return res;
- }
- void calculate (double (*f) (double), double (*df) (double), double (*d2f) (double), double x, double eps)
- {
- double h = 0., dpm = 0., dp = 0., dpdm = 0., res = 0.;
- int m = 0;
- m = 3;
- for (int k = -2; k < 3; k++)
- {
- h = get_h (k, m, eps);
- dpm = get_dpm (h, f, x);
- res = get_diff (dpm, df, x);
- printf ("h = %.2e, dpm = %.10e, diff = %e\n", h, dpm, res);
- }
- printf ("\n");
- m = 2;
- for (int k = -2; k < 3; k++)
- {
- h = get_h (k, m, eps);
- dp = get_dp (h, f, x);
- res = get_diff (dp, df, x);
- printf ("h = %.2e, dp = %.10e, diff = %e\n", h, dp, res);
- }
- printf ("\n");
- m = 4;
- for (int k = -2; k < 3; k++)
- {
- h = get_h (k, m, eps);
- dpdm = get_dpdm (h, f, x);
- res = get_diff (dpdm, d2f, x);
- printf ("h = %.2e, dpdm = %.10e, diff = %e\n", h, dpdm, res);
- }
- printf ("\n");
- }
- int main (void)
- {
- double eps = 0.;
- double x = 1.;
- eps = get_masheps ();
- printf ("eps = %e\n", eps);
- printf ("----------- sin(x) -----------\n");
- calculate (f1, df1, d2f1, x, eps);
- printf ("----------- 10^5 * sin(x) -----------\n");
- calculate (f2, df2, d2f2, x, eps);
- printf ("----------- tg(x) -----------\n");
- x = 1.59;
- calculate (f3, df3, d2f3, x, eps);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement