Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачник_Главы 7-9.doc
Скачиваний:
7
Добавлен:
15.08.2019
Размер:
2.6 Mб
Скачать

Глава 9. Численные методы

9.1 Приближенные методы решения уравнений.

Для алгебраических полиномов или трансцендентных уравнений (степень которых > 4) не существует формул, которые выражали бы величины корней через коэффициенты уравнений.

Сравнительно редко удается найти точное значение корней трансцендентных уравнений, поэтому важное значение приобретают методы приближенного нахождения корней уравнения и оценка степени их точности.

Пусть дано уравнение: f(x)=0, где функция f(x) определена и непрерывна в некотором конечном или бесконечном интервале

Всякое значение , обращающее функцию в 0 [f()=0] называется корнем уравнения или нулем функции. Сам процесс вычисления корней состоит их 2-х операций:

  1. Определение корней, т.е. установление возможно тесных промежутков [a;b], в которых содержится один и только один корень уравнения f(x)=0.

  2. Уточнение приближенных корней, т.е. доведение их до заданной степени точности.

Существуют разные методы уточнения корней уравнения:

Метод половинного деления

Наиболее надежным алгоритмом нахождения корней уравнения f(x)=0, особенно когда о поведении функции f(x) мало, что известно, является метод половинного деления.

Пусть f(x)=0, известен интервал [a;b], на которых функция меняет знак. Следовательно, между a и b существует точка x, в которой функция обращается в нуль.

При заданной абсолютной точности  алгоритм метода деления пополам состоит из следующих шагов:

  1. Вычислить значение функции в точке a, т.е. f(a)

  2. Положить (вычислить) с=(a+b)/2, вычислить f(c)

  3. Если f(a)*f(c)>0, то функции одного знака, следовательно, передвигаем границу а, т.е. а=с.

  4. Иначе функции имеют разные знаки следовательно передвигаем границу b, т.е. b=c.

  5. Если (b-a)>, то перейти к шагу 2), иначе закончить вычисление.

Любой из концов отрезка или их полусумма может быть использован в качестве корня уравнения f(x)=0. Алгоритм деления пополам довольно медлителен, но абсолютно застрахован от неудач.

Пример 9.1

Найти корни уравнения cos(x)=0 на интервале [0,π] c точностью ε=10 методом половинного деления.

/*****************************************************//* Приближенные методы решения уравнений. */

/* Метод половинного деления */

/*****************************************************/

#include <stdio.h>

#include <math.h>

#include <conio.h>

void main( )

{

clrscr();

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);

fa=cos(a);

if (fa!=0)

{

do

{

c=(a+b)/2;

fc=cos(c);

if (fa*fc>0)

{

a=c;

fa=fc;

}

else

b=c;

}

while(b-a>eps);

printf ("\n Корень уравнения =%f",c);

}

else

printf ("\n Корень уравнения =%f ", a);

getch();

}

Результаты работы программы.

Введите интервал [a,b] и точность eps

a= 0

b= 3.14

eps= 0.0001

Введено a=0.000000 b=3.140000 eps=0.000100

Корень уравнения =1.570863