Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы III семестра / Programmirovanie_Metodichka_po_labam.doc
Скачиваний:
37
Добавлен:
15.05.2015
Размер:
1.45 Mб
Скачать

Метод Зейделя

Метод Зейделя является модификацией метода простых итераций. Обычно этот метод дает лучшую сходимость, чем метод простых итераций. Процесс Зейделя может сходиться, даже если расходится метод простых итераций.

Метод Зейделя заключается в том, что при вычислении -го приближения неизвестногоиспользуются уже вычисленные ранее-е приближения неизвестных.

Решение системы линейных алгебраических уравнений методом Зейделя можно разбить на несколько шагов.

  1. Исходную систему уравнений вида (1.1) привести к эквивалентной системе, пригодной для итераций, вида (1.5).

  2. Для приведенной матрицы проверить сходимость итерационного процесса с использованием условия. Если какая-либо норма этой матрицы меньше 1, то итерационный процесс будет сходиться. Однако метод Зейделя может сходиться, даже если условие сходимости для метода простых итераций не выполняется.

  3. Записать последовательность итераций:

,

,

, (1.7)

...

,

...

.

В программе можно использовать только выражение для .

  1. Выбрать начальное приближение. В качестве начального приближения могут выбираться произвольные значения, но при вычислениях обычно принимается .

  2. Проводить вычисления по формулам (1.7). Итерационный процесс нужно реализовать с использованием операторов

do {последовательность действий} while (условие),

то есть проводить вычисления до тех пор, пока выполняется условие ().

Здесь – погрешность данной итерации, которая вычисляется по формуле .

Примечание: Необходимо использовать только один вид норм, как правило, это m-норма.

Задания

  1. Написать программу для решения систем линейных алгебраических уравнений произвольной размерности по методу Гаусса.

  2. Написать программу для решения систем линейных алгебраических уравнений с помощью метода Гаусса с выбором наибольшего элемента по столбцам.

  3. Написать программу для решения систем линейных алгебраических уравнений по методу простых итераций.

  4. Написать программу для решения систем линейных алгебраических уравнений с помощью метода Зейделя.

Описание программы, входных и выходных параметров

На рис. 1.1представлен пример окна программы, в которой реализованы итерационные методы решения систем линейных алгебраических уравнений.

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

Исходные данные

Исходными данными при решении систем линейных алгебраических уравнений прямыми (точными) методамиявляются:

  • размерность системы уравнений n;

  • матрица действительных коэффициентов А;

  • столбец свободных членов В.

Исходными данными при решении систем линейных алгебраических уравнений итерационными методами являются:

  • размерность системы уравнений n;

  • матрица действительных коэффициентов А;

  • столбец свободных членов В;

  • заданная точность .

Результатом является столбец неизвестных X.

Для ввода матриц и вывода результатов при выполнении задания с использованием C++ Builder наиболее удобно использовать визуальный элемент StringGrid (закладка Additional). Для обеспечения возможности ввода данных с клавиатуры в матрицы А и В необходимо в соответствующих объектах StringGrid установить опцию (Options) goEditing в true. При вводе данных необходимо осуществлять преобразование типа данных - из строкового (тип AnsiString), в котором отображаются вводимые данные в соответствующих визуальных компонентах (StringGrid или Edit), в тип, который будет использоваться при расчетах. Для этого следует использовать стандартные функции класса AnsiString: StrToFloat или ToDouble и StrToInt или ToInt. Для отображения результатов необходимо провести обратные преобразования: FloatToStr и IntToStr.

Вычисления проводить по приведенному выше алгоритму в функции, в которую передаются исходные данные для решения и которая возвращает указатель на массив неизвестных:

double* Gauss (int n, double **a, double *b){...}  пример заголовка функции для точных методов,

double* Zeidel (int n, double **a, double *b, double epsilon){...}  пример заголовка функции для итерационных методов.

Итерационный процесс необходимо реализовать с использованием операторов do {последовательность действий} while (условие),

то есть проводить вычисления до тех пор, пока выполняется условие ().