Для алгебраических полиномов или трансцендентных уравнений (степень которых > 4) не существует формул, которые выражали бы величины корней через коэффициенты уравнений.
Сравнительно редко удается найти точное значение корней трансцендентых уравнений, поэтому важные значения приобретают методы приближенного нахождения корней уравнения и оценка степени их точности.
Пусть дано уравнение: f(x)=0, где функция f(x) определена и непрерывна в некотором конечном или бесконечном интервале
Всякое значение x, обращающее функцию в 0 [f(x)=0] называется корнем уравнения или нулем функции. Сам процесс вычисления корней состоит их 2-х операций:
1) Определение корней, т.е. установление возможнотесных промежутков [a;b], в которых содержится один и только один корень уравнения f(x)=0.
2) Уточнение приближенных корней, т.е. доведение их до заданной степени точности.
Существуют разные методы уточнения корней уравнения:
Наиболее надежным алгоритмом нахождения корней уравнения f(x)=0,
особенно когда о поведении функции f(x) мало, что известно, является метод половинного деления.
Пусть f(x)=0, известен интервал [a;b], на которых функция меняет знак. Следовательно, между a и b существует точка x, в которой функция обращается в нуль.
При заданной абсолютной точности e алгоритм метода деления пополам состоит из следующих шагов:
1) Вычислить значение функции в точке a, т.е. f(a)=?
Если f(a)*f(c)>0, то функции одного знака, следовательно, передвигаем границу а, т.е. а=с.
3) Иначе функции имеют разные знаки следовательно передвигаем границу b,т.е. b=c.
4) Если (b-a)>e, то перейти к шагу 2)
Иначе, закончить вычисление.
Любой из концов отрезка или их полусумма может быть использован в качестве корня уравнения f(x)=0. Алгоритм деления пополам довольно медлителен, но абсолютно застрахован от неудач.
Пример: Найти корни уравнения cos(x)=0 на интервале [0,π] c точностью
ε=10
#include <stdio.h>
#include <math.h>
void main( )
{ float a, b, eps;
float c, fa, fc;
printf (“\n Введите интервал [a,b] и точность eps \n”);
printf (“\n a=”); scanf (“%f”,&a);
printf (“\n b=”); scanf (“%f”,&b);
printf (“\n eps=”); scanf (“%f”,&eps);
printf (“\n Введено a=%f \t b=%f \t eps=%f”, a, b, eps);