Articulo de referencia

Método de Gauss-Seidel

En álgebra lineal numérica , el método de Gauss-Seidel , también conocido como método de Liebmann o método de desplazamiento sucesivo , es un método iterativo utilizado para res...

En álgebra lineal numérica , el método de Gauss-Seidel , también conocido como método de Liebmann o método de desplazamiento sucesivo , es un método iterativo utilizado para resolver un sistema de ecuaciones lineales . Recibe su nombre de los matemáticos alemanes Carl Friedrich Gauss y Philipp Ludwig von Seidel . Si bien puede aplicarse a cualquier matriz con elementos no nulos en las diagonales, la convergencia solo está garantizada si la matriz es estrictamente diagonalmente dominante [ 1 ] o simétrica y definida positiva . Gauss solo lo mencionó en una carta privada a su alumno Gerling en 1823 [ 2 ] . Seidel no publicó nada al respecto hasta 1874 [ 3 ] .

Descripción

DejarAincógnita=b{\textstyle \mathbf {A} \mathbf {x} =\mathbf {b} }Sea un sistema cuadrado de n ecuaciones lineales, donde:

A=[a11a12a1nortea21a22a2norteanorte1anorte2anortenorte],incógnita=[incógnita1incógnita2incógnitanorte],b=[b1b2bnorte].{\displaystyle \mathbf {A} ={\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1n}\\a_{21}&a_{22}&\cdots &a_{2n}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nn}\end{bmatrix}},\qquad \mathbf {x} ={\begin{bmatrix}x_{1}\\x_{2}\\\vdots \\x_{n}\end{bmatrix}},\qquad \mathbf {b} ={\begin{bmatrix}b_{1}\\b_{2}\\\vdots \\b_{n}\end{bmatrix}}.}

CuandoA{\displaystyle \mathbf {A} }yb{\displaystyle \mathbf {b} }son conocidos yincógnita{\displaystyle \mathbf {x} }Si se desconoce, se puede utilizar el método de Gauss-Seidel para aproximarlo iterativamente.incógnita{\displaystyle \mathbf {x} }. El vectorincógnita(0){\displaystyle \mathbf {x} ^{(0)}}denota la estimación inicial paraincógnita{\displaystyle \mathbf {x} }, a menudoincógnitai(0)=0{\displaystyle \mathbf {x} _{i}^{(0)}=0}parai=1,2,...,norte{\displaystyle i=1,2,...,n}Denotemos porincógnita(k){\displaystyle \mathbf {x} ^{(k)}}elk{\displaystyle k}-ésima aproximación o iteración deincógnita{\displaystyle \mathbf {x} }y porincógnita(k+1){\displaystyle \mathbf {x} ^{(k+1)}}la aproximación deincógnita{\displaystyle \mathbf {x} }en el próximo (ok+1{\displaystyle k+1}-th) iteración.

Fórmula basada en matrices

La solución se obtiene iterativamente mediante Lincógnita(k+1)=bUincógnita(k),{\displaystyle \mathbf {L} \mathbf {x} ^{(k+1)}=\mathbf {b} -\mathbf {U} \mathbf {x} ^{(k)},} donde la matrizA{\displaystyle \mathbf {A} }se descompone en un componente triangular inferiorL{\displaystyle \mathbf {L} }y un componente triangular superior estrictoU{\displaystyle \mathbf {U} }de tal manera queA=L+U{\displaystyle \mathbf {A} =\mathbf {L} +\mathbf {U} }. [ 4 ] Más específicamente, la descomposición deA{\displaystyle \mathbf {A} }enL{\displaystyle \mathbf {L} }yU{\displaystyle \mathbf {U} }está dado por:

A=[a1100a21a220anorte1anorte2anortenorte]L+[0a12a1norte00a2norte000]U.{\displaystyle \mathbf {A} =\underbrace {\begin{bmatrix}a_{11}&0&\cdots &0\\a_{21}&a_{22}&\cdots &0\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nn}\end{bmatrix}} _{\textstyle \mathbf {L} }+\underbrace {\begin{bmatrix}0&a_{12}&\cdots &a_{1n}\\0&0&\cdots &a_{2n}\\\vdots &\vdots &\ddots &\vdots \\0&0&\cdots &0\end{bmatrix}} _{\textstyle \mathbf {U} }.}

