Введение Рассмотрев очень кратко базовую механику предыдущая статья , перейдем к практике, ведь даже той краткой теории, которую рассмотрели, достаточно.
Итак, задача:
Камень брошен вертикально без начальной скорости с высоты h = 100 м.Простая задача? Да элементарно, с аналитическим решением, которое легко может написать более-менее грамотный ученик.Пренебрегая сопротивлением воздуха, определите закон движения камня в зависимости от высоты камня над поверхностью Земли во времени.
Примем ускорение свободного падения равным 10 м/с.
2
Но эта простая задача послужит для нас весьма наглядным примером.
1. Формализация задачи С этого начинается любое моделирование.
Формализация означает получение математических выражений, описывающих происходящий процесс.
При этом формулируются допущения: перечень упрощений модели за счет факторов, влиянием которых можно пренебречь.
Для этой задачи применимо предположение, что камень можно считать материальной точкой.
К этой точке приложена только одна сила – гравитация, поэтому воспользуемся предположением об отсутствии сопротивления воздуха.
Следующим предположением будет предположение, что Земля плоская, поскольку высота, с которой мы бросаем камень, ничтожна по сравнению с размерами планеты, а значит, кривизной ее поверхности можно пренебречь.
Тогда силу тяжести можно считать постоянной, направленной перпендикулярно поверхности Земли и равной по величине.
где g — ускорение силы тяжести на поверхности Земли.
Теперь пришло время записать уравнения движения камня.
Запомните эти уравнения
Левая их часть нас пока не интересует, а правая содержит суммы проекций сил, приложенных к точке на оси координат. Пусть оси x и y расположены на поверхности, а ось z направлена вверх перпендикулярно ей.
Сила одна, ее проекции на оси x и y равны нулю, а на ось z проекция отрицательна, так как сила направлена против направления оси, т.е.
Масса камня явно не равна нулю, а значит, на нее можно смело делить обе части полученных уравнений.
Не буду вас утомлять доказыванием, что движение камня будет происходить строго вертикально, хотя с формальной точки зрения это необходимо сделать.
Ноль в правой части первых двух уравнений вовсе не означает невозможности движения по этим осям – вспомните первый закон Ньютона.
Подробнее я остановлюсь на этом в следующей статье, а пока справедливо предположим одномерность движения, выписав итоговое дифференциальное уравнение
Мы получили не что иное, как математическую модель процесса, происходящего в задаче.
Претенциозно, правда? Нет. Анализируя это уравнение, мы приходим к выводу, например, что масса камня не влияет на закон его движения, потому что в этом уравнении нет массы.
Видите ли, даже не решив уравнения, мы уже формально доказали справедливость опыта с пером и куском свинца в вакууме, который любят показывать в школе (а некоторые повторил это на Луне ).
Аналитическое решение получить легко, даже не буду заморачиваться, оно такое
Но как это решить численно? И вообще, что такое «численно»?
2. Численное интегрирование дифференциального уравнения первого порядка.
Какой первый заказ? В прошлый раз я сказал, что уравнения движения имеют второй порядок.
Все правильно, но большинство методов решения диффузий на компьютере позволяют решать только уравнения первого порядка.
Существуют методы прямого интегрирования уравнений второго порядка (например, метод Верле), но о них мы сейчас говорить не будем.
Во-первых, это уравнение относится к типу, допускающему приведение порядка.
Правая часть не зависит от неизвестной функции (нет z), поэтому помним, что
проекция ускорения на ось z равна первой производной проекции скорости на ту же ось z. Ну круто тогда
Вот вам уравнение первого порядка.
Это число не всегда работает (о форме Коши я сейчас говорить не буду!), но в данном случае все в порядке.
Мы будем искать не координату, а скорость точки.
Что дальше? Так
Ведь производная, как мы знаем, — это отношение бесконечно малого приращения функции (скорости) к бесконечно малому приращению аргумента (времени), вызвавшего ее.
Возьмем очень короткий период времени
настолько мал, что можно считать
Что происходит? Вот что
Мы получили прирост скорости.
Отрицательное приращение.
Как же так, что камень, падающий вниз, ускорится! Да, это будет. Его скорость, его вектор скорости будет направлен вниз.
Это означает, что проекция этого вектора на ось z будет отрицательной.
Правильно, мы получаем проекцию вектора, направленную вниз, увеличивающуюся по абсолютной величине.
Мы знаем, что начальное значение скорости равно нулю, а это значит
Воспользовавшись тем, что мы можем вычислить приращение скорости, давайте посчитаем, какой будет скорость, скажем, через 0,1 секунды.
и еще через 0,1 секунды
и еще через 0,1 секунды
Хм, так можно продолжать довольно долго, но ограничимся отрезком времени в одну секунду.
Время, с | Скорость, м/с |
0.0 | 0.0 |
0.1 | -1.0 |
0.2 | -2.0 |
0.3 | -3.0 |
0.4 | -4.0 |
0.5 | -5.0 |
0.6 | -6.0 |
0.7 | -7.0 |
0.8 | -8.0 |
0.9 | -9.0 |
1.0 | -10.0 |
мы получили зависимость скорости точки от времени.
Все, что вам нужно сделать, это взять значение скорости в текущий момент времени и прибавить к нему приращение, которое скорость получит в новый момент времени, отделенный от текущего на
секунды.
Здесь вызывается приращение времени.
шаг интеграции .
А приращение мы вычисляем как значение производной искомой функции в текущий момент времени, умноженное на шаг.
Только? Да, просто конечно.
И формула, которую я написал, имеет имя – явный метод ЭИлера для численного решения дифференциальных уравнений .
Это так называемая рекуррентная формула, когда новое значение вычисляемой величины зависит от ее предыдущего значения.
А как насчет высоты точки над Землей? Да, все то же самое, посмотри
ведь проекция скорости является производной соответствующей координаты.
Применим к этому уравнению формулу метода Эйлера, ведь скорость нам уже известна
и с помощью этой формулы мы добавим в нашу таблицу еще один столбец
и так далее
Время, с | Скорость, м/с | Высота, м |
0.0 | 0.0 | 100.0 |
0.1 | -1.0 | 100.0 |
0.2 | -2.0 | 99.9 |
0.3 | -3.0 | 99.7 |
0.4 | -4.0 | 99.4 |
0.5 | -5.0 | 99.0 |
0.6 | -6.0 | 98.5 |
0.7 | -7.0 | 97.9 |
0.8 | -8.0 | 97.2 |
0.9 | -9.0 | 96.4 |
1.0 | -10.0 | 95.5 |
Теперь наша производная сама зависит от времени.
Но уже на первом шаге мы замечаем неладное – скорость уже есть, а высота все равно 100 метров.
Как же так? Это произошло потому, что на каждом шаге мы считаем производную (скорость) постоянной.
Метод не предоставляет информацию о том, что происходит с решением между шагами.
Соответственно, ошибка накапливается; сравним полученное решение с точным
Время, с | Скорость, м/с | Высота, м | Точное решение, м |
0.0 | 0.0 | 100.0 | 100.00 |
0.1 | -1.0 | 100.0 | 99.95 |
0.2 | -2.0 | 99.9 | 99.80 |
0.3 | -3.0 | 99.7 | 99.55 |
0.4 | -4.0 | 99.4 | 99.20 |
0.5 | -5.0 | 99.0 | 98.75 |
0.6 | -6.0 | 98.5 | 98.20 |
0.7 | -7.0 | 97.9 | 97.55 |
0.8 | -8.0 | 97.2 | 96.80 |
0.9 | -9.0 | 96.4 | 95.95 |
1.0 | -10.0 | 95.5 | 95.00 |
Численное решение отстает от аналитического, и чем дальше мы считаем, тем выше ошибка расчета.
Ошибка накапливается по мере того, как на каждом шаге мы делаем все более грубое приближение.
Что делать? Во-первых, можно уменьшить шаг.
Скажем, 10 раз, скажем
секунды
Время, с | Скорость, м/с | Высота, м | Точное решение, м |
0.0 | 0.0 | 100.0 | 100.00 |
0.1 | -1.0 | 99.96 | 99.95 |
0.2 | -2.0 | 99.81 | 99.80 |
0.3 | -3.0 | 99.57 | 99.55 |
0.4 | -4.0 | 99.22 | 99.20 |
0.5 | -5.0 | 98.78 | 98.75 |
0.6 | -6.0 | 98.23 | 98.20 |
0.7 | -7.0 | 97.59 | 97.55 |
0.8 | -8.0 | 96.84 | 96.80 |
0.9 | -9.0 | 96.00 | 95.95 |
1.0 | -10.0 | 95.05 | 95.00 |
Можно предположить, что уменьшив шаг еще в 10 раз, мы получим еще более точное решение.
Я схитрил, отображая значения всего по 10 точкам с шагом 0,1, на самом деле для получения такой таблицы нужно 100 итераций, а не 10. С шагом 0,001 потребуется тысяча итераций, а результат будет так
Время, с | Скорость, м/с | Высота, м | Точное решение, м |
0.0 | 0.0 | 100.0 | 100.00 |
0.1 | -1.0 | 99.9505 | 99.95 |
0.2 | -2.0 | 99.8010 | 99.80 |
0.3 | -3.0 | 99.5515 | 99.55 |
0.4 | -4.0 | 99.2020 | 99.20 |
0.5 | -5.0 | 98.7525 | 98.75 |
0.6 | -6.0 | 98.2030 | 98.20 |
0.7 | -7.0 | 97.5535 | 97.55 |
0.8 | -8.0 | 96.8040 | 96.80 |
0.9 | -9.0 | 95.9545 | 95.95 |
1.0 | -10.0 | 95.0050 | 95.00 |
Вот почему появление численного моделирования совпало с появлением компьютеров.
Они именно то, что нужно для того, чтобы быстро выполнять множество монотонных операций над числами.
Метод Эйлера — простейший известный метод интегрирования дифференциальных уравнений.
Из нашего простого примера видно, что погрешность метода прямо пропорциональна шагу интегрирования, и это действительно так.
Такие методы называются методами точности 1-го порядка.
Точность вычислений даже на шаге 0,1 можно повысить, если применить, скажем, метод Рунге-Кутты 4-го порядка точности.
Но это другая история.
Заключение Подумайте об этом.
Мы рассмотрели очень простой пример.
Мы еще даже не пользовались компьютером, но уже понимаем принцип, по которому работают самые мощные суперкомпьютеры в мире, моделирующие ранние этапы жизни Вселенной.
Конечно, там все гораздо сложнее, но принцип тот же.
Представьте, какой мощный инструмент у вас в руках.
Это последняя статья, где мы не будем использовать компьютер.
Я обещал Октаву.
В следующий раз это будет он.
Теги: #моделирование #механика #дифференциальные уравнения #октава #программирование #математика
-
Top4Top Продает 56 Серверов И Оргтехники
19 Oct, 24 -
Место Обучения Кибернетическим Системам
19 Oct, 24 -
История Javascript
19 Oct, 24 -
Модульные Тесты В Abap
19 Oct, 24 -
Функция Ковра
19 Oct, 24