{"id":1212,"date":"2017-06-04T09:10:08","date_gmt":"2017-06-04T14:10:08","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=1212"},"modified":"2026-02-15T05:49:43","modified_gmt":"2026-02-15T10:49:43","slug":"metodo-gauss","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u03\/metodo-gauss\/","title":{"rendered":"3.3 M\u00e9todo de Gauss con Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Gauss<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaadelante\">Elimina adelante<\/a><\/p>\n\n\n\n<p><a href=\"#sustituyeatras\">Sustituci\u00f3n atr\u00e1s<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcion\">funci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"concepto\">1. M\u00e9todo de Gauss<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Chapra 9.2 p254, Burden 6.1 p273, Rodr\u00edguez 4.3 p119<\/p>\n\n\n\n<p>El m\u00e9todo de Gauss opera sobre la <em>matriz aumentada<\/em> y <em><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/pivoteo-parcial-filas\/\" data-type=\"post\" data-id=\"1226\">pivoteada por filas<\/a><\/em>, a\u00f1adiendo los procesos:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{cases} a_{0,0} x_0+a_{0,1}x_1+a_{0,2} x_2 = b_{0} \\\\ a_{1,0} x_0+a_{1,1}x_1+a_{1,2} x_2 = b_{1} \\\\ a_{2,0} x_0+a_{2,1}x_1+a_{2,2} x_2 = b_{2} \\end{cases} <\/span>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 Eliminaci\u00f3n hacia adelante<\/h3>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"255\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/eliminaadelante_animado.gif\" alt=\"elimina adelante gr\u00e1fico animado\" class=\"wp-image-13406\" \/><\/figure>\n\n\n\n<p><strong><\/strong>Desde la <em>primera fila<\/em> <strong>i<\/strong> ,<br>sobre las filas inferiores<\/p>\n\n\n\n<p>k = <strong>i+1<\/strong>, i+2, ...<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">a_{k} = a_{k} -a_{i}\\frac{a_{ki}}{a_{ii}} <\/span>\n\n\n\n<p>&nbsp;1.2 Sustituci\u00f3n hacia atr\u00e1s<\/p>\n\n\n\n<p>Desde la <em>\u00faltima fila,&nbsp;<\/em>para<\/p>\n\n\n\n<p>i = <strong>n-1<\/strong>, n-2, ...<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_i = \\Bigg( b_i-\\sum_{j=i+1}^{n} a_{ij} x_{j} \\Bigg) \\frac{1}{a_{ii}} <\/span>\n\n\n\n<p>y las columnas <strong>j<\/strong>&nbsp;luego de la diagonal.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Gauss<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaadelante\">Elimina adelante<\/a><\/p>\n\n\n\n<p><a href=\"#sustituyeatras\">Sustituci\u00f3n atr\u00e1s<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcion\">funci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejercicio\">2. Ejercicio<\/h2>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"255\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/eliminaadelante_00.png\" alt=\"elimina adelante 00\" class=\"wp-image-13407\" \/><\/figure>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>:&nbsp;Rodr\u00edguez 4.0 p105,&nbsp; <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-eval\/mn-1e10\/1eva2010ti_t3_mn-precio-articulos\/\" data-type=\"post\" data-id=\"757\">1Eva2010TI_T3_MN Precio art\u00edculos<\/a><\/p>\n\n\n\n<p>Para el sistema de ecuaciones mostrado, desarrolle usando el m\u00e9todo de Gauss.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\begin{cases} 4x_1+2x_2+5x_3 = 60.70 \\\\ 2x_1+5x_2+8x_3 = 92.90 \\\\ 5x_1+4x_2+3x_3 = 56.30 \\end{cases} <\/span>\n\n\n\n<p>Se aplica el&nbsp;<a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/pivoteo-parcial-filas\/\" data-type=\"post\" data-id=\"1226\">pivoteo parcial por filas<\/a>, <\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"479\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/eliminaadelante_01.png\" alt=\"elimina adelante pivoteado 01\" class=\"wp-image-13408\" style=\"width:400px\" \/><\/figure>\n\n\n\n<p>que tiene como resultado:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\left( \\begin{array}{rrr|r} 5 &amp; 4 &amp; 3 &amp; 56.3 \\\\ 2 &amp; 5 &amp; 8 &amp; 92.9 \\\\ 4 &amp; 2 &amp; 5 &amp; 60.7 \\end{array} \\right)<\/span>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;&#091; 5.   4.   3.  56.3]\n &#091; 2.   5.   8.  92.9]\n &#091; 4.   2.   5.  60.7]]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Gauss<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaadelante\">Elimina adelante<\/a><\/p>\n\n\n\n<p><a href=\"#sustituyeatras\">Sustituci\u00f3n atr\u00e1s<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcion\">funci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"eliminaadelante\">3. Eliminaci\u00f3n hacia adelante o eliminaci\u00f3n Gaussiana<\/h2>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"255\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/EliminaAdelante_i1j2_.png\" alt=\"Elimina Adelante i1 j2\" class=\"wp-image-13409\" \/><\/figure>\n\n\n\n<p>Consiste en simplificar la matriz a una <strong>triangular superior<\/strong>, con ceros debajo de la diagonal, usando operaciones entre filas, para obtener:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\left( \\begin{array}{rrr|r} 5 &amp; 4 &amp; 3 &amp; 56.3 \\\\ 0 &amp; 3.4 &amp; 6.8 &amp; 70.38 \\\\ 0 &amp; 0 &amp; 5 &amp; 40.5 \\end{array} \\right)<\/span>\n\n\n\n<pre class=\"wp-block-code\"><code>Elimina hacia adelante\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; <span style=\"color: #ff0000\">0.<\/span>    3.4   6.8  70.38]\n &#091; <span style=\"color: #ff0000\">0.<\/span>    <span style=\"color: #ff0000\">0.<\/span>    5.   40.5 ]]<\/code><\/pre>\n\n\n\n<p>Los \u00edndices de fila y columna en la matriz A[i,j] se usan de forma semejante a la nomenclatura de los textos de \u00c1lgebra Lineal. <\/p>\n\n\n\n<p>Progresivamente para cada fila, se toma como referencia o pivote el elemento de la diagonal (i=j).<\/p>\n\n\n\n<p>Luego, se realizan operaciones con las filas inferiores para convertir los elementos por debajo de la diagonal en cero.<\/p>\n\n\n\n<p>Las operaciones ya incluyen el vector B debido a que se trabaja sobre la matriz aumentada AB.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AB Matriz aumentada y pivoteada por filas:\n&#091;&#091; <span style=\"color: #ff0000\">5<\/span>.   4.   3.  56.3]\n &#091; <span style=\"color: #0000ff\">2<\/span>.   5.   8.  92.9]\n &#091; 4.   2.   5.  60.7]]<\/code><\/pre>\n\n\n\n<p><strong>iteraci\u00f3n fila 1, operaci\u00f3n fila 1 y 2<\/strong><\/p>\n\n\n\n<p>Para la fila 1, con posici\u00f3n i=0, se usa el elemento a<sub>i,i<\/sub> como <strong>pivote<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pivote = AB&#091;i,i] = AB&#091;0,0] = <span style=\"color: #ff0000\">5<\/span><\/code><\/pre>\n\n\n\n<p>Para las filas que est\u00e1n despu\u00e9s de la diagonal se referencian como <strong>k<\/strong>. Se obtiene el <strong>factor<\/strong> escalar de la operaci\u00f3n entre filas de la f\u00f3rmula.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>k = i+1 = 0+1 = 1\nfactor = AB&#091;1,0]\/pivote = <span style=\"color: #0000ff\">2<\/span>\/<span style=\"color: #ff0000\">5<\/span><\/code><\/pre>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">a_{k} = a_{k} -a_{i}\\frac{a_{k,i}}{pivote}<\/span>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"255\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/EliminaAdelante_i0j1.png\" alt=\"Elimina Adelante i0 j1\" class=\"wp-image-13410\" \/><\/figure>\n\n\n\n<p>y se realiza la operaci\u00f3n entre fila <em><strong>k<\/strong><\/em>&nbsp;y la fila <em>i<\/em> para actualizar la fila <em><strong>k<\/strong><\/em>,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>       &#091; <span style=\"color: #0000ff\">2<\/span>. 5.  8.  92.9]\n-(<span style=\"color: #0000ff\">2<\/span>\/<span style=\"color: #ff0000\">5<\/span>)*&#091; 5. 4.  3.  56.3]\n__________________________\n     = &#091; 0. 3.4 6.8 70.38]<\/code><\/pre>\n\n\n\n<p>con lo que la matriz aumentada AB se actualiza a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AB =\n&#091;&#091; <span style=\"color: #ff0000\">5<\/span>.    4.    3.   56.3 ]\n &#091; 0.    3.4   6.8  70.38]\n &#091; <span style=\"color: #0000ff\">4.<\/span>    2.    5.   60.7 ]]<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"255\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/EliminaAdelante_i0j2.png\" alt=\"Elimina Adelante i0 j2\" class=\"wp-image-13411\" \/><\/figure>\n\n\n\n<p><strong>iteraci\u00f3n fila 1, operaci\u00f3n fila 1 y 3<\/strong><\/p>\n\n\n\n<p>Se contin\u00faa con la siguiente fila, quedando la matriz aumentada con la columna debajo de la primera diagonal en cero:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>k = k+1 = 2\nfactor = <span style=\"color: #0000ff\">4<\/span>\/<span style=\"color: #ff0000\">5<\/span><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>        &#091; <span style=\"color: #0000ff\">4<\/span>.  2.  5.   60.7] \n- (<span style=\"color: #0000ff\">4<\/span>\/<span style=\"color: #ff0000\">5<\/span>)*&#091; 5.  4.  3.   56.3]\n_____________________________\n      = &#091; 0. -1.2 2.6  15.66]\n\nAB =\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; 0.    <span style=\"color: #ff0000\">3.4<\/span>   6.8  70.38]\n &#091; 0.   <span style=\"color: #0000ff\">-1.2<\/span>   2.6  15.66]]<\/code><\/pre>\n\n\n\n<p>Como ya se terminaron las operaciones con la primera posici\u00f3n de la diagonal, el siguiente paso es usar la segunda posici\u00f3n, i =1.<\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"255\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/EliminaAdelante_i1j2.png\" alt=\"Elimina Adelante i1 j2\" class=\"wp-image-13412\" \/><\/figure>\n\n\n\n<p><strong>iteraci\u00f3n fila 2<\/strong><\/p>\n\n\n\n<p>Para la fila 2, con posici\u00f3n i=1, se toma el elemento de la diagonal a<sub>i,i<\/sub> como <strong>pivote<\/strong>, la variable adelante indica la referencia de la tercera fila<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pivote = A&#091;i,i] = AB&#091;1,1] = <span style=\"color: #ff0000\">3.4<\/span><\/code><\/pre>\n\n\n\n<p>Para las filas ubicadas <strong>adelante<\/strong> de la diagonal se referencian como&nbsp;<strong>k<\/strong>. Para aplicar la f\u00f3rmula por filas, se obtiene el <strong>factor<\/strong> .<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>k = i+1 = 1+1 = 2\nfactor = AB&#091;2,1]\/pivote  = <span style=\"color: #0000ff\">-1.2<\/span>\/<span style=\"color: #ff0000\">3.4<\/span> = - 0,3529\n\n            &#091; 0. <span style=\"color: #0000ff\">-1.2<\/span> 2.6 15.66]\n-(<span style=\"color: #0000ff\">-1.2<\/span>\/<span style=\"color: #ff0000\">3.4<\/span>)*&#091; 0.  3.4 6.8 70.38]\n________________________________\n         =  &#091; 0.  0.  5.  40.5 ]\n\nAB =\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; <span style=\"color: #ff0000\">0.<\/span>    3.4   6.8  70.38]\n &#091; <span style=\"color: #ff0000\">0.<\/span>    <span style=\"color: #ff0000\">0.<\/span>    5.   40.5 ]]<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"255\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/06\/EliminaAdelante_i1j2_.png\" alt=\"Elimina Adelante i1 j2\" class=\"wp-image-13409\" \/><\/figure>\n\n\n\n<p>Con lo que se completa el objetivo de tener ceros debajo de la diagonal.&nbsp;<\/p>\n\n\n\n<p>Observe que no es necesario realizar operaciones para la \u00faltima fila, por lo que <strong>k<\/strong>&nbsp;debe llegar solamente hasta la <strong>fila pen\u00faltima<\/strong>.<\/p>\n\n\n\n<p>El resultado de la eliminaci\u00f3n hacia adelante, a ser usado en el pr\u00f3ximo paso es:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\left( \\begin{array}{rrr|r} 5 &amp; 4 &amp; 3 &amp; 56.3 \\\\ 0 &amp; 3.4 &amp; 6.8 &amp; 70.38 \\\\ 0 &amp; 0 &amp; 5 &amp; 40.5 \\end{array} \\right)<\/span>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Gauss<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaadelante\">Elimina adelante<\/a><\/p>\n\n\n\n<p><a href=\"#sustituyeatras\">Sustituci\u00f3n atr\u00e1s<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcion\">funci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sustituyeatras\">4. Sustituci\u00f3n hacia atr\u00e1s<\/h2>\n\n\n\n<p>La f\u00f3rmula se interpreta para facilitar el algoritmo.<\/p>\n\n\n\n<p>Desde la <em>\u00faltima fila, <\/em>para i = <strong>n-1<\/strong>, n-2, ...<\/p>\n\n\n\n<p>Y las columnas <strong>j<\/strong>&nbsp;luego de la diagonal<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> x_i = \\Bigg( b_i-\\sum_{j=i+1}^{n} a_{ij} x_{j} \\Bigg) \\frac{1}{a_{ii}} <\/span>\n\n\n\n<p>Para una fila <strong>i<\/strong>, el vector B[i] representa el valor de la constante en la fila <strong>i<\/strong> de la matriz aumentada, A[i,j] se refiere los valores de los coeficientes de la ecuaci\u00f3n, de los que se encuentran a la derecha de la diagonal.<\/p>\n\n\n\n<p>Las operaciones se realizan de abajo hacia arriba desde la \u00faltima fila. Para el ejercicio presentado se tiene que:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>ultfila<\/strong> = n-1 = 3-1 = 2<br><strong>ultcolumna<\/strong> = m-1 = 4-1 = 3<\/p>\n\n\n\n<p>la matriz a procesar es la resultante de <em>eliminaci\u00f3n hacia adelante<\/em>:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\left( \\begin{array}{rrr|r} 5 &amp; 4 &amp; 3 &amp; 56.3 \\\\ 0 &amp; 3.4 &amp; 6.8 &amp; 70.38 \\\\ 0 &amp; 0 &amp; 5 &amp; 40.5 \\end{array} \\right)<\/span>\n\n\n\n<pre class=\"wp-block-code\"><code>Elimina hacia adelante\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; <span style=\"color: #ff0000\">0.<\/span>    3.4   6.8  70.38]\n &#091; <span style=\"color: #ff0000\">0.<\/span>    <span style=\"color: #ff0000\">0.<\/span>    5.   40.5 ]]<\/code><\/pre>\n\n\n\n<p><strong>iteraci\u00f3n 1, fila 3, i=2<\/strong><\/p>\n\n\n\n<p>Empieza desde la \u00faltima fila de la matriz,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091; 0. 0. 5. 40.5 ]<\/code><\/pre>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">0 x_1 + 0 x_2 + 5 x_3 = 40.5<\/span>\n\n\n\n<p>El valor de la constante es B[i] = 40.5 y no existen elementos hacia la derecha de la diagonal. No se usa la ultima columna que es de las constantes:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">5 x_3 = 40.5<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">x_3 = \\frac{40.5}{5} = 8.1<\/span>\n\n\n\n<p>la respuesta se interpreta en el vector X como:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X= [ x_1 , x_2 , x_3] = [ 0 , 0 , 8.1 ] <\/span>\n\n\n\n<p><strong>iteraci\u00f3n 2, fila 2,&nbsp; i = 1<\/strong><\/p>\n\n\n\n<p>De la pen\u00faltima fila se obtiene la ecuaci\u00f3n para encontrar x<sub>2<\/sub><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091; 0. 3.4 6.8 70.38]<\/code><\/pre>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">0x_1 + 3.4 x_2 +6.8 x_3 = 70.38<\/span>\n\n\n\n<p>se observa que B[i] = 70.38 y&nbsp; a la derecha de a diagonal se tiene un solo valor de 6.8.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">3.4 x_2 = 70.38 -6.8 x_3 <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">3.4 x_2 = 70.38 -6.8 (8.1)<\/span>\n\n\n\n<p>Usa el valor de x<sub>3<\/sub> encontrado en la iteraci\u00f3n anterior.&nbsp;Muestra la ecuaci\u00f3n para la segunda fila.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">x_2 = \\frac{70.38 -6.8 (8.1)}{3.4} = 4.5<\/span>\n\n\n\n<p>la respuesta se interpreta en el vector X como:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X= [ 0 , 4.5 , 8.1 ] <\/span>\n\n\n\n<p><strong>iteraci\u00f3n 3 fila 1, i=0<\/strong><\/p>\n\n\n\n<p>Se sigue el mismo proceso para la siguiente inc\u00f3gnita x<sub>1<\/sub> que se interpreta como<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091; 5. 4. 3. 56.3 ]<\/code><\/pre>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">5x_1 + 4 x_2 + 3x_3 = 56.3<\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">5x_1 = 56.3 - ( 4 x_2 + 3x_3) <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\">x_1 = \\frac{56.3 - ( 4 (4.5) + 3(8.1))}{5} = 2.8<\/span>\n\n\n\n<p>Se encuentra que la soluci\u00f3n al sistema de ecuaciones es:<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> X= [ 2.8, 4.5 , 8.1 ] <\/span>\n\n\n\n<pre class=\"wp-block-code\"><code>M\u00e9todo de Gauss\nsoluci\u00f3n X: \n&#091;2.8 4.5 8.1]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Verificar respuesta<\/h3>\n\n\n\n<p>Para verificar que el resultado es correcto, se usa el producto punto entre la matriz a y el vector resultado X. La operaci\u00f3n A.X = B debe dar el vector B.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; A\narray(&#091;&#091;4., 2., 5.],\n       &#091;2., 5., 8.],\n       &#091;5., 4., 3.]])\n&gt;&gt;&gt; X\narray(&#091;2.8, 4.5, 8.1])\n&gt;&gt;&gt; np.dot(A,X)\narray(&#091;60.7, 92.9, 56.3])<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Gauss<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaadelante\">Elimina adelante<\/a><\/p>\n\n\n\n<p><a href=\"#sustituyeatras\">Sustituci\u00f3n atr\u00e1s<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcion\">funci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"algoritmo\">5. Algoritmo con Python<\/h2>\n\n\n\n<p>El algoritmo para el M\u00e9todo de Gauss, reutiliza las instrucciones para matriz aumentada y <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/pivoteo-parcial-filas\/\" data-type=\"post\" data-id=\"1226\">pivoteo parcial por filas<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"M\u00e9todo de Gauss con pivoteo en Python\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/PNss-SRLe-I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>Recordar<\/strong>: Asegurar que los arreglos sean de tipo n\u00famero Real (float), para que no se considere el vector como entero y realice operaciones entre enteros, generando errores por truncamiento.<\/p>\n\n\n\n<p>El resultado del algoritmo muestra los siguientes resultados:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Pivoteo parcial por filas AB: ----\n&#091;&#091; 5.   4.   3.  56.3]\n &#091; 2.   5.   8.  92.9]\n &#091; 4.   2.   5.  60.7]]\nEliminaci\u00f3n hacia adelante: ------\ni: 0 k: 1 factor: 0.4\ni: 0 k: 2 factor: 0.8\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; 0.    3.4   6.8  70.38]\n &#091; 0.   -1.2   2.6  15.66]]\ni: 1 k: 2 factor: -0.3529411764705883\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; 0.    3.4   6.8  70.38]\n &#091; 0.    0.    5.   40.5 ]]\nM\u00e9todo de Gauss\nsoluci\u00f3n X: \n&#091;2.8 4.5 8.1]<\/code><\/pre>\n\n\n\n<p>La parte nueva a desarrollar corresponde al procedimiento de \"eliminaci\u00f3n hacia adelante\" y el procedimiento de \"sustituci\u00f3n hacia atr\u00e1s\".<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# M\u00e9todo de Gauss\n# Sistemas de Ecuaciones A.X=B\nimport numpy as np\n\n# INGRESO\n# NOTA: Para AB, se ha usado pivoteo parcial por filas\nA = &#x5B;&#x5B;4,2,5],\n     &#x5B;2,5,8],\n     &#x5B;5,4,3]]\nB = &#x5B;60.70, 92.90, 56.30]\n\n# PROCEDIMIENTO\n# Matrices como arreglo, numeros reales\nA = np.array(A,dtype=float)\nB = np.array(B,dtype=float)\n\n# Matriz aumentada AB\nB_columna = np.transpose(&#x5B;B])\nAB  = np.concatenate((A,B_columna),axis=1)\n\n# Pivoteo parcial por filas\ntamano = np.shape(AB)\nn = tamano&#x5B;0]\nm = tamano&#x5B;1]\n\n# Para cada fila en AB\nfor i in range(0,n-1,1):\n    # columna desde diagonal i en adelante\n    columna = abs(AB&#x5B;i:,i])\n    dondemax = np.argmax(columna)\n    \n    if (dondemax !=0): # NO en diagonal\n        # intercambia filas\n        temporal = np.copy(AB&#x5B;i,:])\n        AB&#x5B;i,:]  = AB&#x5B;dondemax+i,:]\n        AB&#x5B;dondemax+i,:] = temporal\nprint('Pivoteo parcial por filas AB: ----')\nprint(AB)\n\n# Eliminaci\u00f3n hacia adelante\nprint('Eliminaci\u00f3n hacia adelante: ------')\nfor i in range(0,n-1,1): # una fila\n    pivote   = AB&#x5B;i,i]\n    adelante = i + 1\n    for k in range(adelante,n,1): # diagonal adelante\n        factor  = AB&#x5B;k,i]\/pivote\n        AB&#x5B;k,:] = AB&#x5B;k,:] - AB&#x5B;i,:]*factor\n\n        print('i:',i,'k:',k, 'factor:',factor)\n    print(AB)\n\n# Sustituci\u00f3n hacia atr\u00e1s\nultfila = n-1\nultcolumna = m-1\nX = np.zeros(n,dtype=float)\nfor i in range(ultfila,0-1,-1):\n    suma = AB&#x5B;i,ultcolumna]\n    for j in range(i+1,ultcolumna,1):\n        suma = suma - AB&#x5B;i,j]*X&#x5B;j]\n    X&#x5B;i] = suma\/AB&#x5B;i,i]\n\n# SALIDA\nprint('M\u00e9todo de Gauss')\nprint('soluci\u00f3n X: ')\nprint(X)\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p><strong><em>Tarea<\/em><\/strong><\/p>\n\n\n\n<p>Revisar cuando la matriz pivoteada por filas tienen en la <strong>diagonal<\/strong> un <strong>elemento cero<\/strong> o muy cercano a 0, la matriz ser\u00eda singular. El valor considerado como casi cero podr\u00eda ser 1x10<sup>-15<\/sup><\/p>\n\n\n\n<p>A estas alturas, por la cantidad de l\u00edneas de instrucci\u00f3n es recomendable reutilizar bloques de algoritmos usando funciones <code>def-return<\/code>. Por ejemplo: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/pivoteo-parcial-filas\/\" data-type=\"post\" data-id=\"1226\">pivoteo por filas<\/a>, eliminaci\u00f3n hacia adelante, sustituci\u00f3n hacia atr\u00e1s.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Gauss<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaadelante\">Elimina adelante<\/a><\/p>\n\n\n\n<p><a href=\"#sustituyeatras\">Sustituci\u00f3n atr\u00e1s<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcion\">funci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"funcion\">6. Algoritmo como funci\u00f3n de Python<\/h2>\n\n\n\n<p>Se integra la funci\u00f3n <code>pivoteafila()<\/code>, se crean las funciones para los procedimientos&nbsp;<code>gauss_eliminaAdelante()<\/code> y&nbsp;<code>gauss_sustituyeAtras()<\/code>, usando la variable <code>vertabla<\/code> para observar los resultados parciales.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# M\u00e9todo de Gauss\n# Sistemas de Ecuaciones A.X=B\nimport numpy as np\n \ndef gauss_eliminaAdelante(AB,vertabla=False,casicero = 1e-15):\n    ''' Gauss elimina hacia adelante\n    tarea: verificar t\u00e9rminos cero\n    '''\n    tamano = np.shape(AB)\n    n = tamano&#x5B;0]\n    m = tamano&#x5B;1]\n    if vertabla==True:\n        print('Elimina hacia adelante:')\n    for i in range(0,n,1):\n        pivote = AB&#x5B;i,i]\n        adelante = i+1\n        if vertabla==True:\n            print(' fila i:',i,' pivote:', pivote)\n        for k in range(adelante,n,1):\n            if (np.abs(pivote)&gt;=casicero):\n                factor = AB&#x5B;k,i]\/pivote\n                AB&#x5B;k,:] = AB&#x5B;k,:] - factor*AB&#x5B;i,:]\n                for j in range(0,m,1): # casicero revisa\n                    if abs(AB&#x5B;k,j])&lt;casicero:\n                        AB&#x5B;k,j]=0\n                if vertabla==True:\n                    print('  fila k:',k,\n                          ' factor:',factor)\n            else:\n                print('  pivote:', pivote,'en fila:',i,\n                      'genera division para cero')\n        if vertabla==True:\n            print(AB)\n    return(AB)\n \ndef gauss_sustituyeAtras(AB,vertabla=False,casicero = 1e-15):\n    ''' Gauss sustituye hacia atras\n    '''\n    n,m = np.shape(AB)\n    # Sustituci\u00f3n hacia atras\n    if vertabla==True:\n        print('Sustitute hacia atras:')\n    X = np.zeros(n,dtype=float) \n    ultfila = n-1\n    ultcolumna = m-1\n    for i in range(ultfila,0-1,-1):\n        suma = AB&#x5B;i,ultcolumna]   # B&#x5B;i]\n        for j in range(i+1,ultcolumna,1):\n            suma = suma - AB&#x5B;i,j]*X&#x5B;j]\n        X&#x5B;i] = suma\/AB&#x5B;i,i]    # suma\/pivote\n        if vertabla==True:\n            print(' fila i:',i,\n                  '   X&#x5B;'+str(i)+']:',X&#x5B;i])\n    return(X)\n \ndef pivoteafila(A,B,vertabla=False):\n    '''\n    Pivoteo 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,\n                      'intercambiar filas: ',i,\n                      'con', 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;4,2,5],\n     &#x5B;2,5,8],\n     &#x5B;5,4,3]]\nB = &#x5B;60.70,92.90,56.30]\n \n# PROCEDIMIENTO\nAB = pivoteafila(A,B,vertabla=True)\n \nAB = gauss_eliminaAdelante(AB,vertabla=True)\n \nX = gauss_sustituyeAtras(AB,vertabla=True)\n \n# SALIDA\nprint('M\u00e9todo de Gauss')\nprint('soluci\u00f3n X: ')\nprint(X)\n<\/pre><\/div>\n\n\n<p>El resultado para el ejercicio anterior es:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>Matriz aumentada\n&#091;&#091; 4.   2.   5.  60.7]\n &#091; 2.   5.   8.  92.9]\n &#091; 5.   4.   3.  56.3]]\nPivoteo parcial:\n  1 intercambiar filas:  0 con 2\n&#091;&#091; 5.   4.   3.  56.3]\n &#091; 2.   5.   8.  92.9]\n &#091; 4.   2.   5.  60.7]]\nElimina hacia adelante:\n fila i: 0  pivote: 5.0\n  fila k: 1  factor: 0.4\n  fila k: 2  factor: 0.8\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; 0.    3.4   6.8  70.38]\n &#091; 0.   -1.2   2.6  15.66]]\n fila i: 1  pivote: 3.4\n  fila k: 2  factor: -0.3529411764705883\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; 0.    3.4   6.8  70.38]\n &#091; 0.    0.    5.   40.5 ]]\n fila i: 2  pivote: 5.0\n&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; 0.    3.4   6.8  70.38]\n &#091; 0.    0.    5.   40.5 ]]\nSustitute hacia atras:\n fila i: 2    X&#091;2]: 8.100000000000003\n fila i: 1    X&#091;1]: 4.499999999999997\n fila i: 0    X&#091;0]: 2.8\nM\u00e9todo de Gauss\nsoluci\u00f3n X: \n&#091;2.8 4.5 8.1]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><a href=\"#concepto\">Gauss<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaadelante\">Elimina adelante<\/a><\/p>\n\n\n\n<p><a href=\"#sustituyeatras\">Sustituci\u00f3n atr\u00e1s<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmo\">Algoritmo<\/a><\/p>\n\n\n\n<p><a href=\"#funcion\">funci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Gauss Ejercicio Elimina adelante Sustituci\u00f3n atr\u00e1s Algoritmo funci\u00f3n 1. M\u00e9todo de Gauss Referencia: Chapra 9.2 p254, Burden 6.1 p273, Rodr\u00edguez 4.3 p119 El m\u00e9todo de Gauss opera sobre la matriz aumentada y pivoteada por filas, a\u00f1adiendo los procesos: 1.1 Eliminaci\u00f3n hacia adelante Desde la primera fila i ,sobre las filas inferiores k = i+1, i+2, [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-mn-unidades","format":"standard","meta":{"footnotes":""},"categories":[37],"tags":[],"class_list":["post-1212","post","type-post","status-publish","format-standard","hentry","category-mn-u03"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1212","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=1212"}],"version-history":[{"count":10,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1212\/revisions"}],"predecessor-version":[{"id":21552,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1212\/revisions\/21552"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=1212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=1212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=1212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}