Практикум на Python
От воспроизведения готового опыта — к самостоятельному исследованию. Для чтения лекций Python не нужен: графики уже встроены в страницы. Для изменения параметров скачайте расчётный комплект.
Подготовка окружения
Установите Python 3.11 или новее. Распакуйте архив в отдельную папку, откройте в ней терминал и создайте виртуальное окружение. Оно отделит библиотеки курса от других проектов.
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux / macOS:
source .venv/bin/activate
python -m pip install -r requirements.txt
python experiments.py --lesson 1
Для другого урока замените номер от 1 до 10. Команда без параметров пересчитает весь комплект. Результаты сохраняются рядом со скриптом в папке figures в форматах SVG и PNG. SVG удобно вставлять на сайт: он остаётся чётким при увеличении.
Как устроены примеры
В experiments.py находятся единый набор параметров, функция двигателя, расчёт по интервалам и десять функций lesson_01…lesson_10. common.py содержит общие операции, чтобы формулы не расходились между уроками. Каждый эксперимент создаёт два рисунка; некоторые рисунки содержат несколько согласованных панелей.
Файл verify.py выполняет независимые проверки: сравнение RL-цепи с точным решением, проверку равновесия двигателя, интегрального баланса энергии и установившейся ошибки PI-регулятора. Запускайте его после изменения общих формул. Если вы намеренно изменили физическую модель, пересмотрите и эталонные условия проверки.
python experiments.py
python verify.py
Маршрут практических работ
| Работа | Что изменить | Что проверить |
|---|---|---|
| 1. Постоянная времени | τ от 0,1 до 0,5 с | Время попадания в полосу 2% |
| 2. Производная | Начальную скорость | Знак начального ускорения |
| 3. RL-цепь | L и R по отдельности | Предел тока и длительность перехода |
| 4. Вращение | Момент инерции | Длительность разгона при том же равновесии |
| 5. Преобразование | Скорость и ток | Равенство ei и Meω |
| 6. Двигатель | J и напряжение | Совпадение с аналитическим равновесием |
| 7. Численный метод | Шаг Эйлера | Сходимость и границу устойчивости |
| 8. Нагрузка | Величину скачка | Провал скорости и рост тока |
| 9. Торможение | Режим напряжения | Знаки момента, скорости и мощности |
| 10. Регулятор | Kp, Ki и задание | Ошибку, насыщение и максимальный ток |
Шаблон исследовательской записи
Для каждого опыта сохраните цель, уравнения, таблицу параметров, начальные условия, воздействия, настройки решателя и графики. После графиков напишите вывод: что изменилось, почему и какими числами это подтверждается. Не ограничивайтесь фразой «кривая стала быстрее» — укажите показатель и единицу.
Пример хорошего вывода: «При удвоении инерции конечная скорость сохранилась, а время достижения 90% увеличилось. Причина — меньшая производная скорости при том же результирующем моменте». Числа нужно получить из вашего расчёта, а не переносить из другого набора параметров.
Итоговый мини-проект
Создайте модель привода, который поддерживает 60 рад/с и получает скачок нагрузки 0,1 Н·м. Сравните постоянное напряжение, P-управление и PI-управление. Для каждого случая приведите ток, скорость и напряжение на одинаковом интервале. Проверьте, укладывается ли нужное равновесное напряжение в ±12 В.
Добавьте исследование чувствительности: увеличьте сопротивление на 20%, затем отдельно увеличьте инерцию на 50%. Объясните, какие изменения влияют на рабочую точку, какие — на переход, а какие затрагивают оба аспекта. Не изменяйте несколько факторов одновременно до завершения отдельных опытов.
Если что-то не работает
Не найден модуль. Проверьте, что библиотеки установлены тем же Python, которым запускается скрипт. Используйте python -m pip, а не отдельную команду pip из неизвестного окружения.
График выглядит как прямая. Проверьте масштаб времени. Процесс длительностью 10 мс почти не виден на оси 100 с.
Решение расходится. Проверьте единицы, знаки сопротивления и трения. Для Эйлера уменьшите шаг. Для solve_ivp прочитайте sol.message и убедитесь, что sol.success истинно.
После изменения параметров текст и график расходятся. Текст уроков относится к исходному набору. Собственные эксперименты нужно подписывать новым набором параметров и не выдавать их за базовый опыт.