- •Глава 7. Типы определяемые пользователем Структуры
- •Задания
- •Формирование структуры
- •7.2 Массивы структур
- •Глава 8 Файлы.
- •Примеры составления программ на языке с.
- •Задания.
- •Глава 9. Численные методы
- •9.1 Приближенные методы решения уравнений.
- •Метод половинного деления
- •Метод хорд.
- •Метод Ньютона.
- •Метод простой итерации.
- •Задания
- •9.2 Решение систем уравнений
- •9.3 Вычисление интегралов
- •9.4 Вычисление сумм числовых рядов Вычисление конечных сумм
- •Список литературы
- •456776, Г. Снежинск, ул. Комсомольская, 8
Глава 9. Численные методы
9.1 Приближенные методы решения уравнений.
Для алгебраических полиномов или трансцендентных уравнений (степень которых > 4) не существует формул, которые выражали бы величины корней через коэффициенты уравнений.
Сравнительно редко удается найти точное значение корней трансцендентных уравнений, поэтому важное значение приобретают методы приближенного нахождения корней уравнения и оценка степени их точности.
Пусть дано уравнение: f(x)=0, где функция f(x) определена и непрерывна в некотором конечном или бесконечном интервале
Всякое значение , обращающее функцию в 0 [f()=0] называется корнем уравнения или нулем функции. Сам процесс вычисления корней состоит их 2-х операций:
Определение корней, т.е. установление возможно тесных промежутков [a;b], в которых содержится один и только один корень уравнения f(x)=0.
Уточнение приближенных корней, т.е. доведение их до заданной степени точности.
Существуют разные методы уточнения корней уравнения:
Метод половинного деления
Наиболее надежным алгоритмом нахождения корней уравнения f(x)=0, особенно когда о поведении функции f(x) мало, что известно, является метод половинного деления.
Пусть f(x)=0, известен интервал [a;b], на которых функция меняет знак. Следовательно, между a и b существует точка x, в которой функция обращается в нуль.
При заданной абсолютной точности алгоритм метода деления пополам состоит из следующих шагов:
Вычислить значение функции в точке a, т.е. f(a)
Положить (вычислить) с=(a+b)/2, вычислить f(c)
Если f(a)*f(c)>0, то функции одного знака, следовательно, передвигаем границу а, т.е. а=с.
Иначе функции имеют разные знаки следовательно передвигаем границу b, т.е. b=c.
Если (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