Метод минимальных поправок. 1. Задаем вектор х0 (начальное приближение), матрицу B = BT > 0.

1. Задаем вектор х0 (начальное приближение), матрицу B = BT > 0.

2. Положим xk = x0, k = 0 (номер итерации)

3. Вычисляем вектор rk = Axk – b (невязка начального приближения).

4. Вычисляем вектор ωk = rkBk-1.

5. Вычисляем скаляр τk+1 = (Aωk, ωk) / (B-1k, Aωk) (шаговый множитель).

6. Вычисляем вектор xk+1 = xk – τk+1 B-1k (очередное приближение).

7. Вычисляем вектор rk+1 = Axk+1 – b. (невязка k+1 приближения).

8. Положим k = k + 1.

9. Проверяем выполнение неравенства ||rk||2 =< 0.001; если «да», то останавливаем работу алгоритма и выводим результаты, иначе возвращаемся к шагу 3.

Рис.2 Блок-схема метода минимальных поправок

 

Метод скорейшего спуска

1. Задаем вектор х(0) (начальное приближение).

2. Положим xk = x0, k = 0 (номер итерации)

3. Вычисляем вектор rk = Axk – b (невязка начального приближения).

4. Вычисляем скаляр τk+1 = (rk, rk) / (Ark, Ark) (шаговый множитель).

5. Вычисляем вектор xk+1 = xk – τk+1rk (очередное приближение).

6. Вычисляем вектор rk+1 = Axk+1 – b . (невязка k+1 приближения).

7. Положим k = k + 1.

8. Проверяем выполнение неравенства ||rk||2 =< 0.001; если «да», то останавливаем работу алгоритма и выводим результаты, иначе возвращаемся к шагу 3.

Рис.3 Блок-схема метода скорейшего спуска

Метод сопряженных градиентов

1. Задаем вектор х(0) (начальное приближение).

2. Положим xk = x0, k = 0 (номер итерации)

3. Вычисляем вектор rk = Axk – b (невязка начального приближения).

4. Положим вектор pk= rk (сопряженный вектор)

5. Вычисляем скаляр αk = (rk, rk) / (Apk, pk).

6. Вычисляем вектор xk+1 = xk + αk pk (очередное приближение)

7. Вычисляем вектор rk+1 = rk - αk Apk. (невязка k+1 приближения)

8. Вычисляем скаляр βk = (rk+1, rk+1) / (rk, rk).

9. Проверяем выполнение неравенства ||rk+1||2 =< 0.001; если «да», то останавливаем работу алгоритма и выводим результаты

10. . Вычисляем pk+1= rk+1+ βkpk

11. Положим k = k + 1.

12. Возвращаемся к шагу 5

Рис.4 Блок-схема метода сопряжённых градиентов


Руководство пользователя.

В окне программы пользователю предлагается ввести размерность матрицы системы и требуемую точность, также при желании можно задать величину диагонального преобладания, либо убрать преобладание вообще (см. рис.5)

Рис.5 Окно программы

При нажатии на кнопку ОК генерируется симметричная матрица заданной размерности, а также правая часть. Далее, при нажатии на кнопку с названием метода, в соответствующий столбец выводится решение и количество итераций (см. рис. 6).

Рис.6 Решение системы с матрицей размерностью 10х10

Матрицу можно модифицировать, прибавив к главной диагонали заданную величину, для этого нужно ввести необходимую величину в поле «Преобладание», поставить флаг «Модифицировать» и нажать ОК.

Также существует возможность записи сгенерированной матрицы в файл и чтения существующей матрицы из файла. Пользователь может выбрать для записи и чтения один из трёх файлов.



php"; ?>