
- •Содержание
- •1. Введение. Постановка задачи.
- •Метод минимальных невязок
- •2. Описание методов решения задачи
- •2.1 Метод минимальных невязок
- •2.2. Метод минимальных поправок
- •2.3. Метод скорейшего спуска
- •2.4. Метод сопряженных градиентов
- •3. Алгоритмы и блок-схемы решения
- •3.1. Метод минимальных невязок
- •3.2. Метод минимальных поправок
- •3.3. Метод скорейшего спуска
- •3.4. Метод сопряженных градиентов
- •4.Руководство пользователя.
- •5. Тестирование и оптимизация.
- •6. Выводы
- •Список использованных источников
- •Приложение 1. Контрольные примеры.
- •Приложение 2. Код программы.
3. Алгоритмы и блок-схемы решения
3.1. Метод минимальных невязок
Задаем вектор х0 (начальное приближение).
Положим xk = x0, k = 0 (номер итерации)
Вычисляем вектор rk = Axk – b (невязка начального приближения).
Вычисляем скаляр τk+1 = (rk, Ark) / ||Ark||2.
Вычисляем вектор xk+1 = xk + τk+1rk (очередное приближение).
Вычисляем вектор rk+1 = rk – τk+1Ark. (невязка k+1 приближения).
Проверяем выполнение неравенства ||r(k+1)||2 =< 0.001; если «да», то останавливаем работу алгоритма и выводим результаты.
Положим k = k + 1 и вернемся к шагу 4.
Рис. 1 Блок-схема метода минимальных невязок
3.2. Метод минимальных поправок
Задаем вектор х0 (начальное приближение), матрицу B = BT > 0.
Положим xk = x0, k = 0 (номер итерации)
Вычисляем вектор rk = Axk – b (невязка начального приближения).
Вычисляем вектор ωk = rkBk-1.
Вычисляем скаляр τk+1 = (Aωk, ωk) / (B-1Aωk, Aωk) (шаговый множитель).
Вычисляем вектор xk+1 = xk – τk+1 B-1Aωk (очередное приближение).
Вычисляем вектор rk+1 = Axk+1 – b. (невязка k+1 приближения).
Положим k = k + 1.
Проверяем выполнение неравенства ||rk||2 =< 0.001; если «да», то останавливаем работу алгоритма и выводим результаты, иначе возвращаемся к шагу 3.
Рис.2 Блок-схема метода минимальных поправок
3.3. Метод скорейшего спуска
Задаем вектор х(0) (начальное приближение).
Положим xk = x0, k = 0 (номер итерации)
Вычисляем вектор rk = Axk – b (невязка начального приближения).
Вычисляем скаляр τk+1 = (rk, rk) / (Ark, Ark) (шаговый множитель).
Вычисляем вектор xk+1 = xk – τk+1rk (очередное приближение).
Вычисляем вектор rk+1 = Axk+1 – b . (невязка k+1 приближения).
Положим k = k + 1.
Проверяем выполнение неравенства ||rk||2 =< 0.001; если «да», то останавливаем работу алгоритма и выводим результаты, иначе возвращаемся к шагу 3.
Рис.3 Блок-схема метода скорейшего спуска
3.4. Метод сопряженных градиентов
Задаем вектор х(0) (начальное приближение).
Положим xk = x0, k = 0 (номер итерации)
Вычисляем вектор rk = Axk – b (невязка начального приближения).
Положим вектор pk= rk (сопряженный вектор)
Вычисляем скаляр αk = (rk, rk) / (Apk, pk).
Вычисляем вектор xk+1 = xk + αk pk (очередное приближение)
Вычисляем вектор rk+1 = rk - αk Apk. (невязка k+1 приближения)
Вычисляем скаляр βk = (rk+1, rk+1) / (rk, rk).
Проверяем выполнение неравенства ||rk+1||2 =< 0.001; если «да», то останавливаем работу алгоритма и выводим результаты
. Вычисляем pk+1= rk+1+ βkpk
Положим k = k + 1.
Возвращаемся к шагу 5
Рис.4 Блок-схема метода сопряжённых градиентов
4.Руководство пользователя.
В окне программы пользователю предлагается ввести размерность матрицы системы и требуемую точность, также при желании можно задать величину диагонального преобладания, либо убрать преобладание вообще (см. рис.5)
Рис.5 Окно программы
При нажатии на кнопку ОК генерируется симметричная матрица заданной размерности, а также правая часть. Далее, при нажатии на кнопку с названием метода, в соответствующий столбец выводится решение и количество итераций (см. рис. 6).
Рис.6 Решение системы с матрицей размерностью 10х10
Матрицу можно модифицировать, прибавив к главной диагонали заданную величину, для этого нужно ввести необходимую величину в поле «Преобладание», поставить флаг «Модифицировать» и нажать ОК.
Также существует возможность записи сгенерированной матрицы в файл и чтения существующей матрицы из файла. Пользователь может выбрать для записи и чтения один из трёх файлов.