- •Предисловие
- •Основные навыки и умения
- •Логическая культура: знание логики, логическая интуиция.
- •Языковые знания и умения.
- •Поисковые знания и умения.
- •Алгоритмические навыки и умения.
- •Общие подходы к построению алгоритмов
- •Тестирование и сопровождение программ
- •Обязательный минимум содержания среднего (полного) общего образования
- •Технология обработки текстовой информации
- •Введение в информатику
- •Системы счисления
- •Перевод из десятичной системы счисления
- •Перевод в десятичную систему счисления
- •Перевод чисел из двоичной системы счисления в восьмеричную, шестнадцатеричную системы и обратно
- •Выполнение арифметических операций в позиционных системах счисления
- •Элементы математической логики
- •Логические законы
- •Алгоритм и его свойства
- •Исполнители. Компьютер - универсальный исполнитель
- •Работа компьютера
- •Turbo pascal - исполнитель паскаль-программ
- •Конструкции Паскаля
- •Типы данных
- •Целый тип данных
- •Вещественный тип данных
- •Символьный тип данных
- •Логический тип данных
- •Выражения
- •Операторы ввода-вывода
- •Оператор присваивания
- •Общий вид программы на Паскале
- •Условный оператор
- •If логическое_выражение then оператор1 else оператор2;
- •If логическое_выражение then оператор1;
- •Операторы цикла
- •Построение линейных алгоритмов
- •Построение ветвящихся алгоритмов
- •Построенние циклических алгоритмов
- •Нахождение суммы
- •Вложенные циклы
- •Переборный метод решения задач
- •Численные методы
- •Метод итераций
- •Метод половинного деления
- •Вычисление определенного интеграла методом трапеций
- •Случайные числа
- •Метод Монте-Карло (метод статистических испытаний)
- •Массивы Одномерные массивы
- •Перебор элементов массива
- •Перебор подмассивов
- •Классы задач по обработке массивов
- •Задачи первого класса
- •Задачи второго класса
- •Задачи третьего класса
- •Задачи четвертого класса
- •Сортировка массивов
- •Сортировка вставками
- •Сортировка пузырьком (обменом)
- •Сортировка выбором
- •Сортировка фон Неймана (слиянием)
- •Двумерные массивы
- •Обработка строк
- •Процедуры и функции
- •Рекурсия
- •Работа с графикой
- •Классы программного обеспечения
- •Компиляция и интерпретация
- •Текстовый редактор
- •Электронные таблицы
- •Системы управления базами данных (субд)
- •Пример решения экзаменационного билета
- •Контрольные работы
- •Контрольная работа №1
- •Контрольная работа № 2
- •Контрольная работа № 3
- •Контрольная работа № 4
- •Контрольная работа № 5
- •Библиографический список
Численные методы
Решение конкретных задач часто сводится к нахождению корней уравнения вида
f(x) = 0,
где функция f(x) определена и непрерывна на некотором интервале.
Если f(x) - многочлен, то уравнение называют алгебраическим, если же в f(x) входят тригонометрические, логарифмические, показательные функции, то такое уравнение называют трансцендентное.
Всякое значение х* такое, что f(x*) = 0 называется корнем уравнения, а нахождение этого значения - решение уравнения.
Решение уравнения разбивается на два этапа:
-
отделение корней, т.е. отыскание достаточно малых областей, в каждой из которых заключен один и только один корень уравнения;
-
вычисление выделенного корня с заданной точностью.
Для вычисления выделенного корня существует множество методов. В этом пособии будут рассмотрены методы итераций и половинного деления.
Метод итераций
Уравнение f(x) необходимо представить в виде x = (x). Выберем теперь на участке [a, b] (участок, в котором находится корень уравнения) произвольную точку x0 и последовательно будем вычислять:
x1 = (x0), x2 = (x1), ... , xk = (xk-1).
Обычно в качестве x0 выбирают левую границу интервала [a, b].
Процесс последовательного вычисления значений xk (k = 1, 2, ...) по указанным формулам называется итерационным процессом (процессом последовательных приближений).
Задача. Решить уравнение ; отрезок, на котором существует корень, [2; 3].
Преобразуем уравнение .
Var x0, x1, eps: real;
begin
write (‘ введите начальное приближение’);
readln (x0);
write (‘введите абсолютную погрешность’);
readln (eps);
x1 := (3*sin(sqrt(x0)) - 3.8)/0.35;
while abs(x0 - x1) > eps do
begin
x0 := x1;
x1 := 3*sin(sqrt(x0) - 3.8)/0.35
end;
writeln (‘ решение уравнения х =’, x0)
end.
Метод половинного деления
Пусть дано уравнение f(x) = 0, где функция f непрерывна на отрезке [a, b] и на концах отрезка имеет разные знаки, т.е. f(a)*f(b)<0. Если непрерывная функция на отрезке меняет знак, то она на этом отрезке имеет, по крайней мере, один корень. Пусть [a, b] выделен так, что на нем имеется только один корень уравнения. Найдем этот корень методом половинного деления.
Для этого разделим отрезок [a, b] пополам и присвоим x1 = (a+b)/2. Если f(x) = 0, то х1 - корень уравнения. Если f(x) 0, то выбираем тот из отрезков [a, x1] или [x1, b], на концах которого f(x) имеет противоположные знаки. Полученный отрезок снова делим пополам и проводим те же рассуждения. Процесс продолжаем до тех пор, пока длина отрезка, на концах которого функция имеет противоположные знаки, не станет меньше заданной точности . Как только длина отрезка станет меньше , любую точку отрезка можно с точностью принять за корень уравнения f(x) = 0.
В программе используется цикл с условием, поскольку есть две причины выхода из цикла: 1). когда f(x) = 0 или f(x) ;
2). x1 - x2 < .
Задача. Найти корень уравнения на отрезке [1; 2] с точностью =10-4 методом половинного деления.
Const a = 1;
b = 2;
eps = 1e-4;
var x1, x2, x, y1, y2: real;
f : boolean;
begin
x1 := a; x2 := b; f := true;
while f do
if abs (x1 - x2) > eps then
begin
y1 := cos(2/x1) - 2*sin(1/x1) + 1/x1;
x := (x1 + x2)/2;
y2 := cos(2/x) - 2*sin(1/x) + 1/x;
if abs(y2) > eps then
if y1*y2 > 0 then x1 := x
else x2 := x
else f := false
end
else f := false;
writeln (‘корень уравнения ’,x)
end.