Автор: Пользователь скрыл имя, 28 Декабря 2010 в 00:25, реферат
В отличие от метода Гаусса-Зейделя мы не можем заменять на в процессе итерационной процедуры, т.к. эти значения понадобятся для остальных вычислений. Это наиболее значимое различие между методом Якоби и методом Гаусса-Зейделя решения СЛАУ. Таким образом на каждой итерации придётся хранить оба вектора приближений: старый и новый.
Московский
Государственный Университет
Реферат
По дисциплине: Вычислительная математика
Тема:
«Программная реализация
метода Якоби»
Работу выполнил: Козеев И.В.
Специальность: ИТ-4
Группа: 0904
Работу
принял:
Москва 2010г.
Постановка задачи
Возьмём систему линейных уравнений:
, где
Или
Описание метода
Для того, чтобы построить итеративную процедуру метода Якоби, необходимо провести предварительное преобразование системы уравнений к итерационному виду . Оно может быть осуществлено по одному из следующих правил:
где в принятых
обозначениях D означает матрицу, у
которой на главной диагонали
стоят соответствующие элементы
матрицы A, а все остальные нули;
тогда как матрицы U и L содержат верхнюю
и нижнюю треугольные части A, на
главной диагонали которых
Тогда процедура нахождения решения имеет вид:
где k счётчик итерации.
В отличие от метода Гаусса-Зейделя мы не можем заменять на в процессе итерационной процедуры, т.к. эти значения понадобятся для остальных вычислений. Это наиболее значимое различие между методом Якоби и методом Гаусса-Зейделя решения СЛАУ. Таким образом на каждой итерации придётся хранить оба вектора приближений: старый и новый.
Условие сходимости
Приведем достаточное условие сходимости метода.
Теорема. Пусть . Тогда при любом выборе начального приближения :
|
Условие остановки
Условие окончания итерационного процесса при достижении точности в упрощённой форме имеет вид:
(Существует
более точное условие
Алгоритм реализации на C++
#include <math.h>
#define eps 0.001 //желаемая точность
..........................
void Jacobi (int N, double **A, double *F, double *X)
// N - размерность матрицы; A[N][N] - матрица коэффициентов, F[N] - столбец свободных членов,
// X[N] - начальное
приближение, ответ
{
double * TempX = new double[N];
double norm; // норма, определяемая как наибольшая разность компонент столбца иксов соседних итераций.
do {
for (int i = 0; i < N; i++) {
TempX[i] =- F[i];
for (int g = 0; g < N; g++) {
if (i != g)
}
TempX[i] /= -A[i][i];
}
norm = fabs(X[0] - TempX[0]);
for (int h = 0; h < N; h++) {
if (fabs(X[h] - TempX[h]) > norm)
norm = fabs(X[h] - TempX[h]);
X[h] = TempX[h];
}
} while (norm > eps);
delete[] TempX;
}