Рекурсивное вычисление функции - C (СИ)
Формулировка задачи:
здратвуйте
у меня есть не большая проблемка с выполнением задания
задание надо в какойто функции f(x) найти такое х при котором f(x)=0, и сделать это надо рекурсивно и методом половинного диления(тоесть мы в функцию отправляем координаты х1 и х2 в которых значение функции имеет разный знак)
функция должна нам вернуть координату в которой функция равна 0
я вот написал но есть небольшая проблема ,программа работает только если я подгоню функцию так чтоб координата возврощаемой точки было целым числом
помогите пожалуйста дороботать или исправить чтоб работало
заранее спасибо
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define EPC 0,001 double funk(double x); double tochka(double x1,double x2); double tochka(double x1,double x2) { double x,g,y,y2,y1,k; x=(x1+x2)/2; y=funk(x); y1=funk(x1); y2=funk(x2); g=abs(y); k=x; if(g>EPC); { if(y>0) { if(y1>y2) k=tochka(x,x2); if(y1<y2) k=tochka(x1,x); } if(y<0) { if(y1>y2) k=tochka(x1,x); if(y1<y2) k=tochka(x,x2); } } return k; } double funk(double x) { double y; y=((x*x)-16); return y; } void main() { double x1,x2,k; scanf("%lf",&x1); scanf("%lf",&x2); if(x1<x2) k=tochka(x1,x2); if(x1>x2) k=tochka(x2,x1); printf("%lf",k); system("pause"); }
Решение задачи: «Рекурсивное вычисление функции»
textual
Листинг программы
#include <stdio.h> #include <math.h> int Sign(double x) { if (x < 0) return -1; if (x > 0) return 1; return 0; } double f(double x) { return x*x-2; } double bisect(double (*F) (double),double a, double b, double eps) { double c,fa,fb,fc; c=0.5*(a+b); if (fabs(a-b) <= eps) return c; else { fa=F(a); fb=F(b); fc=F(c); if (Sign(fa)*Sign(fc)<0) return bisect(F,a,c,eps); else return bisect(F,c,b,eps); } } int main(int argc, char* argv[]) { printf("%f\n",bisect(&f,0.0,2.0,0.0001)); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек: iostream.h и math.h
- Определение функции Sign(double x), которая возвращает знак числа x (-1, если x < 0; 0, если x = 0; 1, если x > 0).
- Определение функции f(double x), которая возвращает значение функции (x^2 - 2).
- Определение функции bisect(double (*F) (double),double a, double b, double eps), которая использует метод бисекции для поиска корня функции F в заданном интервале [a, b] с заданной точностью eps. Функция использует рекурсию для этого.
- В функции main() происходит вызов функции bisect() с аргументами: адрес функции f, значения 0.0 и 2.0 для a и b соответственно и значение 0.0001 для eps. Результат вычисления корня выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д