{"id":1477,"date":"2017-06-05T09:30:27","date_gmt":"2017-06-05T14:30:27","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/matg1013\/?p=1477"},"modified":"2026-02-11T16:06:28","modified_gmt":"2026-02-11T21:06:28","slug":"metodo-gauss-jordan","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u03\/metodo-gauss-jordan\/","title":{"rendered":"3.4 M\u00e9todo de Gauss-Jordan 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\" data-type=\"internal\" data-id=\"#concepto\">Gauss-Jordan<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaatras\">Elimina 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-Jordan<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>: Chapra 9.7 p277, Burden 9Ed Ex6.1.12 p370, Rodr\u00edguez 4.2 p106<\/p>\n\n\n\n<p>El m\u00e9todo de Gauss-Jordan presenta un procedimiento alterno al de \"sustituci\u00f3n hacia atr\u00e1s\" realizado para el <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/metodo-gauss\/\" data-type=\"post\" data-id=\"1212\">m\u00e9todo de Gauss<\/a>. Luego de obtener&nbsp;la \"matriz triangular superior\", aplica el procedimiento de \"Eliminaci\u00f3n hacia atr\u00e1s\".<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\left( \\begin{array}{rrr|r} a_{0,0} &amp; a_{0,1} &amp; a_{0,2} &amp; b_{0} \\\\ 0 &amp; a_{1,1} &amp; a_{1,2} &amp; b_{1} \\\\ 0 &amp; 0 &amp; a_{2,2} &amp; b_{2} \\end{array} \\right)<\/span>\n\n\n\n<p><strong><em>Eliminaci\u00f3n hacia atr\u00e1s<\/em><\/strong><\/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\/eliminaatras_animado.gif\" alt=\"elimina hacia atr\u00e1s gr\u00e1fico animado\" class=\"wp-image-13416\" \/><\/figure>\n\n\n\n<p>Desde la <em>\u00faltima fila,<br><\/em>para i = <strong>n-1<\/strong>, n-2, ...<br>sobre las filas k = <strong>i-1<\/strong> superiores<\/p>\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>Se mantienen al inicio los procedimientos para:<br>matriz aumentada,<br><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>,<br>eliminaci\u00f3n hacia adelante desarrollados anteriormente.<\/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\" data-type=\"internal\" data-id=\"#concepto\">Gauss-Jordan<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaatras\">Elimina 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<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<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<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>Se contin\u00faa con el ejercicio desarrollado para el <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/metodo-gauss\/\" data-type=\"post\" data-id=\"1212\">m\u00e9todo de Gauss<\/a> desde la \"<strong>matriz triangular superior<\/strong>\",<br>luego de eliminaci\u00f3n hacia adelante:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;&#091; 5.    4.    3.   56.3 ]\n &#091; 0.    3.4   6.8  70.38]\n &#091; 0.    0.    <span style=\"color: #ff0000\">5.<\/span>   40.5 ]]<\/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\" data-type=\"internal\" data-id=\"#concepto\">Gauss-Jordan<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaatras\">Elimina 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=\"eliminaatras\">3. Eliminaci\u00f3n hacia atr\u00e1s<\/h2>\n\n\n\n<p>El procedimiento es semejante al realizado para \"eliminaci\u00f3n hacia adelante\", con la diferencia que <strong>se inicia en la \u00faltima fila<\/strong> hacia la primera.&nbsp;Para el ejercicio presentado se tiene que:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>utlfila = n-1 = 3-1 = 2\nultcolumna = m-1 = 4-1 = 3<\/code><\/pre>\n\n\n\n<p><strong><em>iteraci\u00f3n 1, operaci\u00f3n fila 3 y 2<\/em><\/strong><\/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\/eliminaatras_i2j1.png\" alt=\"elimina hacia atr\u00e1s i2 j1\" class=\"wp-image-13418\" \/><\/figure>\n\n\n\n<p>Se aplica desde la \u00faltima fila <strong>i<\/strong>, para las otras filas <strong>k<\/strong>&nbsp;que se encuentran hacia atr\u00e1s.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>i = ultfila = 2\npivote = AB&#091;2,2] = <span style=\"color: #ff0000\">5<\/span>\nk = i-1 <span style=\"color: #ff0000\"># hacia atr\u00e1s<\/span><\/code><\/pre>\n\n\n\n<p>se realizan las operaciones entre las filas <strong>i<\/strong> y la fila&nbsp;<strong>j<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>         &#091;0.  3.4  6.8    70.38]\n-(6.8\/<span style=\"color: #ff0000\">5<\/span>)*&#091;0.  0.   5.     40.5 ]\n_______________________________\n       = &#091;0.0 3.4  <span style=\"color: #0000ff\">8.8e-16<\/span> 15.3]<\/code><\/pre>\n\n\n\n<p>para reemplazar los valores de la segunda fila en la matriz aumentada<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;&#091;5.0    4.0    3.0      56.3]\n &#091;0.0    3.4    <span style=\"color: #0000ff\">8.8e-16<\/span>  15.3]\n &#091;0.0    0.0    5.0      40.5]]<\/code><\/pre>\n\n\n\n<p>Observe que hay un valor muy peque\u00f1o del orden de <span style=\"color: #0000ff\">8.8x10<sup>-16<\/sup><\/span>, que para las otras magnitudes se puede considerar como <strong>casi cero<\/strong>.<\/p>\n\n\n\n<p><strong><em>iteraci\u00f3n 2, operaci\u00f3n fila 3 y 1<\/em><\/strong><\/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\/eliminaatras_i2j0.png\" alt=\"elimina hacia atr\u00e1s i2 j0\" class=\"wp-image-13419\" \/><\/figure>\n\n\n\n<p>Se calculan los nuevos valores de \u00edndice&nbsp;<strong>k<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>k = k-1 = 2-1 = 1 <span style=\"color: #ff0000\"># hacia atr\u00e1s<\/span><\/code><\/pre>\n\n\n\n<p>se realizan las operaciones entre las filas i y la fila j<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>       &#091;5.0    4.0    3.0    56.3]\n-(3\/<span style=\"color: #ff0000\">5<\/span>)*&#091;0.0    0.0    5.0    40.5]\n__________________________________\n     = &#091;5.0    4.0    <span style=\"color: #0000ff\">0.0<\/span>    32.0]<\/code><\/pre>\n\n\n\n<p>que al actualizar la matriz aumentada se tiene:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;&#091;5.0    4.0    <span style=\"color: #0000ff\">0.0<\/span>      32.0]\n &#091;0.0    3.4    8.8e-16  15.3]\n &#091;0.0    0.0    5.0      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\/eliminaatras_i2j2.png\" alt=\"elimina hacia atr\u00e1s i2 j2\" class=\"wp-image-13420\" \/><\/figure>\n\n\n\n<p>Al haber terminado las filas hacia arriba, <br>se puede as\u00ed determinar el valor de x<sub>3<\/sub> al dividir la fila 3 para el pivote.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;&#091;5.0    4.0    0.0      32.0]\n &#091;0.0    3.4    8.8e-16  15.3]\n &#091;0.0    0.0    <strong>1.0<\/strong>       8.1]]}<\/code><\/pre>\n\n\n\n<p><strong><em>iteraci\u00f3n 3, operaci\u00f3n fila 2 y 1<\/em><\/strong><\/p>\n\n\n\n<p>se actualizan los valores de los \u00edndices:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>i = i-1 = 2-1 = 1\nk = i-1 = 1-1 = 0<\/code><\/pre>\n\n\n\n<p>se pueden realizar operaciones en una sola fila hacia atr\u00e1s, por lo que el resultado hasta ahora es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>         &#091;5.0    4.0    0.0     32.0]\n-(4\/<span style=\"color: #ff0000\">3.4<\/span>)*&#091;0.0    3.4    8.8e-16 15.3]\n__________________________________\n       = &#091;5.0    <strong><span style=\"color: #0000ff\">0.<\/span><span style=\"color: #0000ff\">0<\/span><\/strong>   -1.04e-15 14.0]\n\n&#091;&#091; 5.0    <strong><span style=\"color: #0000ff\">0.0<\/span><\/strong>   -1.04e-15  14.0]\n &#091; 0.0    3.4    8.8e-16   15.3]\n &#091; 0.0    0.0    1.0        8.1]]<\/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\/eliminaatras_i1j1.png\" alt=\"elimina hacia atr\u00e1s i1 j1\" class=\"wp-image-13421\" \/><\/figure>\n\n\n\n<p>Se obtiene el valor de x<sub>2<\/sub>,<br>dividiendo para el valor del pivote,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;&#091; 5.0    0.0   -1.04e-15  14.0]\n &#091; 0.0    <strong>1.0<\/strong>    2.6e-16    4.5]\n &#091; 0.0    0.0    1.0        8.1]]<\/code><\/pre>\n\n\n\n<p><strong><em>iteraci\u00f3n 4, operaci\u00f3n fila 1<\/em><\/strong><\/p>\n\n\n\n<p>No hay otras filas con las que iterar,<br>por lo que solo se obtiene el valor de x<sub>1<\/sub> al dividir para el pivote.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;&#091; <strong>1.0<\/strong>    0.0   -2.08e-15  <strong>2.8<\/strong>]\n &#091; 0.0    <strong>1.0<\/strong>    2.6e-16   <strong>4.5<\/strong>]\n &#091; 0.0    0.0    <strong>1.0<\/strong>       <strong>8.1<\/strong>]]<\/code><\/pre>\n\n\n\n<p>La soluci\u00f3n del sistema de ecuaciones se presenta como una matriz identidad concatenada a un vector columna de constantes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>soluci\u00f3n X: \n&#091;<strong>2.8<\/strong>,<strong> 4.5<\/strong>,<strong> 8.1<\/strong>]<\/code><\/pre>\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<p><strong>Observaci\u00f3n<\/strong>: en la matriz hay unos valores del orden de <span style=\"color: #0000ff\">10<sup>-16<\/sup><\/span>, que corresponden a errores de operaciones en computadora (truncamiento y redondeo) que pueden ser descartados por ser casi cero. Hay que establecer entonces un par\u00e1metro para controlar los casos en que la diferencia entre los ordenes de magnitud son por ejemplo menores a 15 ordenes de magnitud <span style=\"color: #0000ff\">10<sup>-15<\/sup><\/span>. e implementarlo en los algoritmos.<\/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\" data-type=\"internal\" data-id=\"#concepto\">Gauss-Jordan<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaatras\">Elimina 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\">4. Algoritmo en Python<\/h2>\n\n\n\n<p>Esta secci\u00f3n reutiliza el algoritmo desarrollado para el <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/metodo-gauss\/\" data-type=\"post\" data-id=\"1212\">M\u00e9todo de Gauss<\/a>, por lo que los bloques de procedimiento son semejantes hasta <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/metodo-gauss\/#eliminaadelante\" data-type=\"post\" data-id=\"1212\">eliminaci\u00f3n hacia adelante<\/a>. Se a\u00f1ade el procedimiento de <strong>eliminaci\u00f3n hacia atr\u00e1s<\/strong> para completar la soluci\u00f3n al sistema de ecuaciones.<\/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-Jordan con pivoteo en Python\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/PwNvTEfjUP4?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>Instrucciones en Python<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# M\u00e9todo de Gauss-Jordan\n# Sistemas de Ecuaciones A.X=B\nimport numpy as np\n\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\nnp.set_printoptions(precision=4) # 4 decimales en print\ncasicero = 1e-15  # redondear a cero\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# Eliminaci\u00f3n hacia atras\nprint('Eliminaci\u00f3n hacia atras: ------')\nultfila = n-1\nultcolumna = m-1\nfor i in range(ultfila,0-1,-1): # una fila\n    pivote   = AB&#x5B;i,i]\n    print('i:',i,' pivote:',pivote)\n    \n    atras = i - 1\n    for k in range(atras,0-1,-1): # diagonal adelante\n        factor  = AB&#x5B;k,i]\/pivote\n        AB&#x5B;k,:] = AB&#x5B;k,:] - AB&#x5B;i,:]*factor\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        \n        print(' k:',k, 'factor:',factor)\n    print(AB)\n    \n    AB&#x5B;i,:] = AB&#x5B;i,:]\/AB&#x5B;i,i] # diagonal a unos\n    \nprint('AB:')\nprint(AB)\nX = np.copy(AB&#x5B;:,ultcolumna])\n\n# SALIDA\nprint('M\u00e9todo de Gauss-Jordan')\nprint('soluci\u00f3n X: ')\nprint(X)\n<\/pre><\/div>\n\n\n<p>El resultado del algoritmo es:<\/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 ]]\nEliminaci\u00f3n hacia atras: ------\ni: 2  pivote: 5.0\n k: 1 factor: 1.3599999999999999\n k: 0 factor: 0.6\n&#091;&#091; 5.   4.   0.  32. ]\n &#091; 0.   3.4  0.  15.3]\n &#091; 0.   0.   5.  40.5]]\ni: 1  pivote: 3.4\n k: 0 factor: 1.1764705882352942\n&#091;&#091; 5.   0.   0.  14. ]\n &#091; 0.   3.4  0.  15.3]\n &#091; 0.   0.   1.   8.1]]\ni: 0  pivote: 5.0\n&#091;&#091; 5.   0.   0.  14. ]\n &#091; 0.   1.   0.   4.5]\n &#091; 0.   0.   1.   8.1]]\nAB:\n&#091;&#091;1.  0.  0.  2.8]\n &#091;0.  1.  0.  4.5]\n &#091;0.  0.  1.  8.1]]\nM\u00e9todo de Gauss-Jordan\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\" data-type=\"internal\" data-id=\"#concepto\">Gauss-Jordan<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaatras\">Elimina 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\">5. Algoritmo como funci\u00f3n en Python<\/h2>\n\n\n\n<p>El algoritmo considera que valores con magnitud menores a \"<code>casicero<\/code>\" se redondean a 0. Se aplica recorriendo la fila de referencia <strong>k<\/strong>, por cada elemento j.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; notranslate\" title=\"\">\n# redondeo a cero\nfor j in range(0,m,1): \n    if np.abs(AB&#x5B;k,j])&lt;=casicero:\n        AB&#x5B;k,j]=0\n<\/pre><\/div>\n\n\n<p>Adicionalmente se a\u00f1ade el par\u00e1metro \"<code>inversa<\/code>\", que se usa para encontrar&nbsp;A<sup>-1<\/sup> como se indica en Matriz Inversa.<\/p>\n\n\n\n<p>Con el algoritmo se obtiene el siguiente resultado:<\/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 y 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 ]]\nElimina hacia Atr\u00e1s:\n fila i: 2  pivote: 5.0\n  fila k: 1  factor: 1.3599999999999999\n  fila k: 0  factor: 0.6\n&#091;&#091; 5.   4.   0.  32. ]\n &#091; 0.   3.4  0.  15.3]\n &#091; 0.   0.   1.   8.1]]\n fila i: 1  pivote: 3.4\n  fila k: 0  factor: 1.1764705882352942\n&#091;&#091; 5.   0.   0.  14. ]\n &#091; 0.   1.   0.   4.5]\n &#091; 0.   0.   1.   8.1]]\n fila i: 0  pivote: 5.0\n&#091;&#091;1.  0.  0.  2.8]\n &#091;0.  1.  0.  4.5]\n &#091;0.  0.  1.  8.1]]\nsoluci\u00f3n X: \n&#091;2.8 4.5 8.1]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Instrucciones en Python<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# M\u00e9todo de Gauss-Jordan\n# Sistemas de Ecuaciones A.X=B\nimport numpy as np\n\ndef gauss_eliminaAtras(AB, vertabla=False,\n                       inversa=False,\n                       casicero = 1e-15):\n    ''' Gauss-Jordan elimina hacia atr\u00e1s\n    Requiere la matriz triangular inferior\n    Tarea: Verificar que sea triangular inferior\n    '''\n    tamano = np.shape(AB)\n    n = tamano&#x5B;0]\n    m = tamano&#x5B;1]\n    \n    ultfila = n-1\n    ultcolumna = m-1\n    if vertabla==True:\n        print('Elimina hacia Atr\u00e1s:')\n        \n    for i in range(ultfila,0-1,-1):\n        pivote = AB&#x5B;i,i]\n        atras = i-1  # arriba de la fila i\n        if vertabla==True:\n            print(' fila i:',i,' pivote:', pivote)\n            \n        for k in range(atras,0-1,-1):\n            if np.abs(AB&#x5B;k,i])&gt;=casicero:\n                factor = AB&#x5B;k,i]\/pivote\n                AB&#x5B;k,:] = AB&#x5B;k,:] - factor*AB&#x5B;i,:]\n                \n                # redondeo a cero\n                for j in range(0,m,1): \n                    if np.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        AB&#x5B;i,:] = AB&#x5B;i,:]\/AB&#x5B;i,i] # diagonal a unos\n        \n        if vertabla==True:\n            print(AB)\n    \n    respuesta = np.copy(AB&#x5B;:,ultcolumna])\n    if inversa==True: # matriz inversa\n        respuesta = np.copy(AB&#x5B;:,n:])\n    return(respuesta)\n\ndef gauss_eliminaAdelante(AB,vertabla=False,\n                          lu=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    respuesta = np.copy(AB)\n    if lu==True: # matriz triangular A=L.U\n        U = AB&#x5B;:,:n-1]\n        respuesta = &#x5B;AB,L,U]\n    return(respuesta)\n\ndef pivoteafila(A,B,vertabla=False):\n    '''\n    Pivotea parcial por filas\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 ------------------------\n# INGRESO\nA = &#x5B;&#x5B;4,2,5],\n     &#x5B;2,5,8],\n     &#x5B;5,4,3]]\n\nB = &#x5B;60.70,92.90,56.30]\n\n# PROCEDIMIENTO\nnp.set_printoptions(precision=4) # 4 decimales en print\ncasicero = 1e-15  # redondear a cero\n\nAB = pivoteafila(A,B,vertabla=True)\n\nAB = gauss_eliminaAdelante(AB,vertabla=True)\n\nX = gauss_eliminaAtras(AB,vertabla=True)\n\n# SALIDA\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><br><\/strong>implementar caso cuando aparecen ceros en la diagonal para dar respuesta, convertir a funciones cada parte.<\/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\" data-type=\"internal\" data-id=\"#concepto\">Gauss-Jordan<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">Ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#eliminaatras\">Elimina 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-Jordan Ejercicio Elimina atr\u00e1s Algoritmo funci\u00f3n 1. M\u00e9todo de Gauss-Jordan Referencia: Chapra 9.7 p277, Burden 9Ed Ex6.1.12 p370, Rodr\u00edguez 4.2 p106 El m\u00e9todo de Gauss-Jordan presenta un procedimiento alterno al de \"sustituci\u00f3n hacia atr\u00e1s\" realizado para el m\u00e9todo de Gauss. Luego de obtener&nbsp;la \"matriz triangular superior\", aplica el procedimiento de \"Eliminaci\u00f3n hacia atr\u00e1s\". Eliminaci\u00f3n hacia [&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-1477","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\/1477","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=1477"}],"version-history":[{"count":13,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1477\/revisions"}],"predecessor-version":[{"id":21420,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/1477\/revisions\/21420"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=1477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=1477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=1477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}