Por qué funciona la fórmula basada en matrices

El sistema de ecuaciones lineales se puede reescribir como:

Aincógnita=b(L+U)incógnita=bLincógnita+Uincógnita=bLincógnita=bUincógnita{\displaystyle {\begin{alignedat}{1}\mathbf {A} \mathbf {x} &=\mathbf {b} \\(\mathbf {L} +\mathbf {U} )\mathbf {x} &=\mathbf {b} \\\mathbf {L} \mathbf {x} +\mathbf {U} \mathbf {x} &=\mathbf {b} \\\mathbf {L} \mathbf {x} &=\mathbf {b} -\mathbf {U} \mathbf {x} \end{alignedat}}}

El método de Gauss-Seidel ahora resuelve el lado izquierdo de esta expresión paraincógnita{\displaystyle \mathbf {x} }, utilizando el valor anterior paraincógnita{\displaystyle \mathbf {x} }en el lado derecho. Analíticamente, esto se puede escribir como incógnita(k+1)=L1(bUincógnita(k)).{\displaystyle \mathbf {x} ^{(k+1)}=\mathbf {L} ^{-1}\left(\mathbf {b} -\mathbf {U} \mathbf {x} ^{(k)}\right).}

Fórmula basada en elementos

Sin embargo, aprovechando la forma triangular deL{\displaystyle \mathbf {L} }, los elementos deincógnita(k+1){\displaystyle \mathbf {x} ^{(k+1)}}se puede calcular secuencialmente para cada filai{\displaystyle i}utilizando sustitución hacia adelante : [ 5 ]incógnitai(k+1)=1aii(bij=1i1aijincógnitaj(k+1)j=i+1norteaijincógnitaj(k)),i=1,2,,norte.{\displaystyle x_{i}^{(k+1)}={\frac {1}{a_{ii}}}\left(b_{i}-\sum _{j=1}^{i-1}a_{ij}x_{j}^{(k+1)}-\sum _{j=i+1}^{n}a_{ij}x_{j}^{(k)}\right),\quad i=1,2,\dots ,n.}

Observe que la fórmula utiliza dos sumatorias por iteración, que pueden expresarse como una sola sumatoria.jiaijincógnitaj{\displaystyle \sum _{j\neq i}a_{ij}x_{j}}que utiliza la iteración calculada más recientemente deincógnitaj{\displaystyle x_{j}}. El procedimiento generalmente continúa hasta que los cambios realizados por una iteración estén por debajo de cierta tolerancia, como un residuo suficientemente pequeño .

Discusión

La fórmula elemento a elemento para el método de Gauss-Seidel está relacionada con la del método de Jacobi (iterativo) , con una diferencia importante:

En Gauss-Seidel, el cálculo deincógnita(k+1){\displaystyle \mathbf {x} ^{(k+1)}}utiliza los elementos deincógnita(k+1){\displaystyle \mathbf {x} ^{(k+1)}}que ya han sido calculados, y solo los elementos deincógnita(k){\displaystyle \mathbf {x} ^{(k)}}que no se han calculado en el(k+1){\displaystyle (k+1)}-ésima iteración. Esto significa que, a diferencia del método de Jacobi, solo se requiere un vector de almacenamiento, ya que los elementos se pueden sobrescribir a medida que se calculan, lo que puede ser ventajoso para problemas muy grandes.

Sin embargo, a diferencia del método de Jacobi, los cálculos para cada elemento suelen ser mucho más difíciles de implementar en paralelo , ya que pueden tener una ruta crítica muy larga , y por lo tanto, son más factibles para matrices dispersas . Además, los valores en cada iteración dependen del orden de las ecuaciones originales.

Gauss-Seidel es lo mismo que la sobre-relajación sucesiva conω=1{\displaystyle \omega =1}.

Convergencia

