commit caa1bafa61c2125b138c16b4095a04bbb93164a6 Author: Артур Габитов Date: Sat Sep 5 05:10:26 2026 +0000 Добавить readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e563116 --- /dev/null +++ b/readme.md @@ -0,0 +1,196 @@ + +Лекция: Введение в математическое моделирование. Метод половинного деления + +1. Что такое математическое моделирование? + +Математическое моделирование – это процесс создания математического описания реального объекта, явления или процесса. Модель представляет собой набор формул, уравнений, неравенств, которые отражают самые важные свойства изучаемого объекта. + +Зачем это нужно программисту? Любая компьютерная программа, которая предсказывает погоду, рассчитывает траекторию в игре, управляет роботом или прогнозирует продажи, основана на некоторой математической модели. Программист должен уметь переводить задачу с обычного языка на язык математики, чтобы компьютер мог её решить. + +Пример. +Нужно узнать, через сколько секунд камень, брошенный с высоты 10 метров, упадёт на землю. Мы знаем физический закон: высота тела при свободном падении вычисляется по формуле + +h(t) = h_0 - \frac{g t^2}{2}, +\] + +где h_0 = 10 м – начальная высота, g \approx 9.8 м/с² – ускорение свободного падения, t – время. + +Момент падения – это когда высота равна нулю. Получаем уравнение: + +10 - \frac{9.8 t^2}{2} = 0. +\] + +Это и есть математическая модель нашей задачи. Решив её, найдём t \approx 1.43 секунды. + +2. Этапы математического моделирования + +Любая реальная задача проходит через несколько этапов, прежде чем мы получим ответ. Запишем их: + +1. Постановка задачи. + Что известно? Что нужно найти? Какие ограничения? +2. Формализация. + Запись задачи в виде математических соотношений (уравнений, систем, неравенств, функций). +3. Выбор метода решения. + Если возможно – аналитическое решение (по формулам). Если нет – численное (приближённое) решение. +4. Реализация. + Написание алгоритма, программы или вычисления вручную. +5. Тестирование и анализ. + Проверка на простых примерах, оценка точности, интерпретация результатов. + +Сегодня мы подробно разберём все этапы на примере решения одного уравнения. + +3. Зачем нужны численные методы? + +Многие уравнения легко решаются аналитически: линейные, квадратные, некоторые тригонометрические. Но как только уравнение становится сложнее, формул для его решения может не существовать. Например: + +x^5 - x - 1 = 0, + +e^x = 3x, + +\cos x = x. + +Такие уравнения невозможно решить точно, выразив x через элементарные функции. Поэтому применяют численные методы – алгоритмы, которые находят корень приближённо с любой заданной точностью. + +Что значит «приближённо»? +Мы задаём точность ε (эпсилон) – максимально допустимую ошибку. Например, ε = 0.01 означает, что найденный корень отличается от истинного не более чем на 0.01. Для большинства практических задач этого достаточно. + +4. Отделение корня + +Прежде чем применять численный метод, нужно найти отрезок, на котором находится корень, и притом только один. Этот процесс называется отделением корня. + +Признак существования корня на отрезке [a, b]: +Если функция f(x) непрерывна на [a, b] и принимает на его концах значения разных знаков ( f(a) \cdot f(b) < 0 ), то внутри отрезка есть хотя бы один корень уравнения f(x)=0 . Если функция при этом строго монотонна (возрастает или убывает), то корень единственный. + +Как найти такой отрезок? +Обычно строят график функции или подбирают значения наугад, проверяя знаки. + +Пример. +Дано уравнение f(x) = x^2 - 2 = 0 . +Вычислим: f(1) = 1 - 2 = -1 < 0 , f(2) = 4 - 2 = 2 > 0 . +Знаки разные, значит на отрезке [1, 2] есть корень. Из графика параболы видно, что он единственный. + +Теперь мы готовы искать корень численно. + +5. Метод половинного деления (бисекции) + +Это один из самых простых и надёжных методов. Его идея напоминает игру «угадай число»: мы каждый раз делим отрезок пополам и оставляем ту половину, где находится корень. + +5.1. Алгоритм метода + +Пусть дано уравнение f(x) = 0 и отрезок [a, b], на котором f(a) \cdot f(b) < 0 . Задана точность ε. + +1. Проверяем условие остановки. Если длина отрезка |b - a| \le ε , то корень найден с нужной точностью: x \approx \frac{a+b}{2} . Останавливаемся. +2. Вычисляем середину отрезка: c = \frac{a+b}{2} . +3. Вычисляем значение функции в середине: f(c) . +4. Определяем, в какой половине корень. + · Если f(a) \cdot f(c) < 0 , то корень лежит на левой половине [a, c]. Тогда правую границу сдвигаем: b = c . + · Если f(a) \cdot f(c) > 0 , то корень лежит на правой половине [c, b]. Тогда левую границу сдвигаем: a = c . + · Если f(c) = 0 , то c – точный корень, останавливаемся. +5. Возвращаемся к шагу 1. + +Процесс повторяется, пока отрезок не станет достаточно маленьким. + +5.2. Блок-схема алгоритма + +``` +Начало +│ +├─ Ввод a, b, ε +│ +├─ Пока |b - a| > ε: +│ │ +│ ├─ c = (a + b) / 2 +│ │ +│ ├─ Если f(c) = 0, то вывод c, конец +│ │ +│ ├─ Если f(a) * f(c) < 0, то b = c +│ │ +│ └─ Иначе a = c +│ +├─ Корень = (a + b) / 2 +│ +└─ Вывод корня +Конец +``` + +5.3. Пример ручного расчёта + +Решим уравнение x^2 - 2 = 0 на отрезке [1, 2] с точностью ε = 0.1. + +Шаг 0. Проверяем: f(1) = -1 , f(2) = 2 . Знаки разные – корень есть. Длина отрезка 2-1 = 1 > 0.1 . + +Итерация 1. + c = (1+2)/2 = 1.5 + f(1.5) = 1.5^2 - 2 = 2.25 - 2 = 0.25 > 0 +Так как f(1) = -1 < 0 и f(1.5) > 0 , корень на [1, 1.5]. +Новый отрезок: [1, 1.5], длина 0.5. + +Итерация 2. + c = (1+1.5)/2 = 1.25 + f(1.25) = 1.5625 - 2 = -0.4375 < 0 + f(1.25) < 0 , f(1.5) > 0 , значит корень на [1.25, 1.5]. +Новый отрезок: [1.25, 1.5], длина 0.25. + +Итерация 3. + c = (1.25+1.5)/2 = 1.375 + f(1.375) = 1.890625 - 2 = -0.109375 < 0 +Корень на [1.375, 1.5]. +Новый отрезок: [1.375, 1.5], длина 0.125. + +Итерация 4. + c = (1.375+1.5)/2 = 1.4375 + f(1.4375) = 2.06640625 - 2 = 0.06640625 > 0 +Корень на [1.375, 1.4375]. +Новый отрезок: [1.375, 1.4375], длина 0.0625. + +Длина отрезка стала 0.0625 ≤ 0.1, поэтому останавливаемся. + +Приближённый корень: + +x \approx \frac{1.375 + 1.4375}{2} = 1.40625. + +Проверим: \sqrt{2} \approx 1.41421... . Ошибка составляет около 0.008, что меньше заданной точности 0.1. Отлично. + +5.4. Оценка числа итераций + +Длина исходного отрезка равна b-a . После каждой итерации длина уменьшается вдвое. После n итераций длина станет \frac{b-a}{2^n} . Чтобы достичь точности ε, нужно, чтобы + +\frac{b-a}{2^n} \le ε. +\] + +Отсюда получаем формулу для минимального числа итераций: + +n \ge \log_2 \left( \frac{b-a}{ε} \right). + +Пример. Для нашего случая b-a = 1 , ε = 0.1: + \log_2(10) \approx 3.32 , значит нужно минимум 4 итерации. Мы сделали 4 итерации (потому что на 4-й длина стала 0.0625, что уже меньше 0.1). Всё сходится. + +6. Практическое задание + +Решите методом половинного деления уравнение + +f(x) = x^3 - x - 1 = 0 +\] + +на отрезке [1, 2] с точностью ε = 0.1. + +Указания. + +1. Проверьте, что на концах отрезка функция имеет разные знаки. +2. Заполните таблицу итераций по образцу: + +№ итерации a b c = (a+b)/2 f(a) f(c) Знак f(a)*f(c) Новый отрезок [a,b] Длина отрезка +0 1 2 – -1 – [1, 2] 1 +1 +… + +3. Остановитесь, когда длина отрезка станет ≤ 0.1. +4. Запишите приближённый корень x \approx \frac{a+b}{2} . + +7. Домашнее задание + +1. Выучить: этапы математического моделирования, определение метода половинного деления, формулу оценки числа итераций. +2. Решить письменно: + Найти корень уравнения f(x) = \cos x - x = 0 на отрезке [0, 1] с точностью ε = 0.05. Заполнить таблицу итераций (аналогично классной работе). +3. Творческое + Придумайте пример реальной задачи, которая сводится к решению уравнения. Укажите, какое уравнение получится и какой отрезок можно взять для отделения корня.