Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсач.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.34 Mб
Скачать

3. Алгоритмы и блок-схемы решения

3.1. Метод минимальных невязок

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

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

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

  4. Вычисляем скаляр τk+1 = (rk, Ark) / ||Ark||2.

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

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

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

  8. Положим k = k + 1 и вернемся к шагу 4.

Рис. 1 Блок-схема метода минимальных невязок

3.2. Метод минимальных поправок

  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 Блок-схема метода минимальных поправок

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

    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 Блок-схема метода скорейшего спуска

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

  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 Блок-схема метода сопряжённых градиентов

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

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

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

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

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

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

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