Las propiedades de convergencia del método de Gauss-Seidel dependen de la matriz.A{\displaystyle \mathbf {A} }. Es decir, se sabe que el procedimiento converge si se cumple alguna de las siguientes condiciones:

El método de Gauss-Seidel puede converger incluso si no se cumplen estas condiciones.

Golub y Van Loan dan un teorema para un algoritmo que divideA{\displaystyle \mathbf {A} }en dos partes. SupongamosA=METROnorte{\displaystyle \mathbf {A} =\mathbf {M} -\mathbf {N} }es no singular. Sear=ρ(METRO1norte){\displaystyle r=\rho (\mathbf {M} ^{-1}\mathbf {N} )}sea ​​el radio espectral deMETRO1norte{\displaystyle \mathbf {M} ^{-1}\mathbf {N} }. Luego las iteracionesincógnita(k){\displaystyle \mathbf {x} ^{(k)}}definido porMETROincógnita(k+1)=norteincógnita(k)+b{\displaystyle \mathbf {M} \mathbf {x} ^{(k+1)}=\mathbf {N} \mathbf {x} ^{(k)}+\mathbf {b} }converger aincógnita=A1b{\displaystyle \mathbf {x} =\mathbf {A} ^{-1}\mathbf {b} }para cualquier vector inicialincógnita(0){\displaystyle \mathbf {x} ^{(0)}}siMETRO{\displaystyle \mathbf {M} }es no singular yr<1{\displaystyle r<1}. [ 8 ]

Algoritmo

Dado que los elementos se pueden sobrescribir a medida que se calculan en este algoritmo, solo se necesita un vector de almacenamiento y se omite la indexación de vectores. El algoritmo es el siguiente:

El algoritmo del método Gauss-Seidel tiene como entradas: A , b y como salida: φElija una estimación inicial φ para la solución repita hasta converger para i desde 1 hasta n haga σ ← 0 para j desde 1 hasta n haga si ji entonces σσ + a ij φ j fin si fin ( j -bucle) φ i ← ( b iσ ) / a ii fin ( i -bucle) comprobar si se ha alcanzado la convergencia fin (repetir)

Ejemplos

Un ejemplo para la versión matricial

Un sistema lineal mostrado comoAincógnita=b{\displaystyle \mathbf {A} \mathbf {x} =\mathbf {b} }está dado por: A=[163711]yb=[1113].{\displaystyle \mathbf {A} ={\begin{bmatrix}16&3\\7&-11\\\end{bmatrix}}\quad {\text{and}}\quad \mathbf {b} ={\begin{bmatrix}11\\13\end{bmatrix}}.}

Utilice la ecuación incógnita(k+1)=L1(bUincógnita(k)){\displaystyle \mathbf {x} ^{(k+1)}=\mathbf {L} ^{-1}(\mathbf {b} -\mathbf {U} \mathbf {x} ^{(k)})} en la forma incógnita(k+1)=Tincógnita(k)+do{\displaystyle \mathbf {x} ^{(k+1)}=\mathbf {T} \mathbf {x} ^{(k)}+\mathbf {c} } dónde:

T=L1Uydo=L1b.{\displaystyle \mathbf {T} =-\mathbf {L} ^{-1}\mathbf {U} \quad {\text{and}}\quad \mathbf {c} =\mathbf {L} ^{-1}\mathbf {b} .}

DescomponerA{\displaystyle \mathbf {A} }en la suma de un componente triangular inferiorL{\displaystyle \mathbf {L} }y un componente triangular superior estrictoU{\displaystyle U}: L=[160711]yU=[0300].{\displaystyle \mathbf {L} ={\begin{bmatrix}16&0\\7&-11\\\end{bmatrix}}\quad {\text{and}}\quad \mathbf {U} ={\begin{bmatrix}0&3\\0&0\end{bmatrix}}.}

Lo contrario deL{\displaystyle \mathbf {L} }es: L1=[160711]1=[0,06250.00000,03980,0909].{\displaystyle \mathbf {L} ^{-1}={\begin{bmatrix}16&0\\7&-11\end{bmatrix}}^{-1}={\begin{bmatrix}0.0625&0.0000\\0.0398&-0.0909\\\end{bmatrix}}.}

