Перейти до змісту

Лабораторна робота 09. Пошук найкращого режиму насосної станції

Коротко про роботу

Ви чисельно знайдете найкращий режим насосної станції на заданому інтервалі. Потрібно реалізувати або відтворити кроки золотого пошуку, порівняти результат із bounded та Brent і пояснити роль tolerance.

Ця робота виконується після лекцій 13. Вона спирається лише на матеріал, який уже пройдено до цього заняття.

▶ Відкрити робочий зошит у браузері

1. Ситуація

Насосна станція має робочий параметр \(v\). Малий \(v\) збільшує час роботи, великий — енерговитрати, а сильне відхилення від рекомендованої зони теж небажане. Формула витрат відома, але мінімум потрібно шукати чисельно.

Головне питання роботи: Як знайти мінімум без похідної і як зрозуміти, що точність уже достатня?

2. Що вже потрібно знати

Перед початком достатньо розуміти такі речі з попередніх лекцій:

  • унімодальна функція на відрізку;
  • метод золотого перерізу;
  • minimize_scalar з bounded/Brent;
  • числовий допуск;

Якщо якийсь пункт забувся, поверніться до відповідної лекції. У цій роботі нова теорія не вводиться без пояснення.

3. Як перейти від ситуації до математики

Тут немає потреби в похідній. Алгоритм бачить лише значення функції в точках і поступово звужує інтервал, де залишається найкращий кандидат.

Спочатку сформулюйте зміст задачі словами. Лише після цього записуйте формули й код. Це зменшує ризик правильно порахувати не ту задачу.

4. Ваш варіант

У notebook змініть тільки один рядок:

STUDENT_X = 1  # поставте свій номер 1..30

Номер варіанта змінює числа, але не дає готового способу розв’язання. Основна частина роботи однакова для всіх: побудувати правильну модель, зробити потрібний вибір і перевірити результат.

Після запуску комірки «Дані вашого варіанта» notebook покаже всі числа, потрібні для роботи. Вручну підставляти STUDENT_X у формули не потрібно. Спочатку подивіться на отримані дані та підпишіть, що означає кожен масив або параметр.

5. Де тут треба подумати

Готовий minimize_scalar тут не замінює власний алгоритм. Спочатку реалізуйте золотий переріз, а бібліотечні методи використайте як незалежне порівняння.

Перед тим як писати код, дайте собі відповідь на два питання:

  1. Чому золотий переріз може працювати без похідної?
  2. Що саме означає критерій зупинки: точність координати чи точність значення функції?

Відповідь не треба робити довгою. Достатньо 1–2 речень на кожне питання. Це допомагає перевірити, що ви розумієте задачу до запуску обчислень.

6. Послідовність роботи

Крок 1. Перевірити функцію на інтервалі

Обчисліть значення у кількох точках і побудуйте простий графік.

Крок 2. Реалізувати золотий переріз

Напишіть цикл, який звужує інтервал. Зберігайте кількість викликів функції.

Крок 3. Запустити з двома допусками

Порівняйте грубий і точніший допуск. Поясніть, що змінилося в результаті та кількості обчислень.

Крок 4. Запустити bounded

Використайте minimize_scalar(..., method="bounded").

Крок 5. Порівняти з Brent

Метод Брента потребує початкової трійки точок \(a<b<c\), де середня точка вже краща за обидві крайні: \(E(b)<E(a)\) і \(E(b)<E(c)\). Не беріть автоматично середину всього інтервалу. Спочатку знайдіть приблизно добру точку, наприклад результатом bounded, побудуйте навколо неї таку трійку, перевірте дві нерівності, а тоді запускайте Brent. Після цього порівняйте знайдені \(v^*\) та \(E(v^*)\).

Крок 6. Перевірити сусідні точки

Порівняйте значення функції в \(v^*\pm\delta\), не виходячи за робочий інтервал.

7. Python

Використовуйте: NumPy, SciPy minimize_scalar, Matplotlib.

Не намагайтеся вмістити всю роботу в одну велику комірку. Зручніше мати окремі невеликі блоки: дані → модель → обчислення → перевірка → висновок. Назви змінних повинні показувати їхній зміст.

8. Локальна самоперевірка

У робочому notebook наперед створені назви змінних, які читає автоматична перевірка. Не перейменовуйте їх. Ви самі пишете спосіб розв’язання, але фінальний результат записуєте у визначені змінні.

Змінна Що записати
golden_x мінімізатор із власного золотого перерізу
golden_fun E(golden_x)
golden_calls кількість викликів E у власному методі
bounded_x результат scipy minimize_scalar(method="bounded")
brent_x результат Brent
neighbor_check True, якщо сусідні точки не кращі за знайдену

Після виконання всіх кроків запустіть комірку «Локальна самоперевірка». Для вашого STUDENT_X вона читає наперед обчислені контрольні значення та порівнює з ними всі результатні змінні з таблиці вище. Числові значення порівнюються з указаним допуском; логічні, текстові та дискретні результати — точно. Для множин індексів порядок елементів не має значення, а для напрямів власних векторів враховується еквівалентність v та -v.

  • ✅ OK означає, що всі результатні змінні збігаються з контрольними значеннями в межах заданих допусків.
  • означає, що біля конкретної змінної буде вказано, яке порівняння не пройдено.

Самоперевірка не замінює короткий предметний висновок: після OK поясніть своїми словами, що означає отриманий результат у ситуації цієї лабораторної.

9. Що має бути у звіті

Звіт не повинен бути переписаним notebook. Покажіть вихідні дані, ключові проміжні результати, перевірки та короткий висновок своїми словами. У звіті обов’язково мають бути:

  1. номер вашого варіанта;
  2. вихідні дані, які реально використовувалися;
  3. ключовий проміжний результат, на якому ґрунтується рішення;
  4. фінальний результат;
  5. незалежна числова перевірка;
  6. коротке пояснення, що цей результат означає в початковій прикладній ситуації.

Наприкінці дайте відповідь на головне питання лабораторної одним коротким абзацом.

10. Контрольні питання

  1. Що робить метод золотого перерізу на кожному кроці?
Показати відповідь Він порівнює значення функції у двох внутрішніх точках і відкидає частину інтервалу, де мінімум уже не може бути кращим.
  1. Чому менший допуск зазвичай потребує більше обчислень?
Показати відповідь Алгоритм повинен сильніше звузити інтервал, а для цього потрібно виконати більше ітерацій і викликів функції.