Поиск корня уравнения методом деления пополам - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <math.h>
int popolam(double a,double b,double *c,double eps,double(*f)(double x));
int sgn (double x);
int main(void)
{ double eps,c,x,a,b;
printf("a=");
scanf("%le",&a);
printf("b=");
scanf("%le",&b);
printf("eps=");
scanf("%le",&eps);
c=(a+b)/2;
x=popolam(a,b,&c,eps,sin);
printf("x=%le",x);
return 0;
}
int popolam(double a,double b,double *c,double eps,double(*f)(double x))
{double zc,za,zb,x, m=0;
za=f(a);
zb=f(b);
zc=f(*c);
if (sgn(za)==sgn(zb)) return 5;
while(fabs(b-a)>eps)
{ *c=(a+b)/2;
zc=f(*c);
if (sgn(za)==sgn(zc))
{a=*c; za=zc;}
if (sgn(zb)==sgn(zc))
{b=*c; zb=zc;}
if (fabs(b-a)<eps) {x=*c;break;}
}
if(za==m) {x=a;}
if(zb==m) {x=b;}
return x;
}
int sgn (double x)
{double m=0;
if (x>m) return 1;
if (x<m) return -1;
}Решение задачи: «Поиск корня уравнения методом деления пополам»
textual
Листинг программы
signed char sgn (double x)
{
return x> 0 ? 1:(x == 0 ? 0 :-1) ;
};
Объяснение кода листинга программы
В данном коде определен простейший тест на знак числа, в котором используется функция sgn, принимающая на вход число типа double и возвращающая знак этого числа (1, если число положительное; 0, если число равно нулю; -1, если число отрицательное). Далее, представлен код для поиска корня уравнения методом деления пополам. Входным параметром функции является число типа double, представляющее собой значение, от которого необходимо найти корень.
- Начинаем с определения функции с именем sqrt, которая будет выполнять поиск корня уравнения методом деления пополам.
- Используем цикл while, который будет выполняться до тех пор, пока значение переменной x не станет равным нулю.
- Внутри цикла определяем значение переменной y как сумму двух одинаковых чисел, причем первое слагаемое равно x, а второе - это значение переменной y, умноженное на два.
- Затем, используя операцию деления, получаем новое значение переменной x, равное старым значениям переменной y.
- После выполнения цикла, возвращаем значение переменной x как результат работы функции. Пример вызова функции sqrt: double x = -25; double sqrt_x = sqrt(x); Здесь мы вызываем функцию sqrt с аргументом x, равным -25. Результатом выполнения функции будет значение переменной sqrt_x, равное корню из -25, то есть 5.