Ahora encuentra: T=[0,06250.00000,03980,0909][0300]=[0.0000,18750.0000,1194],do=[0,06250.00000,03980,0909][1113]=[0,68750,7439].{\displaystyle {\begin{aligned}\mathbf {T} &=-{\begin{bmatrix}0.0625&0.0000\\0.0398&-0.0909\end{bmatrix}}{\begin{bmatrix}0&3\\0&0\end{bmatrix}}={\begin{bmatrix}0.000&-0.1875\\0.000&-0.1194\end{bmatrix}},\\[1ex]\mathbf {c} &={\begin{bmatrix}0.0625&0.0000\\0.0398&-0.0909\end{bmatrix}}{\begin{bmatrix}11\\13\end{bmatrix}}={\begin{bmatrix}0.6875\\-0.7439\end{bmatrix}}.\end{aligned}}}

ConT{\displaystyle \mathbf {T} }ydo{\displaystyle \mathbf {c} }los vectoresincógnita{\displaystyle \mathbf {x} }se puede obtener de forma iterativa.

En primer lugar, eligeincógnita(0){\displaystyle \mathbf {x} ^{(0)}}, Por ejemploincógnita(0)=[1.01.0].{\displaystyle \mathbf {x} ^{(0)}={\begin{bmatrix}1.0\\1.0\end{bmatrix}}.}Cuanto más se acerque la estimación a la solución final, menos iteraciones necesitará el algoritmo.

Luego calcula: incógnita(1)=[0.0000,18750.0000,1193][1.01.0]+[0,68750,7443]=[0,50000,8636].incógnita(2)=[0.0000,18750.0000,1193][0,50000,8636]+[0,68750,7443]=[0,84940,6413].incógnita(3)=[0.0000,18750.0000,1193][0,84940,6413]+[0,68750,7443]=[0,80770,6678].incógnita(4)=[0.0000,18750.0000,1193][0,80770,6678]+[0,68750,7443]=[0,81270,6646].incógnita(5)=[0.0000,18750.0000,1193][0,81270,6646]+[0,68750,7443]=[0,81210,6650].incógnita(6)=[0.0000,18750.0000,1193][0,81210,6650]+[0,68750,7443]=[0,81220,6650].incógnita(7)=[0.0000,18750.0000,1193][0,81220,6650]+[0,68750,7443]=[0,81220,6650].{\displaystyle {\begin{aligned}\mathbf {x} ^{(1)}&={\begin{bmatrix}0.000&-0.1875\\0.000&-0.1193\end{bmatrix}}{\begin{bmatrix}1.0\\1.0\end{bmatrix}}+{\begin{bmatrix}0.6875\\-0.7443\end{bmatrix}}={\begin{bmatrix}0.5000\\-0.8636\end{bmatrix}}.\\[1ex]\mathbf {x} ^{(2)}&={\begin{bmatrix}0.000&-0.1875\\0.000&-0.1193\end{bmatrix}}{\begin{bmatrix}0.5000\\-0.8636\end{bmatrix}}+{\begin{bmatrix}0.6875\\-0.7443\end{bmatrix}}={\begin{bmatrix}0.8494\\-0.6413\end{bmatrix}}.\\[1ex]\mathbf {x} ^{(3)}&={\begin{bmatrix}0.000&-0.1875\\0.000&-0.1193\end{bmatrix}}{\begin{bmatrix}0.8494\\-0.6413\\\end{bmatrix}}+{\begin{bmatrix}0.6875\\-0.7443\end{bmatrix}}={\begin{bmatrix}0.8077\\-0.6678\end{bmatrix}}.\\[1ex]\mathbf {x} ^{(4)}&={\begin{bmatrix}0.000&-0.1875\\0.000&-0.1193\end{bmatrix}}{\begin{bmatrix}0.8077\\-0.6678\end{bmatrix}}+{\begin{bmatrix}0.6875\\-0.7443\end{bmatrix}}={\begin{bmatrix}0.8127\\-0.6646\end{bmatrix}}.\\[1ex]\mathbf {x} ^{(5)}&={\begin{bmatrix}0.000&-0.1875\\0.000&-0.1193\end{bmatrix}}{\begin{bmatrix}0.8127\\-0.6646\end{bmatrix}}+{\begin{bmatrix}0.6875\\-0.7443\end{bmatrix}}={\begin{bmatrix}0.8121\\-0.6650\end{bmatrix}}.\\[1ex]\mathbf {x} ^{(6)}&={\begin{bmatrix}0.000&-0.1875\\0.000&-0.1193\end{bmatrix}}{\begin{bmatrix}0.8121\\-0.6650\end{bmatrix}}+{\begin{bmatrix}0.6875\\-0.7443\end{bmatrix}}={\begin{bmatrix}0.8122\\-0.6650\end{bmatrix}}.\\[1ex]\mathbf {x} ^{(7)}&={\begin{bmatrix}0.000&-0.1875\\0.000&-0.1193\end{bmatrix}}{\begin{bmatrix}0.8122\\-0.6650\end{bmatrix}}+{\begin{bmatrix}0.6875\\-0.7443\end{bmatrix}}={\begin{bmatrix}0.8122\\-0.6650\end{bmatrix}}.\end{aligned}}}

