Для позначення припустимо, що (тобто функція, що оцінюється векторною, приймає вектор як вхідний і виводить вектор такого ж розміру). Є дві проблеми: обчислювальна вартість та числова точність.f:Rn→Rn
Для обчислення похідної (матриця Якобія, J ( x ) або ( ∇ f ( x ) ) T , або все, що вам більше зручніше) за допомогою кінцевих різниць знадобиться n функцій оцінки. Якби ви могли обчислити похідну, використовуючи арифметику з плаваючою комою безпосередньо з визначення, вам доведеться обчислити коефіцієнт різниціDf(x)J(x)(∇f(x))Tn
Df(x)ei=limε→0f(x+εei)−f(x)ε
для кожного , якщо припустити, що ви не робите жодного "розумного кінцевого розмежування" (наприклад, Кертіс-Пауелл-Рейд), оскільки ви знаєте (або можете виявити) закономірність зменшення D f . Якщо n великий, це може бути багато оцінок функції. Якщо у вас є аналітичний вираз для D f , то його обчислення може бути дешевшим. Автоматичні (також відомі як алгоритмічні) методи диференціації також можуть використовуватися в деяких випадках для обчислення D f приблизно в 3 - 5 разів більше вартості оцінки функції.i=1,…,nDfnDfDf
Є також чисельні проблеми. Очевидно, що на комп’ютері ми не можемо взяти ліміт скаляра, оскільки він іде до нуля, тому, коли ми наближаємо , ми дійсно вибираємо ε, щоб бути "малим" і обчислюємоDfε
Df(x)ei≈f(x+εei)−f(x)ε,
де означає, що це наближення, і ми сподіваємось, що це дійсно гарне наближення. Обчислити це наближення в арифметиці з плаваючою точкою важко, тому що якщо ви вибрали ε занадто велике, ваше наближення може бути поганим, але якщо ви виберете ε занадто малий, може виникнути значна помилка округлення. Ці ефекти висвітлюються у≈εε статті Вікіпедії про числову диференціацію в поверхневих деталях; Більш докладні посилання можна знайти в статті.
Якщо похибка в матриці Якобіана не надто велика, ітерації Ньютона-Рафсона будуть збігатися. Детальний теоретичний аналіз див. У главі 25 Точності та стійкості числових алгоритмів Ніка Хігхема , абоDf у статті Франсуази Тиссер, на якій він ґрунтується.
Бібліотеки, як правило, піклуються про ці алгоритмічні деталі для вас, і зазвичай, бібліотечні реалізації алгоритму Ньютона-Рафсона (або його варіантів) зблизяться досить непогано, але так часто виникає проблема, яка викликає певні проблеми через недоліки вище. У скалярному випадку я використовував би метод Брента , завдяки своїй стійкості та хорошій конвергенції на практиці.(n=1)