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

Лабораторна робота 14. Newton чи BFGS для нелінійного калібрування

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

Ви розв’яжете одну задачу нелінійного калібрування двома методами — Newton і BFGS. Потрібно порівняти траєкторії, кількість кроків, фінальні значення та пояснити, яку інформацію про кривизну використовує кожен метод.

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

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

1. Ситуація

Потрібно підібрати два параметри нелінійної моделі. Ви вже маєте два різні підходи: Newton використовує матрицю Гессе, а BFGS поступово будує наближення кривизни за інформацією першого порядку.

Головне питання роботи: Який метод у цій невеликій задачі доходить до якісного розв’язку швидше і скільки інформації для цього потрібно обчислювати?

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

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

  • крок Ньютона;
  • локальна квадратична модель;
  • BFGS;
  • градієнтний критерій зупинки;

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

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

Newton використовує реальну локальну кривизну через Гессіан. BFGS не просить Гессіан напряму, а поступово оцінює його вплив з історії градієнтів.

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

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

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

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

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

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

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

Порівнювати лише число ітерацій нечесно. Один крок Newton потребує Гессіан, BFGS — ні. Тому рахуйте окремо виклики функції, градієнта та Гессіана.

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

  1. Чому порівнювати Newton і BFGS лише за кількістю ітерацій несправедливо?
  2. Яку додаткову інформацію обчислює Newton на кожному кроці?

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

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

Крок 1. Реалізувати функцію, градієнт і Гессіан

Тримайте їх окремими функціями, щоб можна було рахувати виклики.

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

На кожній ітерації розв’язуйте \(Hp=-g\) через np.linalg.solve; не обчислюйте inv(H).

Крок 3. Вести журнал Newton

Записуйте \(f\), норму градієнта, довжину кроку та кількість обчислень.

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

Використайте scipy.optimize.minimize(method="BFGS") з тим самим стартом.

Крок 5. Порівняти якість

Порівняйте фінальні точки, функції та норми градієнта.

Крок 6. Порівняти вартість

Поясніть, чи виправдане обчислення Гессіана для такої задачі.

7. Python

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

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

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

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

Змінна Що записати
newton_x фінальна точка власного Newton
newton_iterations кількість його ітерацій
newton_grad_norm норма градієнта Newton
bfgs_x фінальна точка BFGS
bfgs_iterations кількість ітерацій BFGS
bfgs_grad_norm норма градієнта BFGS
evaluation_counts словник із лічильниками обчислень; має показувати, що Newton використовував Hessian

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

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

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

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

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

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

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

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

  1. Чому Newton і BFGS не варто порівнювати лише за кількістю ітерацій?
Показати відповідь Крок Newton потребує Гессіан, тоді як BFGS використовує переважно значення функції та градієнта. Вартість однієї ітерації різна.
  1. Чому в Newton краще розв’язувати систему, а не обчислювати обернену матрицю?
Показати відповідь `solve` зазвичай чисельно надійніший і дешевший, ніж явне обчислення оберненої матриці.