Como era de esperar, el algoritmo converge a la solución: incógnita=A1b[0,81220,6650]{\displaystyle \mathbf {x} =\mathbf {A} ^{-1}\mathbf {b} \approx {\begin{bmatrix}0.8122\\-0.6650\end{bmatrix}}}.

De hecho, la matriz A es estrictamente diagonalmente dominante, pero no definida positiva.

Otro ejemplo para la versión matricial

Otro sistema lineal mostrado comoAincógnita=b{\displaystyle \mathbf {A} \mathbf {x} =\mathbf {b} }está dado por:

A=[2357]yb=[1113].{\displaystyle \mathbf {A} ={\begin{bmatrix}2&3\\5&7\\\end{bmatrix}}\quad {\text{and}}\quad \mathbf {b} ={\begin{bmatrix}11\\13\\\end{bmatrix}}.}

Utilice la ecuación incógnita(k+1)=L1(bUincógnita(k)){\displaystyle \mathbf {x} ^{(k+1)}=\mathbf {L} ^{-1}(\mathbf {b} -\mathbf {U} \mathbf {x} ^{(k)})} en la forma incógnita(k+1)=Tincógnita(k)+do{\displaystyle \mathbf {x} ^{(k+1)}=\mathbf {T} \mathbf {x} ^{(k)}+\mathbf {c} } dónde:

T=L1Uydo=L1b.{\displaystyle \mathbf {T} =-\mathbf {L} ^{-1}\mathbf {U} \quad {\text{and}}\quad \mathbf {c} =\mathbf {L} ^{-1}\mathbf {b} .}

DescomponerA{\displaystyle \mathbf {A} }en la suma de un componente triangular inferiorL{\displaystyle \mathbf {L} }y un componente triangular superior estrictoU{\displaystyle \mathbf {U} }: L=[2057]yU=[0300].{\displaystyle \mathbf {L} ={\begin{bmatrix}2&0\\5&7\\\end{bmatrix}}\quad {\text{and}}\quad \mathbf {U} ={\begin{bmatrix}0&3\\0&0\\\end{bmatrix}}.}

Lo contrario deL{\displaystyle \mathbf {L} }es: L1=[2057]1=[0,5000.0000,3570,143].{\displaystyle \mathbf {L} ^{-1}={\begin{bmatrix}2&0\\5&7\\\end{bmatrix}}^{-1}={\begin{bmatrix}0.500&0.000\\-0.357&0.143\\\end{bmatrix}}.}

