Метод Зейделя
Ме́тод Га́усса — Зе́йделя (метод Зейделя, процесс Либмана, метод последовательных замещений) — является классическим итерационным методом решения системы линейных уравнений.
Назван в честь Зейделя и Гаусса.
Постановка задачи
Возьмём систему: , где
Или
И покажем, как её можно решить с использованием метода Гаусса-Зейделя.
Метод
Чтобы пояснить суть метода, перепишем задачу в виде
Здесь в -м уравнении мы перенесли в правую часть все члены, содержащие
, для
. Эта запись может быть представлена как
где в принятых обозначениях означает матрицу, у которой на главной диагонали стоят соответствующие элементы матрицы
, а все остальные нули; тогда как матрицы
и
содержат верхнюю и нижнюю треугольные части
, на главной диагонали которых нули.
Итерационный процесс в методе Гаусса — Зейделя строится по формуле
после выбора соответствующего начального приближения .
Метод Гаусса — Зейделя можно рассматривать как модификацию метода Якоби. Основная идея модификации состоит в том, что новые значения используются здесь сразу же по мере получения, в то время как в методе Якоби они не используются до следующей итерации:
где
Таким образом, i-я компонента -го приближения вычисляется по формуле
Например, при :
, то есть
, то есть
, то есть
Условие сходимости
Приведём достаточное условие сходимости метода.
| Теорема. Пусть
|
Условие окончания
Условие окончания итерационного процесса Зейделя при достижении точности в упрощённой форме имеет вид:
Более точное условие окончания итерационного процесса имеет вид
и требует больше вычислений. Хорошо подходит для разреженных матриц.
Пример реализации на C++
#include <iostream> #include <cmath> using namespace std; // Условие окончания bool converge(double xk[10], double xkp[10], int n, double eps) { double norm = 0; for (int i = 0; i < n; i++) norm += (xk[i] - xkp[i]) * (xk[i] - xkp[i]); return (sqrt(norm) < eps); } double okr(double x, double eps) { int i = 0; double neweps = eps; while (neweps < 1) { i++; neweps *= 10; } int okr = pow(double(10), i); x = int(x * okr + 0.5) / double(okr); return x; } bool diagonal(double a[10][10], int n) { int i, j, k = 1; double sum; for (i = 0; i < n; i++) { sum = 0; for (j = 0; j < n; j++) sum += abs(a[i][j]); sum -= abs(a[i][i]); if (sum > a[i][i]) { k = 0; cout << a[i][i] << " < " << sum << endl; } else { cout << a[i][i] << " > " << sum << endl; } } return (k == 1); } int main() { setlocale(LC_ALL, ""); double eps, a[10][10], b[10], x[10], p[10]; int n, i, j, m = 0; int method; cout << "Введите размер квадратной матрицы: "; cin >> n; cout << "Введите точность вычислений: "; cin >> eps; cout << "Заполните матрицу А: " << endl << endl; for (i = 0; i < n; i++) for (j = 0; j < n; j++) { cout << "A[" << i << "][" << j << "] = "; cin >> a[i][j]; } cout << endl << endl; cout << "Ваша матрица А: " << endl << endl; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) cout << a[i][j] << " "; cout << endl; } cout << endl; cout << "Заполните столбец свободных членов: " << endl << endl; for (i = 0; i < n; i++) { cout << "В[" << i + 1 << "] = "; cin >> b[i]; } cout << endl << endl; /* Ход метода, где: a[n][n] - Матрица коэффициентов x[n], p[n] - Текущее и предыдущее решения b[n] - Столбец правых частей Все перечисленные массивы вещественные и должны быть определены в основной программе, также в массив x[n] следует поместить начальное приближение столбца решений (например, все нули) */ for (int i = 0; i < n; i++) x[i] = 1; cout << "Диагональное преобладание: " << endl; if (diagonal(a, n)) { do { for (int i = 0; i < n; i++) p[i] = x[i]; for (int i = 0; i < n; i++) { double var = 0; for (int j = 0; j < n; j++) if(j!=i) var += (a[i][j] * x[j]); x[i] = (b[i] - var) / a[i][i]; } m++; } while (!converge(x, p, n, eps)); cout << "Решение системы:" << endl << endl; for (i = 0; i < n; i++) cout << "x" << i << " = " << okr(x[i], eps) << "" << endl; cout << "Итераций: " << m << endl; } else { cout << "Не выполняется преобладание диагоналей" << endl; } system("pause"); return 0; } Пример реализации на Python
import numpy as np def seidel(A, b, eps): n = len(A) x = np.zeros(n) # zero vector converge = False while not converge: x_new = np.copy(x) for i in range(n): s1 = sum(A[i][j] * x_new[j] for j in range(i)) s2 = sum(A[i][j] * x[j] for j in range(i + 1, n)) x_new[i] = (b[i] - s1 - s2) / A[i][i] converge = np.linalg.norm(x_new - x) <= eps x = x_new См. также
- Геометрическая прогрессия
- Метод простой итерации
- Метод Якоби
- Теорема Банаха
- Метод итерации
Примечания
Ссылки
- https://www.maa.org/press/periodicals/loci/joma/iterative-methods-for-solving-iaxi-ibi-gauss-seidel-method
- https://www3.nd.edu/~zxu2/acms40390F12/Lec-7.3.pdf
- http://mathworld.wolfram.com/Gauss-SeidelMethod.html
В статье есть список источников, но не хватает сносок. |
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Метод Зейделя, Что такое Метод Зейделя? Что означает Метод Зейделя?
Ne sleduet putat s metodom pokoordinatnogo spuska Gaussa Zejdelya metodom poiska ekstremuma Termin Metod Gaussa imeet takzhe drugie znacheniya Me tod Ga ussa Ze jdelya metod Zejdelya process Libmana metod posledovatelnyh zameshenij yavlyaetsya klassicheskim iteracionnym metodom resheniya sistemy linejnyh uravnenij Nazvan v chest Zejdelya i Gaussa Postanovka zadachiVozmyom sistemu Ax b displaystyle A vec x vec b gde A a11 a1n an1 ann b b1 bn displaystyle A left begin array ccc a 11 amp ldots amp a 1n vdots amp ddots amp vdots a n1 amp ldots amp a nn end array right quad vec b left begin array c b 1 vdots b n end array right Ili a11x1 a1nxn b1an1x1 annxn bn displaystyle left begin array rcl a 11 x 1 ldots a 1n x n amp amp b 1 amp amp a n1 x 1 ldots a nn x n amp amp b n end array right I pokazhem kak eyo mozhno reshit s ispolzovaniem metoda Gaussa Zejdelya MetodChtoby poyasnit sut metoda perepishem zadachu v vide a11x1 a12x2 a13x3 a1nxn b1a21x1 a22x2 a23x3 a2nxn b2 a n 1 1x1 a n 1 2x2 a n 1 n 1 xn 1 a n 1 nxn bn 1an1x1 an2x2 an n 1 xn 1 annxn bn displaystyle left begin array lcr a 11 x 1 amp amp a 12 x 2 a 13 x 3 ldots a 1n x n b 1 a 21 x 1 a 22 x 2 amp amp a 23 x 3 ldots a 2n x n b 2 ldots amp amp a n 1 1 x 1 a n 1 2 x 2 ldots a n 1 n 1 x n 1 amp amp a n 1 n x n b n 1 a n1 x 1 a n2 x 2 ldots a n n 1 x n 1 a nn x n amp amp b n end array right Zdes v j displaystyle j m uravnenii my perenesli v pravuyu chast vse chleny soderzhashie xi displaystyle x i dlya i gt j displaystyle i gt j Eta zapis mozhet byt predstavlena kak L D x Ux b displaystyle mathrm L mathrm D vec x mathrm U vec x vec b gde v prinyatyh oboznacheniyah D displaystyle mathrm D oznachaet matricu u kotoroj na glavnoj diagonali stoyat sootvetstvuyushie elementy matricy A displaystyle A a vse ostalnye nuli togda kak matricy U displaystyle mathrm U i L displaystyle mathrm L soderzhat verhnyuyu i nizhnyuyu treugolnye chasti A displaystyle A na glavnoj diagonali kotoryh nuli Iteracionnyj process v metode Gaussa Zejdelya stroitsya po formule L D x k 1 Ux k b k 0 1 2 displaystyle mathrm L mathrm D vec x k 1 mathrm U vec x k vec b quad k 0 1 2 ldots posle vybora sootvetstvuyushego nachalnogo priblizheniya x 0 displaystyle vec x 0 Metod Gaussa Zejdelya mozhno rassmatrivat kak modifikaciyu metoda Yakobi Osnovnaya ideya modifikacii sostoit v tom chto novye znacheniya x i displaystyle vec x i ispolzuyutsya zdes srazu zhe po mere polucheniya v to vremya kak v metode Yakobi oni ne ispolzuyutsya do sleduyushej iteracii x1 k 1 c12x2 k c13x3 k c1nxn k d1x2 k 1 c21x1 k 1 c23x3 k c2nxn k d2 xn k 1 cn1x1 k 1 cn2x2 k 1 cn n 1 xn 1 k 1 dn displaystyle left begin array ccccccccccc x 1 k 1 amp amp c 12 x 2 k amp amp c 13 x 3 k amp amp ldots amp amp c 1n x n k amp amp d 1 x 2 k 1 amp amp c 21 x 1 k 1 amp amp c 23 x 3 k amp amp ldots amp amp c 2n x n k amp amp d 2 ldots amp amp amp amp amp amp amp amp amp amp x n k 1 amp amp c n1 x 1 k 1 amp amp c n2 x 2 k 1 amp amp ldots amp amp c n n 1 x n 1 k 1 amp amp d n end array right gde cij aijaii j i 0 j i di biaii i 1 n displaystyle c ij begin cases frac a ij a ii amp j neq i 0 amp j i end cases quad d i frac b i a ii quad i 1 ldots n Takim obrazom i ya komponenta k 1 displaystyle k 1 go priblizheniya vychislyaetsya po formule xi k 1 j 1i 1cijxj k 1 j incijxj k di i 1 n displaystyle x i k 1 sum j 1 i 1 c ij x j k 1 sum j i n c ij x j k d i quad i 1 ldots n Naprimer pri n 3 displaystyle n 3 x1 k 1 j 11 1c1jxj k 1 j 13c1jxj k d1 displaystyle x 1 k 1 sum j 1 1 1 c 1j x j k 1 sum j 1 3 c 1j x j k d 1 to est x1 k 1 c11x1 k c12x2 k c13x3 k d1 displaystyle x 1 k 1 c 11 x 1 k c 12 x 2 k c 13 x 3 k d 1 x2 k 1 j 12 1c2jxj k 1 j 23c2jxj k d2 displaystyle x 2 k 1 sum j 1 2 1 c 2j x j k 1 sum j 2 3 c 2j x j k d 2 to est x2 k 1 c21x1 k 1 c22x2 k c23x3 k d2 displaystyle x 2 k 1 c 21 x 1 k 1 c 22 x 2 k c 23 x 3 k d 2 x3 k 1 j 13 1c3jxj k 1 j 33c3jxj k d3 displaystyle x 3 k 1 sum j 1 3 1 c 3j x j k 1 sum j 3 3 c 3j x j k d 3 to est x3 k 1 c31x1 k 1 c32x2 k 1 c33x3 k d3 displaystyle x 3 k 1 c 31 x 1 k 1 c 32 x 2 k 1 c 33 x 3 k d 3 Uslovie shodimostiPrivedyom dostatochnoe uslovie shodimosti metoda Teorema Pust A2 lt 1 displaystyle mathrm A 2 lt 1 gde A2 L D 1U L D 1 displaystyle mathrm A 2 mathrm L mathrm D 1 mathrm U quad mathrm L mathrm D 1 matrica obratnaya k L D displaystyle mathrm L mathrm D Togda pri lyubom vybore nachalnogo priblizheniya x 0 displaystyle vec x 0 metod Gaussa Zejdelya shoditsya skorost shodimosti metoda ravna skorosti shodimosti geometricheskoj progressii so znamenatelem q A2 displaystyle q mathrm A 2 verna ocenka pogreshnosti x k x qk x 0 x displaystyle vec x k vec x q k vec x 0 vec x Uslovie okonchaniyaUslovie okonchaniya iteracionnogo processa Zejdelya pri dostizhenii tochnosti e displaystyle varepsilon v uproshyonnoj forme imeet vid x k 1 x k e displaystyle parallel x k 1 x k parallel leq varepsilon Bolee tochnoe uslovie okonchaniya iteracionnogo processa imeet vid Ax k b e displaystyle parallel Ax k b parallel leq varepsilon i trebuet bolshe vychislenij Horosho podhodit dlya razrezhennyh matric Primer realizacii na C include lt iostream gt include lt cmath gt using namespace std Uslovie okonchaniya bool converge double xk 10 double xkp 10 int n double eps double norm 0 for int i 0 i lt n i norm xk i xkp i xk i xkp i return sqrt norm lt eps double okr double x double eps int i 0 double neweps eps while neweps lt 1 i neweps 10 int okr pow double 10 i x int x okr 0 5 double okr return x bool diagonal double a 10 10 int n int i j k 1 double sum for i 0 i lt n i sum 0 for j 0 j lt n j sum abs a i j sum abs a i i if sum gt a i i k 0 cout lt lt a i i lt lt lt lt lt sum lt lt endl else cout lt lt a i i lt lt gt lt lt sum lt lt endl return k 1 int main setlocale LC ALL double eps a 10 10 b 10 x 10 p 10 int n i j m 0 int method cout lt lt Vvedite razmer kvadratnoj matricy cin gt gt n cout lt lt Vvedite tochnost vychislenij cin gt gt eps cout lt lt Zapolnite matricu A lt lt endl lt lt endl for i 0 i lt n i for j 0 j lt n j cout lt lt A lt lt i lt lt lt lt j lt lt cin gt gt a i j cout lt lt endl lt lt endl cout lt lt Vasha matrica A lt lt endl lt lt endl for i 0 i lt n i for j 0 j lt n j cout lt lt a i j lt lt cout lt lt endl cout lt lt endl cout lt lt Zapolnite stolbec svobodnyh chlenov lt lt endl lt lt endl for i 0 i lt n i cout lt lt V lt lt i 1 lt lt cin gt gt b i cout lt lt endl lt lt endl Hod metoda gde a n n Matrica koefficientov x n p n Tekushee i predydushee resheniya b n Stolbec pravyh chastej Vse perechislennye massivy veshestvennye i dolzhny byt opredeleny v osnovnoj programme takzhe v massiv x n sleduet pomestit nachalnoe priblizhenie stolbca reshenij naprimer vse nuli for int i 0 i lt n i x i 1 cout lt lt Diagonalnoe preobladanie lt lt endl if diagonal a n do for int i 0 i lt n i p i x i for int i 0 i lt n i double var 0 for int j 0 j lt n j if j i var a i j x j x i b i var a i i m while converge x p n eps cout lt lt Reshenie sistemy lt lt endl lt lt endl for i 0 i lt n i cout lt lt x lt lt i lt lt lt lt okr x i eps lt lt lt lt endl cout lt lt Iteracij lt lt m lt lt endl else cout lt lt Ne vypolnyaetsya preobladanie diagonalej lt lt endl system pause return 0 Primer realizacii na Pythonimport numpy as np def seidel A b eps n len A x np zeros n zero vector converge False while not converge x new np copy x for i in range n s1 sum A i j x new j for j in range i s2 sum A i j x j for j in range i 1 n x new i b i s1 s2 A i i converge np linalg norm x new x lt eps x x newSm takzheGeometricheskaya progressiya Metod prostoj iteracii Metod Yakobi Teorema Banaha Metod iteraciiPrimechaniyaSsylkihttps www maa org press periodicals loci joma iterative methods for solving iaxi ibi gauss seidel method https www3 nd edu zxu2 acms40390F12 Lec 7 3 pdf http mathworld wolfram com Gauss SeidelMethod htmlV state est spisok istochnikov no ne hvataet snosok Bez snosok slozhno opredelit iz kakogo istochnika vzyato kazhdoe otdelnoe utverzhdenie Vy mozhete uluchshit statyu prostaviv snoski na istochniki podtverzhdayushie informaciyu Svedeniya bez snosok mogut byt udaleny 17 yanvarya 2024

