{"id":2941,"date":"2017-11-07T09:05:15","date_gmt":"2017-11-07T14:05:15","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=2941"},"modified":"2026-04-05T19:52:44","modified_gmt":"2026-04-06T00:52:44","slug":"s1eva2007tii_t2-aplicar-gauss-seidel","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-s1eva10\/s1eva2007tii_t2-aplicar-gauss-seidel\/","title":{"rendered":"s1Eva2007TII_T2 Aplicar Gauss-Seidel 6x6"},"content":{"rendered":"\n<p><em><strong>Ejercicio<\/strong><\/em>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-1eva10\/1eva2007tii_t2-aplicar-gauss-seidel\/\" data-type=\"post\" data-id=\"491\">1Eva2007TII_T2 Aplicar Gauss-Seidel 6x6<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Desarrollo Anal\u00edtico<\/h2>\n\n\n\n<p>- Verificar que la matriz es diagonal dominante<\/p>\n\n\n\n<p>No es necesario realizar el pivoteo por filas, ya la matriz tiene la diagonal dominante.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>A = &#091;&#091;7.63, 0.30, 0.15,  0.50, 0.34, 0.84],\n     &#091;0.38, 6.40, 0.70,  0.90, 0.29, 0.57],\n     &#091;0.83, 0.19, 8.33,  0.82, 0.34, 0.37],\n     &#091;0.50, 0.68, 0.86, 10.21, 0.53, 0.70],\n     &#091;0.71, 0.30, 0.85,  0.82, 5.95, 0.55],\n     &#091;0.43, 0.54, 0.59,  0.66, 0.31, 9.25]]\n\nB = &#091; -9.44, 25.27, -48.01, 19.76, -23.63, 62.59]<\/code><\/pre>\n\n\n\n<p>- revisar el n\u00famero de condici\u00f3n<\/p>\n\n\n\n<p>cond(A) = || A||.||A<sup>-1<\/sup>||<\/p>\n\n\n\n<p>El n\u00famero de condici\u00f3n no es \"muy alto\",&nbsp; los valores de la diagonal son los mayores en toda la fila, por lo que el sistema converge.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; np.linalg.cond(A)\n2.04518539662910119<\/code><\/pre>\n\n\n\n<p>- realizar iteraciones con las expresiones:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_0 = \\Big(-9.44 -0.3 x_1 -0.15x_2 -0.50 x_3 -0.34 x_4 -0.84 x_5\\Big)\\frac{1}{7.63} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_1 = \\Big( 25.27 -0.38 x_0 -0.70 x_2 -0.90 x_3 -0.29 x_4 -0.57 x_5 \\Big) \\frac{1}{6.40} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_2 = \\Big(-48.01 -0.83x_0 -0.19 x_1 -0.82x_3 -0.34x_4 -0.37x_5 \\Big)\\frac{1}{8.33} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_3 = \\Big(19.76 -0.50 x_0 -0.68 x_1 -0.86 x_2 -0.53 x_4 -0.70x_5 \\Big)\\frac{1}{10.21} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_4 = \\Big( -23.63 - 0.71 x_0 -0.30 x_1 -0.85 x_2 -0.82 x_3 -0.55x_5 \\Big)\\frac{1}{5.95} <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_5 = \\Big( 62.59 - 0.43x_0 -0.54x_1 - 0.59 x_2 -0.66 x_3 -0.31 x_4 \\Big)\\frac{1}{9.25} <\/span>\n\n\n\n<p>Dado que no se establece en el enunciado el vector inicial, se usar\u00e1 el vector cero. La tolerancia requerida es 10<sup>-5<\/sup><br>X0 = [ 0. 0. 0. 0. 0. 0.] = [x<sub>0<\/sub>,x<sub>1<\/sub>,x<sub>2<\/sub>,x<sub>3<\/sub>,x<sub>4<\/sub>,x<sub>5<\/sub>]<\/p>\n\n\n\n<p><em><strong>iteraci\u00f3n 0<\/strong><\/em><\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_0 = \\Big(-9.44 -0.3 (0) -0.15(0) -0.50 (0) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.34(0) -0.84 (0)\\Big)\\frac{1}{7.63} = -1.23722 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_1 = \\Big( 25.27 -0.38 (-1.23722) -0.70 (0) -0.90 (0)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.29 (0) -0.57 (0) \\Big) \\frac{1}{6.40} = 4.0219 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_2 = \\Big(-48.01 -0.83 (-1.23722) -0.19 (4.0219) -0.82(0)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.34(0) -0.37(0) \\Big)\\frac{1}{8.33} = -5.73196 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_3 = \\Big( 19.76 -0.50 (-1.23722) -0.68 (4.0219) -0.86 (-5.73196)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.53 (0) -0.70(0) \\Big)\\frac{1}{10.21} = 2.21089 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_4 = \\Big( -23.63 - 0.71 (-1.23722) -0.30 (4.0219) -0.85 (-5.73196)<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.82 (2.21089) -0.55(0) \\Big)\\frac{1}{5.95} = -3.51242<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_5 = \\Big( 62.59 - 0.43(-1.23722) -0.54(4.0219) - 0.59 (-5.73196) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.66 (2.21089) -0.31 (-3.51242) \\Big)\\frac{1}{9.25} = 6.91478 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X_1 = [-1.23722, 4.0219, -5.73196, 2.21089, -3.51242, 6.91478 ] <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> diferencia = X1 - [0,0,0,0,0,0] <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> errado = max(|diferencia|) = 6.91478 <\/span>\n\n\n\n<p><strong><em>iteraci\u00f3n 1<\/em><\/strong><\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_0 = \\Big(-9.44 -0.3 (4.0219) -0.15(4.0219) -0.50 (2.21089) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.34 (-3.51242) -0.84(6.91478) \\Big)\\frac{1}{7.63} = -2.0323 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_1 = \\Big( 25.27 -0.38 (-2.0323) -0.70 ( -5.73196) -0.90 (2.21089) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.29 (-3.51242) -0.57 (6.91478) \\Big) \\frac{1}{6.40} = 3.92844<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_2 = \\Big(-48.01 -0.83(-2.0323) -0.19 (3.92844) -0.82(2.21089) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.34(-3.51242) -0.37(6.91478) \\Big)\\frac{1}{8.33} = -6.03203<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_3 = \\Big(19.76 -0.50 (-2.0323) -0.68 (3.92844) -0.86 (-6.03203) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.53 (-3.51242) -0.70(6.91478) \\Big)\\frac{1}{10.21} = 1.98958 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_4 = \\Big( -23.63 - 0.71 (-2.0323) -0.30 (3.92844) -0.85 (-6.03203) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.82 (1.98958) -0.55(6.91478) \\Big)\\frac{1}{5.95} = -3.97865 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_5 = \\Big( 62.59 - 0.43(-2.0323) -0.54(3.92844) - 0.59 (-6.03203) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> -0.66 (1.98958) -0.31 (-3.97865) \\Big)\\frac{1}{9.25} = 7.00775 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X_2 = [-2.0323, 3.92844, -6.03203, 1.98958, -3.97865, 7.00775] <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> diferencia = X2 - [-1.23722, 4.0219, -5.73196, 2.21089, -3.51242, 6.91478 ] <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> errado = max(|diferencia|) = 0.79507 <\/span>\n\n\n\n<p><em><strong>iteraci\u00f3n 2<\/strong><\/em><\/p>\n\n\n\n<p>Desarrollar como tarea.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Algoritmo en Python<\/h2>\n\n\n\n<p>La tabla de aproximaciones sucesivas para el vector X es:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Matriz aumentada\n&#091;&#091;  7.63   0.3    0.15   0.5    0.34   0.84  -9.44]\n &#091;  0.38   6.4    0.7    0.9    0.29   0.57  25.27]\n &#091;  0.83   0.19   8.33   0.82   0.34   0.37 -48.01]\n &#091;  0.5    0.68   0.86  10.21   0.53   0.7   19.76]\n &#091;  0.71   0.3    0.85   0.82   5.95   0.55 -23.63]\n &#091;  0.43   0.54   0.59   0.66   0.31   9.25  62.59]]\nPivoteo parcial:\n  Pivoteo por filas NO requerido\nIteraciones Gauss-Seidel\nitera,&#091;X]\n   errado,&#091;diferencia]\n0 &#091;0. 0. 0. 0. 0. 0.]\n  nan\n1 &#091;-1.2372  4.0219 -5.732   2.2109 -3.5124  6.9148]\n  6.91477852326521 &#091;1.2372 4.0219 5.732  2.2109 3.5124 6.9148]\n2 &#091;-2.0323  3.9284 -6.032   1.9896 -3.9786  7.0077]\n  0.7950736009265342 &#091;0.7951 0.0935 0.3001 0.2213 0.4662 0.093 ]\n3 &#091;-1.9977  4.0032 -6.0005  1.9981 -4.0008  6.9999]\n  0.0747319197184444 &#091;0.0346 0.0747 0.0315 0.0085 0.0222 0.0078]\n4 &#091;-1.9999  4.0004 -5.9998  2.     -4.      7.    ]\n  0.002806312415341239 &#091;2.2635e-03 2.8063e-03 7.0626e-04 1.9270e-03 7.7045e-04 6.0687e-05]\n5 &#091;-2.  4. -6.  2. -4.  7.]\n  0.00038434237385231995 &#091;7.0836e-05 3.8434e-04 2.0801e-04 2.4329e-06 5.1602e-05 3.7095e-05]\n6 &#091;-2.  4. -6.  2. -4.  7.]\n  1.601551550134417e-05 &#091;1.2658e-05 1.6016e-05 5.6200e-06 6.4351e-06 4.0572e-06 5.6982e-07]\nMetodo de Gauss-Seidel\nnumero de condici\u00f3n: 2.045185396629101\nX:  &#091;-2.  4. -6.  2. -4.  7.]\nerrado: 1.601551550134417e-05\niteraciones: 6<\/code><\/pre>\n\n\n\n<p>el gr\u00e1fico de los iteraciones vs errores es:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/11\/1eva2007tii_t2_GaussSeidel01.png\" alt=\"1eva2007tii_t2 Gauss-Seidel\" class=\"wp-image-18680\" \/><\/figure>\n\n\n\n<p>La tabla obtiene aplicando la funci\u00f3n de Gauss-Seidel, tomando como vector inicial el vector de ceros.<\/p>\n\n\n\n<p><em><strong>Tarea<\/strong><\/em>: X=TX+C<\/p>\n\n\n\n<p>Algoritmo en Python<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# 1Eva2007TII_T2 Aplicar Gauss-Seidel 6x6\nimport numpy as np\n \ndef gauss_seidel(A,B,X0,tolera, iteramax=100, vertabla=False, precision=4):\n    ''' M\u00e9todo de Gauss Seidel, tolerancia, vector inicial X0\n        para mostrar iteraciones: vertabla=True\n    '''\n    # Matrices como arreglo, numeros reales\n    A = np.array(A, dtype=float)\n    B = np.array(B, dtype=float)\n    X0 = np.array(X0, dtype=float)\n    tamano = np.shape(A)\n    n = tamano&#x5B;0]\n    m = tamano&#x5B;1]\n \n    # valores iniciales\n    diferencia = 2*tolera*np.ones(n, dtype=float)\n    errado = 2*tolera # np.max(diferencia)\n    \n    tabla = &#x5B;np.copy(X0)] # tabla de iteraciones\n    tabla = np.concatenate((tabla,&#x5B;&#x5B;np.nan]]),\n                            axis=1) # a\u00f1ade errado\n \n    if vertabla==True:\n        print('Iteraciones Gauss-Seidel')\n        print('itera,&#x5B;X]')\n        print('   errado,&#x5B;diferencia]')\n        print(0,X0)\n        print(' ',np.nan)\n        np.set_printoptions(precision)\n \n    itera = 0 # Gauss-Sediel\n    X = np.copy(X0)\n    while (errado&gt;tolera and itera&lt;iteramax):\n         \n        for i in range(0,n,1): # una ecuacion\n            suma = B&#x5B;i]\n            for j in range(0,m,1):\n                if (i!=j):\n                    suma = suma-A&#x5B;i,j]*X&#x5B;j]\n            nuevo = suma\/A&#x5B;i,i]\n            diferencia&#x5B;i] = np.abs(nuevo-X&#x5B;i])\n            X&#x5B;i] = nuevo\n        errado = np.max(diferencia)\n \n        Xfila= np.concatenate((X,&#x5B;errado]),axis=0)\n        tabla = np.concatenate((tabla,&#x5B;Xfila]),axis = 0)\n        itera = itera + 1\n        if vertabla==True:\n            print(itera, X)\n            print(' ', errado,diferencia)\n         \n    # No converge\n    if (itera&gt;iteramax):\n        X = np.nan\n        print('No converge,iteramax superado')\n    return(X,tabla)\n \ndef pivoteafila(A,B,vertabla=False):\n    '''\n    Pivotea parcial por filas, entrega matriz aumentada AB\n    Si hay ceros en diagonal es matriz singular,\n    Tarea: Revisar si diagonal tiene ceros\n    '''\n    A = np.array(A,dtype=float)\n    B = np.array(B,dtype=float)\n    # Matriz aumentada\n    nB = len(np.shape(B))\n    if nB == 1:\n        B = np.transpose(&#x5B;B])\n    AB  = np.concatenate((A,B),axis=1)\n     \n    if vertabla==True:\n        print('Matriz aumentada')\n        print(AB)\n        print('Pivoteo parcial:')\n     \n    # Pivoteo por filas AB\n    tamano = np.shape(AB)\n    n = tamano&#x5B;0]\n    m = tamano&#x5B;1]\n     \n    # Para cada fila en AB\n    pivoteado = 0\n    for i in range(0,n-1,1):\n        # columna desde diagonal i en adelante\n        columna = np.abs(AB&#x5B;i:,i])\n        dondemax = np.argmax(columna)\n         \n        # dondemax no es en diagonal\n        if (dondemax != 0):\n            # intercambia filas\n            temporal = np.copy(AB&#x5B;i,:])\n            AB&#x5B;i,:] = AB&#x5B;dondemax+i,:]\n            AB&#x5B;dondemax+i,:] = temporal\n \n            pivoteado = pivoteado + 1\n            if vertabla==True:\n                print(' ',pivoteado, 'intercambiar filas: ',i,'y', dondemax+i)\n    if vertabla==True:\n        if pivoteado==0:\n            print('  Pivoteo por filas NO requerido')\n        else:\n            print('AB')\n            print(AB)\n    return(AB)\n \n# PROGRAMA B\u00fasqueda de solucion  --------\n# INGRESO\nA = &#x5B;&#x5B;7.63, 0.30, 0.15,  0.50, 0.34, 0.84],\n     &#x5B;0.38, 6.40, 0.70,  0.90, 0.29, 0.57],\n     &#x5B;0.83, 0.19, 8.33,  0.82, 0.34, 0.37],\n     &#x5B;0.50, 0.68, 0.86, 10.21, 0.53, 0.70],\n     &#x5B;0.71, 0.30, 0.85,  0.82, 5.95, 0.55],\n     &#x5B;0.43, 0.54, 0.59,  0.66, 0.31, 9.25]]\n \nB = &#x5B;-9.44,25.27,-48.01,19.76,-23.63,62.59]\n \nX0 = np.zeros(len(A), dtype=float)\ntolera = 0.0001\niteramax = 100\nverdecimal = 4\n \n# PROCEDIMIENTO\nAB = pivoteafila(A,B,vertabla=True)\nn,m = np.shape(AB)\n \nA = AB&#x5B;:,:n] # separa en A y B\nB = AB&#x5B;:,n]\n \n&#x5B;X, tabla] = gauss_seidel(A,B,X0, tolera,\n                           vertabla=True,\n                           precision=verdecimal)\nn_itera = len(tabla)-1\nerrado = tabla&#x5B;-1,-1]\n \n# numero de condicion\nncond = np.linalg.cond(A)\n \n# SALIDA\nprint('Metodo de Gauss-Seidel')\nprint('numero de condici\u00f3n:', ncond)\nprint('X: ',X)\nprint('errado:',errado)\nprint('iteraciones:', n_itera)\n<\/pre><\/div>\n\n\n<p>La gr\u00e1fica se completa con:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA de iteraciones\nerrados = tabla&#x5B;:,n]\n \nimport matplotlib.pyplot as plt\n# grafica de error por iteracion\nfig2D = plt.figure()\ngraf = fig2D.add_subplot(111)\ngraf.plot(errados,color='purple')\ngraf.set_xlabel('itera')\ngraf.set_ylabel('|error|')\ngraf.set_title('M\u00e9todo de Gauss-Seidel: error&#x5B;itera]')\ngraf.grid()\n \nplt.show()\n<\/pre><\/div>\n\n\n<p>En el caso de la norma infinito, para la matriz A, se puede usar el algoritmo desarrollado en clase.<br>Como valor para verificar su algoritmo, se obtuvo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; np.linalg.norm(A, np.inf)\n13.479999999999999<\/code><\/pre>\n\n\n\n<p><strong><em>Tarea<\/em><\/strong>: incluir la norma infinito para T<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ejercicio: 1Eva2007TII_T2 Aplicar Gauss-Seidel 6x6 1. Desarrollo Anal\u00edtico - Verificar que la matriz es diagonal dominante No es necesario realizar el pivoteo por filas, ya la matriz tiene la diagonal dominante. - revisar el n\u00famero de condici\u00f3n cond(A) = || A||.||A-1|| El n\u00famero de condici\u00f3n no es \"muy alto\",&nbsp; los valores de la diagonal son [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-mn-ejemplo","format":"standard","meta":{"footnotes":""},"categories":[44],"tags":[58,54],"class_list":["post-2941","post","type-post","status-publish","format-standard","hentry","category-mn-s1eva10","tag-ejemplos-python","tag-mnumericos"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=2941"}],"version-history":[{"count":5,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2941\/revisions"}],"predecessor-version":[{"id":23810,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/2941\/revisions\/23810"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=2941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=2941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=2941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}