Ahora encuentra: T=[0,5000.0000,3570,143][0300]=[0.0001.5000.0001.071],do=[0,5000.0000,3570,143][1113]=[5.5002.071].{\displaystyle {\begin{aligned}\mathbf {T} &=-{\begin{bmatrix}0.500&0.000\\-0.357&0.143\\\end{bmatrix}}{\begin{bmatrix}0&3\\0&0\\\end{bmatrix}}={\begin{bmatrix}0.000&-1.500\\0.000&1.071\\\end{bmatrix}},\\[1ex]\mathbf {c} &={\begin{bmatrix}0.500&0.000\\-0.357&0.143\\\end{bmatrix}}{\begin{bmatrix}11\\13\\\end{bmatrix}}={\begin{bmatrix}5.500\\-2.071\\\end{bmatrix}}.\end{aligned}}}

ConT{\displaystyle \mathbf {T} }ydo{\displaystyle \mathbf {c} }los vectoresincógnita{\displaystyle \mathbf {x} }se puede obtener de forma iterativa.

En primer lugar, tenemos que elegirincógnita(0){\displaystyle \mathbf {x} ^{(0)}}, Por ejemploincógnita(0)=[1.12.3]{\displaystyle \mathbf {x} ^{(0)}={\begin{bmatrix}1.1\\2.3\end{bmatrix}}}

Luego calcula: incógnita(1)=[01.50001.071][1.12.3]+[5.5002.071]=[2.0500,393].incógnita(2)=[01.50001.071][2.0500,393]+[5.5002.071]=[4.9111.651].incógnita(3)=.{\displaystyle {\begin{aligned}\mathbf {x} ^{(1)}&={\begin{bmatrix}0&-1.500\\0&1.071\\\end{bmatrix}}{\begin{bmatrix}1.1\\2.3\\\end{bmatrix}}+{\begin{bmatrix}5.500\\-2.071\\\end{bmatrix}}={\begin{bmatrix}2.050\\0.393\\\end{bmatrix}}.\\[1ex]\mathbf {x} ^{(2)}&={\begin{bmatrix}0&-1.500\\0&1.071\\\end{bmatrix}}{\begin{bmatrix}2.050\\0.393\\\end{bmatrix}}+{\begin{bmatrix}5.500\\-2.071\\\end{bmatrix}}={\begin{bmatrix}4.911\\-1.651\end{bmatrix}}.\\[1ex]\mathbf {x} ^{(3)}&=\cdots .\end{aligned}}}

En una prueba de convergencia encontramos que el algoritmo diverge. De hecho, la matrizA{\displaystyle \mathbf {A} }no es ni diagonalmente dominante ni definida positiva. Entonces, converge a la solución exacta. incógnita=A1b=[3829]{\displaystyle \mathbf {x} =\mathbf {A} ^{-1}\mathbf {b} ={\begin{bmatrix}-38\\29\end{bmatrix}}} No está garantizado y, en este caso, no ocurrirá.

Un ejemplo para la versión de la ecuación

Supongamos que se danorte{\displaystyle n}ecuaciones y un punto de partidaincógnita0{\displaystyle \mathbf {x} _{0}}En cualquier paso de una iteración de Gauss-Seidel, resuelva la primera ecuación paraincógnita1{\displaystyle x_{1}}en términos deincógnita2,,incógnitanorte{\displaystyle x_{2},\dots ,x_{n}}; luego resuelve la segunda ecuación paraincógnita2{\displaystyle x_{2}}en términos deincógnita1{\displaystyle x_{1}}recién encontrado y el restoincógnita3,,incógnitanorte{\displaystyle x_{3},\dots ,x_{n}}; y continuar aincógnitanorte{\displaystyle x_{n}}Luego, repita las iteraciones hasta que se logre la convergencia, o deténgase si la divergencia en las soluciones comienza a superar un nivel predefinido.

Consideremos un ejemplo: 10incógnita1incógnita2+2incógnita3=6,incógnita1+11incógnita2incógnita3+3incógnita4=25,2incógnita1incógnita2+10incógnita3incógnita4=11,3incógnita2incógnita3+8incógnita4=15.{\displaystyle {\begin{array}{rrrrl}10x_{1}&-x_{2}&+2x_{3}&&=6,\\-x_{1}&+11x_{2}&-x_{3}&+3x_{4}&=25,\\2x_{1}&-x_{2}&+10x_{3}&-x_{4}&=-11,\\&3x_{2}&-x_{3}&+8x_{4}&=15.\end{array}}}

