Autor: Edison Del Rosario

  • 1Eva_IIT2008_T2_MN Distribuidores de productos

    1ra Evaluación II Término 2008-2009. 9/Diciembre/2008. ICM02188 Métodos Numéricos

    Tema 2.  Para mejorar la cadena de distribución de un producto, se desea instalar tres nuevos distribuidores X1, X2, X3 en la parte interna de la región. En las cercanías ya existen otros distribuidores: A, B, C, D, E, F, G del mismo producto.

    grafos de distribuidores de productos

    En el gráfico, el valor de los círculos indican el precio de venta del producto que ofrece cada distribuidor. Las líneas muestran los otros distribuidores que están directamente conectados y el costo del transporte.

    Determine el precio de venta que deben establecer los distribuidores X1, X2 y X3, de tal manera que sean el promedio de los precios de los distribuidores con los que están directamente conectados, incluyendo el precio del transporte.

    a) Plantee un modelo matemático para describir el problema (sistema de ecuaciones lineales)

    b) Encuentre la solución con un método numérico directo

  • 1Eva_IIT2008_T1_MN Bacterias contaminantes

    1ra Evaluación II Término 2008-2009. 9/Diciembre/2008. ICM02188 Métodos Numéricos

    Tema 1. La concentración de bacterias contaminantes c en un lago decrece de acuerdo con la relación:

    c= 70 e^{-1.5t} + 25 e^{-0.075t}

    Se necesita determinar el tiempo para que la concentración de bacterias sea menor o igual a 9.bacterias Lago 01

    a) Encuentre un intervalo en el que exista una raíz de la ecuación

    b) Elija un valor inicial del tiempo tal que el método de Newton-Raphson converja a la solución requerida.

    c) Calcule la solución con el método de Newton-Raphson con una precisión de 0.001


    Referencias: Contaminación del Agua - BrainPOP Español.

  • 1Eva_IIT2008_T3 Bacterias contaminantes

    1ra Evaluación II Término 2008-2009. 9/Diciembre/2008. ICM00158

    Tema 3. La concentración de bacterias contaminantes c en un lago decrece de acuerdo con la relación:

    c= 70 e^{-1.5t} + 25 e^{-0.075t}

    Se necesita determinar el tiempo para que la concentración de bacterias se reduzca a 9 unidades o menos.bacterias Lago 01

    a) Determine un intervalo de existencia de la raíz de la ecuación. (Grafique)

    b) Encuentre un valor de t tal que la convergencia del método de Newton-Raphson este garantizada.

    c) Aproxime la raíz con el método de Newton-Raphson, indicando la cota del error.


    Referencias: Contaminación del Agua - BrainPOP Español.

  • 1Eva_IIT2008_T2 Indice enfriador de viento

    1ra Evaluación II Término 2008-2009. 9/Diciembre/2008. ICM00158

    Tema 2. El índice enfriador del viento I es una función que depende de dos factores: La temperatura real T y la velocidad del viento v; es decir I=f(T,v).

    La siguiente tabla registra los valores de I recogidos en cierto momento por un investigador en los páramos del Cotopaxi. Por ejemplo, cuando la temperatura real es de 5 grados Celcius y el viento de 20 Km/hora, el índice I = f(5, 20) =1 , que quiere decir que la temperatura que se siente en estas condiciones es de 1 grado, aunque no sea la temperatura real.

    T\v  5 10 15 20
    5 4 2 2 1
    0 -2 -3 -4 -5
    -5 -8 -10 -11 -12

    Usando interpolación polinomial, estimar la temperatura que sentirá una persona situada en un lugar en el que la temperatura real es de 2 grados y la velocidad del viento es 25 Km/hora.

  • 1Eva_IIT2008_T1 Distribuidores de productos

    1ra Evaluación II Término 2008-2009. 9/Diciembre/2008. ICM00158

    Tema 1.  En una región se desean instalar tres nuevos distribuidores X1, X2, X3 de un producto. En las cercanías ya existen otros distribuidores: A, B, C, D, E, F, G del mismo producto.

    Distribuidores Producto 01

    En el gráfico, los círculos indican el precio de venta del producto que ofrece cada distribuidor. Las líneas con los que otros distribuidores están directamente conectados y el costo del transporte.

    Determine el precio de venta que deben establecer los distribuidores X1, X2 y X3, de tal manera que sean el promedio de los precios de los distribuidores con los que están directamente conectados, incluyendo el precio del transporte.

    a) Plantee un modelo matemático para describir el problema (sistema de ecuaciones lineales)

    b) Encuentre la solución con el método de Gauss-Jordan

    c) Determine si el método iterativo de Jacobi converge. Realice tres iteraciones y encuentre la norma del error. Vector inicial. vector cero.

  • 1Eva_IT2008_T3 Polinomio de Lagrange

    1ra Evaluación I Término 2008-2009. 8/Julio/2008. ICM00158

    Tema 3. Dada la tabla:

    t v(t)
    3 65.041
    5 64.385
    7 y
    9 63.210
    x 62.576
    13 61.993
    15 61.417

    Aproximar los valores de x,y con ayuda de polinomios de Lagrange

  • 1Eva_IT2008_T2 Temperatura en placa

    1ra Evaluación I Término 2008-2009. 8/Julio/2008. ICM00158

    Tema 2. La temperatura de una placa está dada por la temperatura de sus bordes, en cada nodo de la malla formada, la temperatura es igual al promedio de los nodos contíguos (arriba, abajo, derecha e izquierda) como se indica en el diagrama adjunto.Placa Temp 01

    a) Plantee el sistema de ecuaciones asociado para hallar las temperaturas en los nodos interiores de la malla.

    b) Utilice el método de eliminación de Gauss con una aritmética de 4 dígitos para aproximar la solución del sistema en el literal a.

  • 1Eva_IT2008_T1 Raíz de función(f)

    1ra Evaluación I Término 2008-2009. 8/Julio/2008. ICM00158

    Tema 1. Dada la fórmula:

    \Big(\sqrt{f}\Big) ln \Bigg( R\frac{\sqrt{f}}{2.51} \Bigg) - 1.1513 = 0

    Determinar el valor de f con un aproximación del orden de 10-5 para R=5000


    busqueda de raíces

  • s1Eva_IIT2008_T3_MN Ganancia en inversión

    Ejercicio: 1Eva_IIT2008_T3_MN Ganancia en inversión

    Se dispone de los datos (x, f(x)), en donde x es un valor de inversión y f(x) es un valor de ganancia, ambos en miles de dólares.

    xi = [3.2 , 3.8 , 4.2 , 4.5 ]
    fi = [5.12, 6.42, 7.25, 6.85]

    Los datos se usan junto al modelo propuesto:

    f(x) = a_1 x^3 + a_2 x^2 + a_3 x + a_4

    generando las expresiones del sistema de ecuaciones:

    a_1 (3.2)^3 + a_2 (3.2)^2 + a_3 (3.2) + a_4 = 5.12 a_1 (3.8)^3 + a_2 (3.8)^2 + a_3 (3.8) + a_4 = 6.42 a_1 (4.2)^3 + a_2 (4.2)^2 + a_3 (4.2) + a_4 = 7.25 a_1 (4.5)^3 + a_2 (4.5)^2 + a_3 (4.5) + a_4 = 6.85

    Se convierte a la forma Ax=B
    \begin{bmatrix} (3.2)^3 && (3.2)^2 && (3.2) && 1 \\ (3.8)^3 && (3.8)^2 && (3.8) && 1 \\ (4.2)^3 && (4.2)^2 && (4.2) && 1 \\ (4.5)^3 && (4.5)^2 && (4.5) && 1 \end{bmatrix} . \begin{bmatrix} a_1 \\ a_2 \\ a_3 \\ a_4 \end{bmatrix} = \begin{bmatrix} 5.12 \\ 6.42 \\ 7.25 \\6.85 \end{bmatrix}

    Se crea la matriz aumentada

    \begin{bmatrix} (3.2)^3 && (3.2)^2 && (3.2) && 1 && 5.12\\ (3.8)^3 && (3.8)^2 && (3.8) && 1 && 6.42 \\ (4.2)^3 && (4.2)^2 && (4.2) && 1 && 7.25 \\ (4.5)^3 && (4.5)^2 && (4.5) && 1 && 6.85 \end{bmatrix}

    Se pivotea por filas:

    \begin{bmatrix} (4.5)^3 && (4.5)^2 && (4.5) && 1 && 6.85 \\ (4.2)^3 && (4.2)^2 && (4.2) && 1 && 7.25 \\ (3.8)^3 && (3.8)^2 && (3.8) && 1 && 6.42 \\ (3.2)^3 && (3.2)^2 && (3.2) && 1 && 5.12 \end{bmatrix}

    Como se pide un método directo, se inicia con el algoritmo de eliminación hacia adelante con factor para cada fila a partir de la diagonal.

    \begin{bmatrix} (4.5)^3 && (4.5)^2 && (4.5) \\ (4.2)^3 - (4.5)^3\frac{(4.2)^3}{(4.5)^3} && (4.2)^2 - (4.5)^2\frac{(4.2)^3}{(4.5)^3} && (4.2) - (4.5)\frac{(4.2)^3}{(4.5)^3} \\ (3.8)^3 - (4.5)^3\frac{(3.8)^3}{(4.5)^3} && (3.8)^2 - (4.5)^2\frac{(3.8)^3}{(4.5)^3} && (3.8) -(4.5)\frac{(3.8)^3}{(4.5)^3} \\ (3.2)^3 - (4.5)^3\frac{(3.2)^3}{(4.5)^3} && (3.2)^2 -(4.5)^2\frac{(3.2)^3}{(4.5)^3} && (3.2) - (4.5)\frac{(3.2)^3}{(4.5)^3} \end{bmatrix}

    continua a la derecha de la matriz:

    \begin{bmatrix} 1 && 6.85 \\ 1 - 1\frac{(4.2)^3}{(4.5)^3} && 7.25 - 6.85\frac{(4.2)^3}{(4.5)^3} \\ 1 -1\frac{(3.8)^3}{(4.5)^3} && 6.42 - 6.85\frac{(3.8)^3}{(4.5)^3}\\1 -1\frac{(3.2)^3}{(4.5)^3} && 5.12-6.85\frac{(3.2)^3}{(4.5)^3} \end{bmatrix}
    Pivoteo parcial por filas AB: ----
    [[91.125 20.25   4.5    1.     6.85 ]
     [74.088 17.64   4.2    1.     7.25 ]
     [54.872 14.44   3.8    1.     6.42 ]
     [32.768 10.24   3.2    1.     5.12 ]]
    Eliminación hacia adelante: ------
    i: 0 k: 1 factor: 0.8130370370370371
    i: 0 k: 2 factor: 0.6021618655692729
    i: 0 k: 3 factor: 0.35959396433470514
    [[91.125  20.25    4.5     1.      6.85  ]
     [ 0.      1.176   0.5413  0.187   1.6807]
     [ 0.      2.2462  1.0903  0.3978  2.2952]
     [ 0.      2.9582  1.5818  0.6404  2.6568]]
    i: 1 k: 2 factor: 1.9100529100529142
    i: 1 k: 3 factor: 2.5154950869236625
    [[ 9.1125e+01  2.0250e+01  4.5000e+00  1.0000e+00  6.8500e+00]
     [ 0.0000e+00  1.1760e+00  5.4133e-01  1.8696e-01  1.6807e+00]
     [ 0.0000e+00  0.0000e+00  5.6296e-02  4.0729e-02 -9.1503e-01]
     [ 0.0000e+00  0.0000e+00  2.2011e-01  1.7010e-01 -1.5710e+00]]
    i: 2 k: 3 factor: 3.9097744360903106
    [[ 9.1125e+01  2.0250e+01  4.5000e+00  1.0000e+00  6.8500e+00]
     [ 0.0000e+00  1.1760e+00  5.4133e-01  1.8696e-01  1.6807e+00]
     [ 0.0000e+00  0.0000e+00  5.6296e-02  4.0729e-02 -9.1503e-01]
     [ 0.0000e+00  0.0000e+00  0.0000e+00  1.0860e-02  2.0065e+00]]
    Eliminación hacia atras: ------
    i: 3  pivote: 0.010860484544693044
     k: 2 factor: 3.7501994302000807
     k: 1 factor: 17.214974358977564
     k: 0 factor: 92.07692307694026
    [[ 9.1125e+01  2.0250e+01  4.5000e+00  0.0000e+00 -1.7791e+02]
     [ 0.0000e+00  1.1760e+00  5.4133e-01  0.0000e+00 -3.2862e+01]
     [ 0.0000e+00  0.0000e+00  5.6296e-02  0.0000e+00 -8.4400e+00]
     [ 0.0000e+00  0.0000e+00  0.0000e+00  1.0860e-02  2.0065e+00]]
    i: 2  pivote: 0.05629629629629451
     k: 1 factor: 9.615789473684513
     k: 0 factor: 79.93421052631832
    [[ 9.1125e+01  2.0250e+01  0.0000e+00  0.0000e+00  4.9674e+02]
     [ 0.0000e+00  1.1760e+00  0.0000e+00  0.0000e+00  4.8295e+01]
     [ 0.0000e+00  0.0000e+00  5.6296e-02  0.0000e+00 -8.4400e+00]
     [ 0.0000e+00  0.0000e+00  0.0000e+00  1.0000e+00  1.8476e+02]]
    i: 1  pivote: 1.1759999999999984
     k: 0 factor: 17.219387755102066
    [[  91.125     0.        0.        0.     -334.876 ]
     [   0.        1.176     0.        0.       48.2952]
     [   0.        0.        1.        0.     -149.9209]
     [   0.        0.        0.        1.      184.7569]]
    i: 0  pivote: 91.125
    [[  91.125     0.        0.        0.     -334.876 ]
     [   0.        1.        0.        0.       41.0673]
     [   0.        0.        1.        0.     -149.9209]
     [   0.        0.        0.        1.      184.7569]]
    AB:
    [[   1.        0.        0.        0.       -3.6749]
     [   0.        1.        0.        0.       41.0673]
     [   0.        0.        1.        0.     -149.9209]
     [   0.        0.        0.        1.      184.7569]]
    Método de Gauss-Jordan
    solución X: 
    [  -3.6749   41.0673 -149.9209  184.7569]

    con lo que el polinomio buscado es:

    f(x) = -3.67490842 x^3 + 41.06730769 x^2 + -149.92086081 x + 184.75692308

    que genera la siguiente gráfica:

    para encontrar la cantidad necesaria a invertir y obtener 6.0 de ganancia en f(x):

    6.0 = -3.67490842 x^3 + 41.06730769 x^2 + -149.92086081 x + 184.75692308

    que para usar en el algoritmo se realiza se reordena como g(x) = 0

    -3.67490842 x^3 + 41.06730769 x^2 +

    -149.92086081 x + 184.75692308 - 6.0 = 0
    y se aplica la búsqueda de raices en el rango [a, b] que de la gráfica se estima en [3.2, 3.8]

    La ejecución del algoritmo de búsqueda queda como tarea.


    Algoritmo en python para obtener la gráfica y respuesta a la matriz:

    # Método de Gauss-Jordan
    # Sistemas de Ecuaciones A.X=B
    import numpy as np
    
    # INGRESO
    xi = [3.2 , 3.8 , 4.2 , 4.5 ]
    fi = [5.12, 6.42, 7.25, 6.85]
    
    A = [[4.5**3 , 4.5**2 , 4.5 , 1],
         [4.2**3 , 4.2**2 , 4.2 , 1],
         [3.8**3 , 3.8**2 , 3.8 , 1],
         [3.2**3 , 3.2**2 , 3.2 , 1]]
    
    B = [6.85,7.25,6.42,5.12]
    
    # PROCEDIMIENTO
    np.set_printoptions(precision=4)
    casicero = 1e-15
    # Matrices como arreglo, numeros reales
    A = np.array(A,dtype=float)
    B = np.array(B,dtype=float)
    
    # Matriz aumentada AB
    B_columna = np.transpose([B])
    AB  = np.concatenate((A,B_columna),axis=1)
    
    # Pivoteo parcial por filas
    tamano = np.shape(AB)
    n = tamano[0]
    m = tamano[1]
    
    # Para cada fila en AB
    for i in range(0,n-1,1):
        # columna desde diagonal i en adelante
        columna = abs(AB[i:,i])
        dondemax = np.argmax(columna)
        
        if (dondemax !=0): # NO en diagonal
            # intercambia filas
            temporal = np.copy(AB[i,:])
            AB[i,:]  = AB[dondemax+i,:]
            AB[dondemax+i,:] = temporal
    print('Pivoteo parcial por filas AB: ----')
    print(AB)
    
    # Eliminación hacia adelante
    print('Eliminación hacia adelante: ------')
    for i in range(0,n-1,1): # una fila
        pivote   = AB[i,i]
        adelante = i + 1
        for k in range(adelante,n,1): # diagonal adelante
            factor  = AB[k,i]/pivote
            AB[k,:] = AB[k,:] - AB[i,:]*factor
    
            print('i:',i,'k:',k, 'factor:',factor)
        print(AB)
    
    # Eliminación hacia atras
    print('Eliminación hacia atras: ------')
    ultfila = n-1
    ultcolumna = m-1
    for i in range(ultfila,0-1,-1): # una fila
        pivote   = AB[i,i]
        print('i:',i,' pivote:',pivote)
        
        atras = i - 1
        for k in range(atras,0-1,-1): # diagonal adelante
            factor  = AB[k,i]/pivote
            AB[k,:] = AB[k,:] - AB[i,:]*factor
            for j in range(0,m,1): # casicero revisa
                if abs(AB[k,j])<casicero:
                    AB[k,j]=0
    
            print(' k:',k, 'factor:',factor)
        print(AB)
        
        AB[i,:] = AB[i,:]/AB[i,i] # diagonal a unos
        
    print('AB:')
    print(AB)
    X = np.copy(AB[:,ultcolumna])
    
    # SALIDA
    print('Método de Gauss-Jordan')
    print('solución X: ')
    print(X)
    
    # Revisa polinomio
    import matplotlib.pyplot as plt
    a = np.min(xi)
    b = np.max(xi)
    muestras = 21
    
    px = lambda x: X[0]*x**3 + X[1]*x**2 +X[2]*x + X[3]
    xk = np.linspace(a,b,muestras)
    pxk = px(xk)
    
    # gráfica
    plt.plot(xk,pxk)
    plt.plot(xi,fi,'ro')
    plt.show()
    
  • s1Eva_IIT2008_T1 Distribuidores de productos

    Ejercicio: 1Eva_IIT2008_T1 Distribuidores de productos

    literal a

    Siguiendo las instrucciones del enunciado, el promedio de precios del nodo A, se conforma de los precios en los nodos aledaños menos el costo de transporte.

    precio en X1 para A = precio en nodoA - costo de transporteA

    siguiendo el mismo procedimiento,

    precio en X1 para A: (3.1-0.2)
    precio de X1 para B: (2.8-0.3)
    precio de X1 para C: (2.7-0.4)
    precio de X1 para X2: (X2-0.1)
    precio de X1 para X3: (X3-0.5)

    x_1 = \frac{1}{5} \Big[ (3.1-0.2)+(2.8-0.3)+(2.7-0.4)+ +(x_2-0.1)+(x_3-0.5)\Big] x_1 = \frac{1}{5} \Big[ 2.9+2.5 +2.3+x_2+x_3-0.6\Big] x_1 = \frac{1}{5} (7.1+x_2+x_3) 5x_1 = 7.1+x_2+x_3 5x_1-x_2-x_3 = 7.1

    Se continua con el mismo proceso para los siguientes nodos:

    x_2 = \frac{1}{4} \Big[ (3.2-0.5)+(3.4-0.3) +(x_1-0.1)+(x_3-0.2)\Big] 4x_2 = (3.2-0.5)+(3.4-0.3) +(x_1-0.1)+(x_3-0.2) 4x_2 = 2.7+3.1 +x_1+x_3-0.3 -x_1+4x_2-x_3 = 5.5

    Para X3

    x_3 = \frac{1}{4} \Big[ (3.3-0.3)+(2.9-0.2) +(x_1-0.5)+(x_2-0.2)\Big] 4x_3 = 3.0+2.7+x_1+x_2-0.7 4x_3 = 5+x_1+x_2 -x_1-x_2+4x_3= 5

    El sistema de ecuaciones se convierte en:

    \begin{cases} 5x_1-x_2-x_3 = 7.1 \\ -x_1+4x_2-x_3 = 5.5 \\-x_1-x_2+4x_3= 5 \end{cases}

    Para resolver se cambia a la forma Ax=B

    \begin{bmatrix} 5 && -1 && -1 \\ -1 && 4 && -1 \\ -1 && -1 && 4 \end{bmatrix} . \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} 7.1 \\ 5.5 \\5 \end{bmatrix}

    En los métodos directos se usa la forma de matriz aumentada

    \begin{bmatrix} 5 && -1 && -1 && 7.1 \\ -1 && 4 && -1 && 5.5 \\ -1 && -1 && 4 && 5 \end{bmatrix}

    pivoteo: no es necesario, pues la matriz ya está ordenada de forma diagonalmente dominante.

    Eliminación hacia adelante

    i=0, f=0

    \begin{bmatrix} 5 && -1 && -1 && 7.1 \\ -1-5\big(\frac{-1}{5}\big) && 4 -(-1)\big(\frac{-1}{5}\big) && -1 -(-1)\big(\frac{-1}{5}\big) && 5.5-7.1\big(\frac{-1}{5}\big) \\ -1-5\big(\frac{-1}{5}\big) && -1-(-1)1\big(\frac{-1}{5}\big) && 4-(-1)\big(\frac{-1}{5}\big) && 5-7.1\big(\frac{-1}{5}\big) \end{bmatrix} \begin{bmatrix} 5 && -1 && -1 && 7.1 \\ 0 && 3.8 && -1.2 && 6.92 \\ 0 && -1.2 && 3.8 && 6.42 \end{bmatrix}

    Eliminación hacia adelante para i = 1, j=1

    Elimina hacia adelante
    [[ 5.         -1.         -1.          7.1       ]
     [ 0.          3.8        -1.2         6.92      ]
     [ 0.          0.          3.42105263  8.60526316]]
    

    Eliminación hacia atrás, continuando el desarrollo de forma semejante a los pasos anteriores se obtiene:

    Elimina hacia atrás
    [[ 1.         -0.         -0.          2.44615385]
     [ 0.          1.         -0.          2.61538462]
     [ 0.          0.          1.          2.51538462]]
    el vector solución X es:
    [[2.44615385]
     [2.61538462]
     [2.51538462]]
    verificar que A.X = B
    [[7.1]
     [5.5]
     [5. ]]
    

    literal b

    Para el literal b se usa como referencia el número de condición:

    >>> np.linalg.cond(A)
    2.5274158815808474
    

    El número de condición es cercano a 1, dado que la matriz A es diagonalmente dominante pues los valores mayores de la fila se encuentran en la diagonal. Como el número de condición es cercano a 1 el sistema converge usando métodos iterativos.

    La selección del vector inicial para las iteraciones siguiendo el enunciado del problema, se evita el vector cero dado que el precio de un producto para una fabrica no puede ser cero. Se observa los valores de los precios, y se encuentra que el rango de existencia en los nodos es [ 2.7, 3.4] que restando el valor de transporte podrían ser un valor menor a 2.7. Por lo que un buen vector inicial será [2,2,2]


    literal c

    Se plantean las ecuaciones para el método de Jacobi a partir del sistema de ecuaciones, a partir del pivoteo por filas:

    \begin{cases} 5x_1-x_2-x_3 = 7.1 \\ -x_1+4x_2-x_3 = 5.5 \\-x_1-x_2+4x_3= 5 \end{cases} x_1 = \frac{7.1 +x_2 + x_3}{5} x_2 = \frac{ 5.5 +x_1 + x_3}{4} x_3 = \frac{5 +x_1 + x_2}{4}

    Si consideramos que el costo mínimo podría ser 2, el precio debería ser mayor x0 = [2,2,2]

    itera =  0

    x_1 = \frac{7.1 +(2) + (2)}{5} = 2.22 x_2 = \frac{ 5.5 +(2) + (2)}{4} = 2.375 x_3 = \frac{5 +(2) + (2)}{4} =2.25 errado = max|[2.22-2, 2.375-2, 2.25-2]| = max |[0.22, 0.375, 0.25]| = 0.375 X_1 = [2.22, 2.375, 2.25]|

    itera = 1

    x_1 = \frac{7.1 +(2.375) + (2.25)}{5} = 2.345 x_2 = \frac{ 5.5 +(2.22) + (2.25)}{4} = 2.4925 x_3 = \frac{5 +(2.22) + (2.375)}{4} =2.39875 errado = max|[2.345-2.22, 2.4925-2.375, 2.39875 - 2.25]| = 0.14874999999999972 X_2 = [2.345, 2.4925, 2.39875]

    itera = 2

    x_1 = \frac{7.1 +(2.4925) + (2.39875)}{5} = 2.39825 x_2 = \frac{ 5.5 +(2.345) + (2.39875)}{4} = 2.5609375 x_3 = \frac{5 +(2.345) + (2.4925)}{4} = 2.459375 errado = max|[2.39825 - 2.345, 2.5609375- 2.4925, 2.459375 - 2.39875]| = 0.06843749999999993 X_3 = [2.39825, 2.5609375, 2.459375 ]

    El error disminuye entre iteraciones, por lo que el método converge.

    Los datos de las iteraciones usando el algoritmo son:

    Matriz aumentada
    [[ 5.  -1.  -1.   7.1]
     [-1.   4.  -1.   5.5]
     [-1.  -1.   4.   5. ]]
    Pivoteo parcial:
      Pivoteo por filas NO requerido
    itera,[X],errado
    0 [2. 2. 2.] 1.0
    1 [2.22  2.375 2.25 ] 0.375
    2 [2.345   2.4925  2.39875] 0.14874999999999972
    3 [2.39825   2.5609375 2.459375 ] 0.06843749999999993
    4 [2.4240625  2.58940625 2.48979687] 0.030421875000000043
    5 [2.43584062 2.60346484 2.50336719] 0.014058593750000181
    6 [2.44136641 2.60980195 2.50982637] 0.006459179687499983
    7 [2.44392566 2.61279819 2.51279209] 0.0029962402343750583
    8 [2.44511806 2.61417944 2.51418096] 0.001388874511718985
    9 [2.44567208 2.61482476 2.51482437] 0.0006453167724607134
    10 [2.44592983 2.61512411 2.51512421] 0.00029983517456066977
    11 [2.44604966 2.61526351 2.51526348] 0.0001393951034542873
    12 [2.4461054  2.61532829 2.51532829] 6.480845146183967e-05
    numero de condición: 2.5274158815808474
    respuesta con Jacobi
    [2.4461054 2.61532829 2.51532829]
    

    Algoritmo en Python

    # 1Eva_IIT2008_T1 Distribuidores de productos
    # Método de Jacobi
    import numpy as np
    
    def jacobi(A,B,tolera,X0,iteramax=100, vertabla=False):
        ''' Método de Jacobi, tolerancia, vector inicial X0
            para mostrar iteraciones: vertabla=True
        '''
        A = np.array(A, dtype=float)
        B = np.array(B, dtype=float)
        X0 = np.array(X0, dtype=float)
        tamano = np.shape(A)
        n = tamano[0]
        m = tamano[1]
        diferencia = np.ones(n, dtype=float)
        errado = np.max(diferencia)
        X = np.copy(X0)
        xnuevo = np.copy(X0)
    
        itera = 0
        if vertabla==True:
            print('itera,[X],errado')
            print(itera, xnuevo, errado)
        while not(errado<=tolera or itera>iteramax):
            
            for i in range(0,n,1):
                nuevo = B[i]
                for j in range(0,m,1):
                    if (i!=j): # excepto diagonal de A
                        nuevo = nuevo-A[i,j]*X[j]
                nuevo = nuevo/A[i,i]
                xnuevo[i] = nuevo
            diferencia = np.abs(xnuevo-X)
            errado = np.max(diferencia)
            X = np.copy(xnuevo)
            itera = itera + 1
            if vertabla==True:
                print(itera, xnuevo, errado)
        # No converge
        if (itera>iteramax):
            X=itera
            print('iteramax superado, No converge')
        return(X)
    
    def pivoteafila(A,B,vertabla=False):
        '''
        Pivotea parcial por filas, entrega matriz aumentada AB
        Si hay ceros en diagonal es matriz singular,
        Tarea: Revisar si diagonal tiene ceros
        '''
        A = np.array(A,dtype=float)
        B = np.array(B,dtype=float)
        # Matriz aumentada
        nB = len(np.shape(B))
        if nB == 1:
            B = np.transpose([B])
        AB  = np.concatenate((A,B),axis=1)
        
        if vertabla==True:
            print('Matriz aumentada')
            print(AB)
            print('Pivoteo parcial:')
        
        # Pivoteo por filas AB
        tamano = np.shape(AB)
        n = tamano[0]
        m = tamano[1]
        
        # Para cada fila en AB
        pivoteado = 0
        for i in range(0,n-1,1):
            # columna desde diagonal i en adelante
            columna = np.abs(AB[i:,i])
            dondemax = np.argmax(columna)
            
            # dondemax no es en diagonal
            if (dondemax != 0):
                # intercambia filas
                temporal = np.copy(AB[i,:])
                AB[i,:] = AB[dondemax+i,:]
                AB[dondemax+i,:] = temporal
    
                pivoteado = pivoteado + 1
                if vertabla==True:
                    print(' ',pivoteado, 'intercambiar filas: ',i,'y', dondemax)
        if vertabla==True:
            if pivoteado==0:
                print('  Pivoteo por filas NO requerido')
            else:
                print('AB')
        return(AB)
    
    
    # INGRESO
    A = [[  5, -1, -1],
         [ -1,  4, -1],
         [ -1, -1,  4]]
    B = [7.1, 5.5,5]
    X0  = [2,2,2]
    
    tolera = 0.0001
    iteramax = 100
    
    # PROCEDIMIENTO
    # numero de condicion
    ncond = np.linalg.cond(A)
    # Pivoteo parcial por filas
    AB = pivoteafila(A,B,vertabla=True)
    n = len(A)
    A = AB[:,:n]
    B = AB[:,n]
    
    respuesta = jacobi(A,B,tolera,X0,vertabla=True)
    
    # SALIDA
    print('numero de condición:', ncond)
    print('respuesta con Jacobi')
    print(respuesta)