Files
mat_model/readme.md
T
2026-09-05 05:10:26 +00:00

12 KiB
Raw Blame History

Лекция: Введение в математическое моделирование. Метод половинного деления

  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 секунды.

  1. Этапы математического моделирования

Любая реальная задача проходит через несколько этапов, прежде чем мы получим ответ. Запишем их:

  1. Постановка задачи. Что известно? Что нужно найти? Какие ограничения?
  2. Формализация. Запись задачи в виде математических соотношений (уравнений, систем, неравенств, функций).
  3. Выбор метода решения. Если возможно – аналитическое решение (по формулам). Если нет – численное (приближённое) решение.
  4. Реализация. Написание алгоритма, программы или вычисления вручную.
  5. Тестирование и анализ. Проверка на простых примерах, оценка точности, интерпретация результатов.

Сегодня мы подробно разберём все этапы на примере решения одного уравнения.

  1. Зачем нужны численные методы?

Многие уравнения легко решаются аналитически: линейные, квадратные, некоторые тригонометрические. Но как только уравнение становится сложнее, формул для его решения может не существовать. Например:

x^5 - x - 1 = 0,

e^x = 3x,

\cos x = x.

Такие уравнения невозможно решить точно, выразив x через элементарные функции. Поэтому применяют численные методы – алгоритмы, которые находят корень приближённо с любой заданной точностью.

Что значит «приближённо»? Мы задаём точность ε (эпсилон) – максимально допустимую ошибку. Например, ε = 0.01 означает, что найденный корень отличается от истинного не более чем на 0.01. Для большинства практических задач этого достаточно.

  1. Отделение корня

Прежде чем применять численный метод, нужно найти отрезок, на котором находится корень, и притом только один. Этот процесс называется отделением корня.

Признак существования корня на отрезке [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] есть корень. Из графика параболы видно, что он единственный.

Теперь мы готовы искать корень численно.

  1. Метод половинного деления (бисекции)

Это один из самых простых и надёжных методов. Его идея напоминает игру «угадай число»: мы каждый раз делим отрезок пополам и оставляем ту половину, где находится корень.

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). Всё сходится.

  1. Практическое задание

Решите методом половинного деления уравнение

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

  1. Остановитесь, когда длина отрезка станет ≤ 0.1.

  2. Запишите приближённый корень x \approx \frac{a+b}{2} .

  3. Домашнее задание

  4. Выучить: этапы математического моделирования, определение метода половинного деления, формулу оценки числа итераций.

  5. Решить письменно: Найти корень уравнения f(x) = \cos x - x = 0 на отрезке [0, 1] с точностью ε = 0.05. Заполнить таблицу итераций (аналогично классной работе).

  6. Творческое Придумайте пример реальной задачи, которая сводится к решению уравнения. Укажите, какое уравнение получится и какой отрезок можно взять для отделения корня.