Resolver paraincógnita1,incógnita2,incógnita3{\displaystyle x_{1},x_{2},x_{3}}yincógnita4{\displaystyle x_{4}}da: incógnita1=incógnita2/10incógnita3/5+3/5,incógnita2=incógnita1/11+incógnita3/113incógnita4/11+25/11,incógnita3=incógnita1/5+incógnita2/10+incógnita4/1011/10,incógnita4=3incógnita2/8+incógnita3/8+15/8.{\displaystyle {\begin{aligned}x_{1}&=x_{2}/10-x_{3}/5+3/5,\\x_{2}&=x_{1}/11+x_{3}/11-3x_{4}/11+25/11,\\x_{3}&=-x_{1}/5+x_{2}/10+x_{4}/10-11/10,\\x_{4}&=-3x_{2}/8+x_{3}/8+15/8.\end{aligned}}}

Supongamos que (0, 0, 0, 0) es la aproximación inicial, entonces la primera solución aproximada viene dada por: incógnita1=3/5=0,6,incógnita2=(3/5)/11+25/11=3/55+25/11=2.3272,incógnita3=(3/5)/5+(2.3272)/1011/10=3/25+0,232721.1=0,9873,incógnita4=3(2.3272)/8+(0,9873)/8+15/8=0,8789.{\displaystyle {\begin{aligned}x_{1}&=3/5=0.6,\\x_{2}&=(3/5)/11+25/11=3/55+25/11=2.3272,\\x_{3}&=-(3/5)/5+(2.3272)/10-11/10=-3/25+0.23272-1.1=-0.9873,\\x_{4}&=-3(2.3272)/8+(-0.9873)/8+15/8=0.8789.\end{aligned}}}

Utilizando las aproximaciones obtenidas, se repite el procedimiento iterativo hasta alcanzar la precisión deseada. A continuación se muestran las soluciones aproximadas tras cuatro iteraciones.

La solución exacta del sistema es (1, 2, −1, 1) .

Un ejemplo usando Python y NumPy

El siguiente procedimiento iterativo produce el vector solución de un sistema de ecuaciones lineales:

import numpy as npLÍMITE_DE_ITERACIÓN = 1000# Inicializar la matriz A = np.array ( [ [ 10.0 , - 1.0 , 2.0 , 0.0 ] , [ - 1.0 , 11.0 , - 1.0 , 3.0 ], [ 2.0 , - 1.0 , 10.0 , - 1.0 ], [ 0.0 , 3.0 , - 1.0 , 8.0 ], ] ) # Inicializar el vector RHS b = np.array ( [ 6.0 , 25.0 , - 11.0 , 15.0 ] )print ( "Sistema de ecuaciones:" ) for i in range ( A . shape [ 0 ]): row = " + " . join ( f " { A [ i , j ] : 3g } *x { j + 1 } " for j in range ( A . shape [ 1 ])) print ( f "[ { row } ] = [ { b [ i ] : 3g } ]" )x = np.zeros_like ( b ) para it_count en range ( 1 , ITERATION_LIMIT ) : x_new = np.zeros_like ( x ) print ( f " Iteración { it_count } : { x } " ) para i en range ( A.shape [ 0 ] ) : s1 = A [ i , : i ] @ x_new [: i ] s2 = A [ i , i + 1 :] @ x [ i + 1 : ] x_new [ i ] = ( b [ i ] - s1 - s2 ) / A [ i , i ] if np.allclose ( x , x_new , rtol = 1e - 8 ) : break x = x_newprint ( f "Solución: { x } " ) error = A @ x - b print ( f "Error: { error } " )

Produce el siguiente resultado:

