Ejercicio: 1Eva2026PAOI_T2 Escuelas para el futbol
A partir de los datos de la tabla, se tiene que:
| \Componente País \ | Infraestructura (Canchas) | Formación de Educadores (miles) | Equipamiento (césped, balones, arcos, etc.) | Niños (uniformes, alimentos, becas) (miles) | Atención salud (miles) |
|---|---|---|---|---|---|
| Ecuador | 0.8 | 0.9 | 0.7 | 5.0 | 0.3 |
| Colombia | 0.7 | 0.7 | 4.6 | 0.8 | 0.2 |
| Venezuela | 6.0 | 0.8 | 0.7 | 0.7 | 0.2 |
| Chile | 0.9 | 4.5 | 0.6 | 0.3 | 0.1 |
literal a. Sistema de Ecuaciones
Se plantean las ecuaciones considerando los montos asignados a cada país con los valores sugeridos.
0.8 a+0.9 b + 0.7 c +5.0 d + 0.3e = 25 0.7 a+0.7 b + 4.6 c +0.8 d + 0.2e = 50 6.0 a+0.8 b + 0.7 c +0.7 d + 0.2e = 70 0.9 a+4.5 b + 0.6 c +0.3 d + 0.1e = 30Adicionalmente se indica que al menos se invierte en atención de salud en la unidad, siendo la variable libre la e=1.
literal b. Forma matricial y matriz aumentada
Forma matricial A.X=B
\begin{bmatrix} 0.8 & 0.9 & 0.7 & 5.0 \\ 0.7 & 0.7 & 4.6 & 0.8 \\ 6.0 &0.8 & 0.7 & 0.7 \\ 0.9 & 4.5 & 0.6 & 0.3 & \end{bmatrix} \begin{bmatrix} a\\b\\c\\d \end{bmatrix} \begin{bmatrix} 25-0.3 \\ 50-0.2 \\ 70 -0.2 \\ 30-0.1 \end{bmatrix}Matriz aumentada
\begin{bmatrix} 0.8 & 0.9 & 0.7 & 5.0 & 25-0.3 \\ 0.7 & 0.7 & 4.6 & 0.8 & 50-0.2\\ 6.0 &0.8 & 0.7 & 0.7 & 70 -0.2 \\ 0.9 & 4.5 & 0.6 & 0.3 & 30-0.1 \end{bmatrix}literal c. Pivoteo parcial por filas
Tomando la columna=0, el máximo en magnitud se encuentra en fila =2. Se intercambia i=0 con i=2.
\begin{bmatrix} 6.0 &0.8 & 0.7 & 0.7 & 70 -0.2 \\ 0.7 & 0.7 & 4.6 & 0.8 & 50-0.2 \\ 0.8 & 0.9 & 0.7 & 5.0 & 25-0.3 \\ 0.9 & 4.5 & 0.6 & 0.3 & 30-0.1 \end{bmatrix}Se observa columna=1, desde la diagonal en adelante. el máximo en magnitud se encuentra en fila=0. Se intercambia i=1 con i= 3
\begin{bmatrix} 6.0 &0.8 & 0.7 & 0.7 & 70 -0.2 \\ 0.9 & 4.5 & 0.6 & 0.3 & 30-0.1 \\ 0.8 & 0.9 & 0.7 & 5.0 & 25-0.3 \\ 0.7 & 0.7 & 4.6 & 0.8 & 50-0.2 \end{bmatrix}Se observa columna=2, desde la diagonal en adelante. el máximo en magnitud se encuentra en fila=3. Se intercambia i=2 con i= 3
\begin{bmatrix} 6.0 &0.8 & 0.7 & 0.7 & 70 -0.2 \\ 0.9 & 4.5 & 0.6 & 0.3 & 30-0.1 \\ 0.7 & 0.7 & 4.6 & 0.8 & 50-0.2 \\0.8 & 0.9 & 0.7 & 5.0 & 25-0.3 \end{bmatrix}literal d Método de Jacobi
a = \frac{(70-0.2)-0.8b-0.7c-0.7d}{6.0} b = \frac{(30-0.1) -0.9a-0.6c-0.3d}{4.5} c = \frac{(50-0.2)-0.7a-0.7b-0.8d}{4.6} d = \frac{(25-0.3)-0.8a-0.9b-0.7c}{5.0}Se propone para vector inicial al menos un número mayor a la unidad concedida para el atención de salud.
Un criterio complementario, la infraestructura de canchas y equipamiento deberían ser iguales en cantidad. por ejemplo en el orden de las decenas. Por lo que el vector inicial podría sugerirse como:
X0 = [10, 2, 10, 2]
Para la tolerancia, se considera que los niños y educadores se miden por miles, por lo que la tolerancia podría ser en menor al orden de las unidades, es decir 0.0001
Se podría mantener el número de iteraciones para convergencia menores a 100, que es iteramax.
literal e. Iteraciones con el método
itera = 0
X0 = [10, 2, 10, 2]
a = \frac{(70-0.2)-0.8(2)-0.7(10)-0.7(2)}{6.0}=9.9666 b = \frac{(30-0.1) -0.9(10)-0.6(10)-0.3(2)}{4.5}=3.1777 c = \frac{(50-0.2)-0.7(10)-0.7(2)-0.8(2)}{4.6}=8.6521 d = \frac{(25-0.3)-0.8(10)-0.9(2)-0.7(10)}{5.0}=1.58diferencias =|[9.9666-10, 3.1777-2, 8.6521-10, 1.58-2]|
diferencias = |[0.0333, 1.1777, 1.3478, -0.42]|
errado = max|diferencias| = 1.3478
itera = 1
X0 = [9.9666, 3.1777, 8.6521, 1.58]
a = \frac{(70-0.2)-0.8(3.1777)-0.7(8.6521)-0.7(1.58)}{6.0}=10.0158 b = \frac{(30-0.1) -0.9(9.9666)-0.6(8.6521)-0.3(1.58)}{4.5}=3.3921 c = \frac{(50-0.2)-0.7(9.9666)-0.7(3.1777)-0.8(1.58)}{4.6}=8.5510 d = \frac{(25-0.3)-0.8(9.9666)-0.9(3.1777)-0.7(8.6521)}{5.0}=1.5620diferencias =|[10.0158-9.9666, 3.3921-3.1777, 8.5510-8.6521, 1.5620-1.58]|
diferencias = |[0.0492, 0.2143. -0.1011, -0.0179]|
errado = max|diferencias| = 0.2143
itera =2
X0 = [10.0158, 3.3921, 8.5510, 1.5620]
a = \frac{(70-0.2)-0.8(3.3921)-0.7(8.5510)-0.7(1.5620)}{6.0}=10.0011 b = \frac{(30-0.1) -0.9(10.0158)-0.6(8.5510)-0.3(1.5620)}{4.5}=3.3969 c = \frac{(50-0.2)-0.7(10.0158)-0.7(3.3921)-0.8(1.5620)}{4.6}=8.5140 d = \frac{(25-0.3)-0.8(10.0158)-0.9(3.3921)-0.7(8.5510)}{5.0}=1.5297diferencias =|[10.0011-10.0158, 3.3969-3.3921, 8.5140-8.5510, 1.5297 - 1.5620]|
diferencias = |[0.01469, 0.004837, 0.03698, 0.03230]|
errado = max|diferencias| = 0.03698
literal f. Resultados
El valor de error disminuye en cada iteración por lo que el método converge.
Con el algoritmo se alcanza a la tolerancia luego de 10 iteraciones.
El número de condición= 1.89 es cercano a 1 lo que muestra que el sistema es estable.
El vector resultante usando el algoritmo es:
[10.00659513, 3.40509722, 8.51849232, 1.53343836]
El primer valor indica que al menos se trabajarían 10 canchas completas. Se equipan 8 canchas completas y otras con algunos implementos complementarios, Se empieza a invertir mas en educadores de futbol que participantes, si el programa está iniciando se deben capacitar primero a los educadores.
Se incorporan al plan al menos 1533 niños en la etapa inicial.
Resultados con el algoritmo:
0 [10. 2. 10. 2.]
1.3478260869565215 [0.03333333 1.17777778 1.34782609 0.42 ]
1 [9.96666667 3.17777778 8.65217391 1.58 ]
0.21437681159420308 [0.04920934 0.21437681 0.10111111 0.01797101]
2 [10.01587601 3.39215459 8.5510628 1.56202899]
0.036985542253029635 [0.01469066 0.00483768 0.03698554 0.03230576]
3 [10.00118535 3.39699227 8.51407726 1.52972322]
0.010023255338515558 [0.00743896 0.01002326 0.00711776 0.0066577 ]
4 [10.00862431 3.40701553 8.52119502 1.53638092]
0.003990906268057648 [0.00294357 0.00288067 0.00381515 0.00399091]
5 [10.00568074 3.40413485 8.51737987 1.53239001]
0.00158036874496581 [0.0012948 0.00136346 0.00158037 0.00152361]
6 [10.00697553 3.40549831 8.51896023 1.53391363]
0.0006738422704755109 [0.00054393 0.00057125 0.00066949 0.00067384]
7 [10.00643161 3.40492706 8.51829074 1.53323979]
0.00028689062021491907 [0.00023289 0.00024297 0.00028689 0.00028358]
8 [10.0066645 3.40517004 8.51857763 1.53352337]
0.00012173260873638014 [9.89516971e-05 1.03735402e-04 1.21732609e-04 1.21162264e-04]
9 [10.00656555 3.4050663 8.5184559 1.53340221]
5.191538694759856e-05 [4.21691220e-05 4.40988382e-05 5.19153869e-05 5.15472091e-05]
Metodo de Jacobi
numero de condición: 1.8965248084337174
X: [10.00660771 3.4051104 8.51850781 1.53345375]
errado: 5.191538694759856e-05
iteraciones: 10
[10.00659513 3.40509722 8.51849232 1.53343836]
El algoritmo en Python ajustado al ejercicio es:
# 1Eva2026PAOI_T2 Escuelas para el futbol
# Método de Jacobi
import numpy as np
# INGRESO
k = 1 #
A = [[0.8, 0.9, 0.7, 5.0], # 0.3],
[0.7, 0.7, 4.6, 0.8], # 0.5],
[6.0, 0.8, 0.7, 0.7], # 0.2],
[0.9, 4.5, 0.6, 0.3]] # 0.1]]
#B = [50,50,50,50]
B = [25-0.3*k,50-0.2*k,70-0.2*k,30-0.1*k]
X0 = [10,2,10,2]
tolera = 0.0001 #la unidad es miles
iteramax = 100
# PROCEDIMIENTO
# 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)
AB0 = np.copy(AB) # copia de AB
# 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
# Actualiza A y B pivoteado
A = AB[:,:n]
B = AB[:,n]
# PROCEDIMIENTO
# Matrices como arreglo, numeros reales
A = np.array(A,dtype=float)
B = np.array(B,dtype=float)
X0 = np.array(X0,dtype=float)
tamano = np.shape(A) # tamaño A
n = tamano[0]
m = tamano[1]
# valores iniciales
diferencia = np.ones(n, dtype=float)
errado = 2*tolera # np.max(diferencia)
itera = 0
X = np.copy(X0)
Xnuevo = np.copy(X0)
while errado>tolera and itera<=iteramax:
for i in range(0,n,1): # una ecuacion
suma = B[i] # numerador
for j in range(0,m,1): # un coeficiente
if (i!=j): # excepto diagonal de A
suma = suma-A[i,j]*X[j]
Xnuevo[i] = suma/A[i,i]
diferencia = abs(Xnuevo-X)
errado = np.max(diferencia)
print(itera, X)
print(' ',errado,diferencia)
X = np.copy(Xnuevo) # actualiza X
itera = itera + 1
if (itera>iteramax): # No converge
X = np.nan
print('No converge,iteramax superado')
# numero de condicion
ncond = np.linalg.cond(A)
# SALIDA
print('Metodo de Jacobi')
print('numero de condición:', ncond)
print('X: ',X)
print('errado:',errado)
print('iteraciones:', itera)
print(np.linalg.solve(A,B))