Численно убедиться, является ли заданная функция y = f (x) четной или нечетной на заданном отрезке [-a; a] - C (СИ)
Формулировка задачи:
Численно убедиться, является ли заданная функция y = f (x) четной или нечетной на заданном отрезке [-a; a]. Учесть погрешность вычислений и возможные точки разрыва функции. Проверить, например, для функций y = x4, y = tg x, y = ex, выполняя их вычисления на отрезке [-5, 5] с шагом 0,1.
Решение задачи: «Численно убедиться, является ли заданная функция y = f (x) четной или нечетной на заданном отрезке [-a; a]»
textual
Листинг программы
#include <stdio.h> #include <math.h> #include <locale.h> /* проверка на нечетность. Возвращает ~0 если нечетная */ double odd(double x, double (*f)(double)) { return f(x) + f(-x); } /* проверка на четность. Возвращает ~0 если четная */ double even(double x, double (*f)(double)) { return f(x) - f(-x); } /* общая проверка, вывод результата */ void check(double(*f)(double), const char *name) { double x = 0., step = 0.1, max = 5.0, epsilon = 1E-10; int isOdd = 1, isEven = 1; while(x <= max) { if(f(x)> epsilon) { if(fabs(odd(x,f)) < epsilon) isEven *= 0; else if(fabs(even(x,f)) < epsilon) isOdd *= 0; else { isEven *= 0; isOdd *= 0; } } x += step; } if(isOdd) printf("\nФункция %s(x) - нечетная", name); else if (isEven) printf("\nФункция %s(x) - четная", name); else printf("\nФункция %s(x) - ни четная, ни нечетная", name); } /* пару функций от себя */ double pow4(double x) { return x*x*x*x; } double myFunction(double x) { return cos(138*x) / sin(34*x + 155); } int main() { setlocale(LC_ALL, ""); double (*func)(double); /* проверка библиотечных функций */ func = tan; check(func, "tg"); func = sin; check(func, "sin"); func = cos; check(func, "cos"); func = exp; check(func, "exp"); /* проверка собственных функций */ func = pow4; check(func, "x^4"); func = myFunction; check(func, "myFunction"); getchar(); return 0; }