Sistema de ecuaciones: [ 10*x1 + -1*x2 + 2*x3 + 0*x4] = [ 6] [ -1*x1 + 11*x2 + -1*x3 + 3*x4] = [ 25] [ 2*x1 + -1*x2 + 10*x3 + -1*x4] = [-11] [ 0*x1 + 3*x2 + -1*x3 + 8*x4] = [ 15] Iteración 1: [ 0. 0. 0. 0.] Iteración 2: [ 0.6 2.32727273 -0.98727273 0.87886364] Iteración 3: [ 1.03018182 2.03693802 -1.0144562 0.98434122] Iteración 4: [ 1.00658504 2.00355502 -1.00252738 0.99835095] Iteración 5: [ 1.00086098 2.00029825 -1.00030728 0.99984975] Iteración 6: [ 1.00009128 2.00002134 -1.00003115 0.9999881 ] Iteración 7: [ 1.00000836 2.00000117 -1.00000275 0.99999922] Iteración 8: [ 1.00000067 [ 2.00000002 -1.00000021 0.99999996] Iteración 9: [ 1.00000004 1.99999999 -1.00000001 1. ] Iteración 10: [ 1. 2. -1. 1.] Solución: [ 1. 2. -1. 1.] Error: [ 2.06480930e-08 -1.25551054e-08 3.61417563e-11 0.00000000e+00]

Programa para resolver un número arbitrario de ecuaciones usando Matlab.

El siguiente código utiliza la fórmula incógnitai(k+1)=1aii(bij<iaijincógnitaj(k+1)j>iaijincógnitaj(k)),i=1,2,,nortek=0,1,2,{\displaystyle x_{i}^{(k+1)}={\frac {1}{a_{ii}}}\left(b_{i}-\sum _{j<i}a_{ij}x_{j}^{(k+1)}-\sum _{j>i}a_{ij}x_{j}^{(k)}\right),\quad {\begin{array}{l}i=1,2,\ldots ,n\\k=0,1,2,\ldots \end{array}}}

función x = gauss_seidel ( A, b, x, iters ) para i = 1 : iters para j = 1 : tamaño ( A , 1 ) x ( j ) = ( b ( j ) - suma ( A ( j ,:) '.* x ) + A ( j , j ) * x ( j )) / A ( j , j ); fin fin fin

Véase también

Notas

  1. Sauer, Timothy (2006). Análisis numérico (2.ª  ed.). Pearson Education, Inc. pág.  109. ISBN 978-0-321-78367-7.
  2. Gauss 1903 , pág. 279 ; enlace directo . 
  3. Seidel, Ludwig (1874). "Über ein Verfahren, die Gleichungen, auf welche die Methode der kleinsten Quadrate führt, sowie lineäre Gleichungen überhaupt, durch sucesive Annäherung aufzulösen" [ Sobre un proceso para resolver mediante aproximaciones sucesivas las ecuaciones a las que conduce el método de mínimos cuadrados, así como las ecuaciones lineales en general ] . Abhandlungen der Mathematisch-Physikalischen Klasse der Königlich Bayerischen Akademie der Wissenschaften (en alemán). 11 (3): 81-108 .
  4. ^ Préstamo Golub y Van 1996 , pág. 511 . 
  5. Golub y Van Loan 1996 , ecuación (10.1.3)
  6. Golub y Van Loan 1996 , Teorema 10.1.2 .
  7. Bagnara, Roberto (marzo de 1995). "Una prueba unificada para la convergencia de los métodos de Jacobi y Gauss-Seidel". SIAM Review . 37 (1): 93– 97. CiteSeerX 10.1.1.26.5207 . doi : 10.1137/1037008 . JSTOR 2132758 .  
  8. Golub y Van Loan 1996 , Teorema 10.1.2

Referencias

Este artículo incorpora texto del artículo Gauss-Seidel_method en CFD-Wiki , que está bajo la licencia GFDL .

  • "Método Seidel" , Enciclopedia de Matemáticas , EMS Press , 2001 [1994]
  • Gauss-Seidel de www.math-linux.com
  • Gauss-Seidel del Instituto de Métodos Numéricos Holísticos
  • Iteración de Gauss Siedel de www.geocities.com
  • El método de Gauss-Seidel
  • Bickson
  • Código Matlab
  • Ejemplo de código C
Obtenido de " https://en.wikipedia.org/w/index.php?title=Gauss–Seidel_method&oldid=1357228371 "