Практикум на Python

От воспроизведения готового опыта — к самостоятельному исследованию. Для чтения лекций 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 истинно.

После изменения параметров текст и график расходятся. Текст уроков относится к исходному набору. Собственные эксперименты нужно подписывать новым набором параметров и не выдавать их за базовый опыт.