значення
. Обчислення градієнта
В
. Обчислення вектора напряму
В
. Обчислення величини зсуву по заданому напрямку
В
. Обчислення нового наближення
В
Збіжність методу
Якщо всі обчислення точні, і вихідні дані точні то метод сходиться до вирішення системи не більш ніж за ітерацій, де - розмірність системи. Більш тонкий аналіз показує, що число ітерацій не перевищує, де - число різних власних значень матриці. На практиці найчастіше використовують наступний критерій зупину:. p align="justify"> Критерій зупину
Критерій зупину одновимірного пошуку уздовж кожного з напрямів записується у вигляді:
.
Реалізація
Застосуємо метод сполучених градієнтів для вирішення системи
,
де. допомогою методу сполучених градієнтів рішення цієї системи
виходить за три ітераціі.double EPS = 1e-7;
// скалярний проізведеніеinner_prod (vector a, vector b) {ans = 0; (int i = 0; i
} ans;
}
// обчислення градієнта grad (vector > A, vector B, vector X) { ans (B.sz, 0); (int i = 0; i
}
} (int i = 0; i
} ans;
} conv (vector g) {inner_prod (g, g);
}
// наближення відповіді nextApp (vector prev, double len, vector dir) { ans = prev; (int i = 0; i
} ans;
}
обчислення напрямок руху direction (vector dir, vector prev, vector now) {a = inner_prod (prev, prev), b = inner_prod (now, now); (int i = 0; i
} dir;
}
// довжина кроку в заданому напрямку
double length (vector dir, vector grad, vector > A) {a = 0; B (dir.sz, 0); (int i = 0; i
} (int i = 0; i
}
} a/inner_prod (B, dir);
}
// метод пов'язаних градіентовConGrad (vector > A, vector B, vector & X) { gP = B, d (B.sz, 0) , gN = B, c; s; (conv (gN)> EPS) {= grad (A, B, X); (conv (gN)
gP = gN;
}
}
3. Порівняння методів
Розглянемо недоліки та переваги кожного з розглянутих методів.
Метод покоординатного спуску ...