s2Eva_2025PAOI_T2 EDO Modelo económico Solow-Swan

Ejercicio: 2Eva_2025PAOI_T2 EDO Modelo económico de Solow-Swan

El modelo de crecimiento económico de Solow-Swan describe cómo el capital por trabajador k cambia con el tiempo dk/dt .

\frac{\delta k}{\delta t} = s f(k) -(d+n)k f(k) = k^{\alpha}

literal a

La EDO es de primera derivada o primer orden, en la que se sustituyen los valore de las constantes y f(k)

f(t,k) = \frac{\delta k}{\delta t} = 0.15 k ^{0.3}-(0.05+0.015)k

Tiene como variable independiente el tiempo t, y como variable dependiente k.

Para evitar repetir la variable k en el algoritmo junto a Runge-Kutta, se cambia la variable por x:

f(t,y) = 0.15 y ^{0.3}-(0.05+0.015)y

literal b

Desarrolle tres iteraciones con expresiones completas para k(t) con tamaño de paso h=0.2 meses, que se aplica al algoritmo EDO dy/dx con Runge-Kutta de 2do Orden

K_1 = h f(t_i,y_i) K_2 = h f(t_i+h, y_i + K_1) y_{i+1} = y_i + \frac{K_1+K_2}{2} t_{i+1} = t_i + h

itera=0, ti= 0, yi=k(0)=1

K_1 = 0.2 \left( 0.15 (1) ^{0.3}-(0.05+0.015)(1) \right) =0.017 K_2 = 0.2 \left( 0.15 (1+0.017) ^{0.3}-(0.05+0.015)(1+0.017) \right) =0.016931 y_{1} = 1+ \frac{0.017+0.016931}{2} = 1.016966 t_{1} = 0 + 0.2 = 0.2

itera = 1

K_1 = 0.2 \Big( 0.15 (1.016966) ^{0.3} -(0.05+0.015)(1.016966) \Big) =0.016931 K_2 = 0.2 \Big( 0.15 (1.016966+0.016931) ^{0.3} -(0.05+0.015)(1.016966+0.016931) \Big)=0.016861 y_{2} = 1.016966 + \frac{0.016931+0.016861}{2} =1.033862 t_{2} = 0.2 + 0.2 = 0.4

itera = 2

K_1 = 0.2 \left( 0.15 (1.033862) ^{0.3}-(0.05+0.015)(1.033862) \right) =0.016861 K_2 = 0.2 \Big( 0.15 (1.033862+0.016861) ^{0.3} -(0.05+0.015)(1.033862+0.016861) \Big)=0.016789 y_{3} = 033862 + \frac{0.016861+0.016789}{2} t_{3} = 0.4 + 0.2 = 0.6

Resultados con el algoritmo:

EDO dy/dx con Runge-Kutta 2 Orden
i, [xi,     yi,     K1,    K2]
0 [0. 1. 0. 0.]
1 [0.2      1.016966 0.017    0.016931]
2 [0.4      1.033862 0.016931 0.016861]
3 [0.6      1.050687 0.016861 0.016789]
4 [0.8      1.06744  0.016789 0.016716]
5 [1.       1.084119 0.016716 0.016642]
6 [1.2      1.100723 0.016642 0.016567]
7 [1.4      1.117252 0.016567 0.01649 ]
8 [1.6      1.133703 0.01649  0.016413]
9 [1.8      1.150077 0.016413 0.016334]
10 [2.       1.166371 0.016334 0.016255]
...
295 [5.900000e+01 3.121417e+00 1.647361e-03 1.632629e-03]
296 [5.920000e+01 3.123042e+00 1.632695e-03 1.618093e-03]
297 [5.940000e+01 3.124653e+00 1.618158e-03 1.603683e-03]
298 [5.960000e+01 3.126249e+00 1.603748e-03 1.589400e-03]
299 [5.980000e+01 3.127832e+00 1.589464e-03 1.575241e-03]
300 [6.000000e+01 3.129400e+00 1.575305e-03 1.561206e-03]

gráfica para 60 periodos completos con h=0.2

EDO Solow-Swan 01

# EDO dy/dx. M todo de RungeKutta 2do Orden 
# estima la solucion para muestras espaciadas h en eje x
# valores iniciales x0,y0, entrega tabla[xi,yi,K1,K2]
import numpy as np

def rungekutta2(d1y,x0,y0,h,muestras,
                vertabla=False,precision=6):
    '''solucion a EDO dy/dx, con Runge Kutta de 2do orden
    d1y es la expresi n dy/dx, tambien planteada como f(x,y),
    valores iniciales: x0,y0, tama o de paso h.
    muestras es la cantidad de puntos a calcular. 
    '''
    tamano = muestras + 1
    tabla = np.zeros(shape=(tamano,2+2),dtype=float)
    tabla[0] = [x0,y0,0,0] # incluye el punto [x0,y0]
    
    xi = x0 # valores iniciales
    yi = y0
    for i in range(1,tamano,1):
        K1 = h * d1y(xi,yi)
        K2 = h * d1y(xi+h, yi + K1)

        yi = yi + (K1+K2)/2
        xi = xi + h
        
        tabla[i] = [xi,yi,K1,K2]
       
    if vertabla==True:
        np.set_printoptions(precision)
        print( 'EDO dy/dx con Runge-Kutta 2 Orden')
        print('i, [xi,     yi,     K1,    K2]')
        for i in range(0,tamano,1):
            print(i,tabla[i])

    return(tabla)

# PROGRAMA PRUEBA -------------------

# INGRESO
# d1y = y' = f, d2y = y'' = f'
d1y = lambda t,k: 0.15*k**(0.3)-(0.05+0.015)*k
x0 = 0
y0 = 1
h  = 0.2
muestras = int(60/h)

# PROCEDIMIENTO
tabla = rungekutta2(d1y,x0,y0,h,muestras,
                    vertabla=True)
xi = tabla[:,0]
yiRK2 = tabla[:,1]

# SALIDA
#print(' [xi, yi, K1, K2]')
#print(tabla)

# GRAFICA
import matplotlib.pyplot as plt
plt.plot(xi,yiRK2)
plt.plot(xi[0],yiRK2[0],
         'o',color='r', label ='[t0,k0]')
##plt.plot(xi[1:],yiRK2[1:],
##         'o',color='m',
##         label ='[xi,yi] Runge-Kutta')
plt.title('EDO dk/dt: Solow-Swan')
plt.xlabel('t')
plt.ylabel('k')
plt.legend()
plt.grid()
plt.show()

.

s2Eva_2025PAOI_T1 coordenadas centroide por integración numérica

Ejercicio2Eva_2025PAOI_T1 coordenadas centroide por integración numérica

Para el integral con Qy use fórmulas de Simpson con al menos 3 tramos,

Q_y = \int x dA = \int_0^5 x^3 dx

a. Para el intervalo de integración [0,5], al considerar 3 tramos, h = 5/3 que es mayor que 1. Se prefiere h≤1 de tal forma que al calcular los errores, la cota del error disminuya por estar en el orden O(hk), por lo que tramos será al menos 5 obteniendo h=1.

xi = [ 0, 1, 2, 3, 4, 5]

c. Con 5 tramos, 6 muestras, se usarán Simpson de 3/8 y luego Simpson de 1/3.

I_{3/8} = \frac{3}{8} (1) \left( 0^3+3(1^3)+3(2^3)+3^3\right) = 20.25 I_{1/3} = \frac{1}{3} (1) \left( 3^3+4(4^3)+5^3\right) = 136

d. Q_y =I_{3/8} + I_{1/3} = 20.25+136 =156.25

cota de error = O(h5)+O(h5) = 2[ O(h5)] = 2(15) = 2

Fórmulas compuestas, tramos: 5
métodos 3:Simpson3/8, 2:Simpson1/3, 1:Trapecio, 0:usado
tramos iguales en xi: [3 0 0 2 0 0]
['S38', 20.25]
['S13', 136.0]
tramos iguales en xi: [3 0 0 2 0 0]
Integral: 156.25

Para el integral con Qx use Cuadratura de Gauss de dos puntos

Q_x = \int ydA = \int_0^5 \frac{x^4}{2} dx

b. Para cuadratura de Gauss, se tomarían al menos 3 tramos, dado que la cota de error por truncamiento se aproxima con la ≅ f(4)( x )

xi = [ 0, 5/3, 10/3, 5]

c. intervalo [0, 5/3]

x_a = \frac{5/3+0}{2} - \left( \frac{1}{\sqrt{3}} \right) \frac{5/3-0}{2} =0.352208 x_b = \frac{5/3+0}{2} + \left( \frac{1}{\sqrt{3}}\right) \frac{5/3-0}{2} =1.314458 I_0 = \frac{5/3-0}{2} \left( f(x_a) +f(1.314458) \right) = \frac{5/3-0}{2} \left( \frac{(0.352208)^4}{2} +\frac{(1.314458) ^4}{2} \right) = 1.2502

d. usando el algoritmo se puede obtener el resultado de:

[xa,xb,f(xa),f(xb)],area
[0.352208, 1.314458, 0.007694, 1.492648] 1.250285
[xa,xb,f(xa),f(xb)],area
[2.018874, 2.981125, 8.306298, 39.490340] 39.830532
[xa,xb,f(xa),f(xb)],area
[3.685541, 4.647791, 92.251874, 233.322542] 271.312014
Integral:  312.39283264746234

Para el integral de área A:superficie para centroide

se plantea usando Simpson de 3/8 o cualquier otro método numérico. con h=1

xi = [ 0, 1, 2, 3, 4, 5]

A = \int f(x) dx = \int_0^5 x^2 dx I_{3/8} = \frac{3}{8} (1) \left( 0^2+3(1^2)+3(2^2)+3^2\right) = 9 I_{1/3} = \frac{1}{3} (1) \left( 3^2+4(4^2)+5^2\right) = 32.6666

d. Q_y =I_{3/8} + I_{1/3} = 9+32.6666 =41.6666

cota de error = O(h5)+O(h5) = 2[ O(h5)] = 2(15) = 2

usando el algoritmo se obtiene:

Fórmulas compuestas, tramos: 5
métodos 3:Simpson3/8, 2:Simpson1/3, 1:Trapecio, 0:usado
tramos iguales en xi: [3 0 0 2 0 0]
['S38', 9.0]
['S13', 32.666666666666664]
tramos iguales en xi: [3 0 0 2 0 0]
Integral: 41.666666666666664

e. Determine las coordenadas del centroide según las fórmulas presentadas.

\bar{x} = \frac{Q_y}{A}= \frac{156.25}{41.6666} = 3.75 \bar{y} = \frac{Q_x}{A}= \frac{312.5}{41.6666} = 7.5

centroide x^2 ubicaciónliteral f se deja como tarea.

s1Eva_2025PAOI_T2 Cables de cámara aérea

Ejercicio1Eva_2025PAOI_T2 Cables de cámara aérea

literal a. matriz aumentada y pivoteo parcial por filas

Las ecuaciones que conforman el sistema de ecuaciones son:

\frac{55}{56.75} T_{AB} - \frac{60}{71.36} T_{AD}=0 \frac{14}{56.75} T_{AB} + \frac{14}{34.93} T_{AC} + \frac{14}{71.36} T_{AD}-490=0 -\frac{32}{34.93} T_{AC} + \frac{36}{71.36} T_{AD}=0

Se reordenan las ecuaciones para la forma A.X=B, con las constantes del lado derecho.

\frac{55}{56.75} T_{AB} - \frac{60}{71.36} T_{AD}=0 \frac{14}{56.75} T_{AB} + \frac{14}{34.93} T_{AC} + \frac{14}{71.36} T_{AD} =490 -\frac{32}{34.93} T_{AC} + \frac{36}{71.36} T_{AD}=0

la matriz A y vector B serán:

A = \begin{pmatrix} \frac{55}{56.75} &0& - \frac{60}{71.36} \\ \frac{14}{56.75} &\frac{14}{34.93} &\frac{14}{71.36} \\ 0 &-\frac{32}{34.93}& \frac{36}{71.36}\end{pmatrix} B =[0,490,0]

Matriz Aumentada

\left( \begin{array}{rrr|r} \frac{55}{56.75} &0& - \frac{60}{71.36} & 0\\ \frac{14}{56.75} & \frac{14}{34.93} & \frac{14}{71.36} &490\\ 0 &-\frac{32}{34.93} & \frac{36}{71.36} & 0\end{array} \right)

Pivoteo parcial por filas

columna = 0, no requiere cambios, la mayor magnitud se encuentra en la diagonal.

columna = 1

\left( \begin{array}{rrr|r} \frac{55}{56.75} &0& - \frac{60}{71.36} & 0\\ 0 &-\frac{32}{34.93} & \frac{36}{71.36} & 0 \\ \frac{14}{56.75} & \frac{14}{34.93} & \frac{14}{71.36} &490\end{array} \right)

literal b. Expresiones para método Jacobi

fila = 0
\frac{55}{56.75} x + 0 y - \frac{60}{71.36} z =0

\frac{55}{56.75} x = \frac{60}{71.36} z x = \frac{60}{71.36} z \left(\frac{1}{\frac{55}{56.75}}\right) x = \frac{60(56.75)}{71.36(55)}z =0.86756 z

fila = 1

0 x -\frac{32}{34.93} y + \frac{36}{71.36} z = 0 -\frac{32}{34.93} y = - \frac{36}{71.36} z y = \frac{36}{71.36} z \left(\frac{1}{\frac{32}{34.93}}\right) y = \frac{36(34.93)}{71.36(32)} z = 0.55067 z/

fila = 2

\frac{14}{56.75} x + \frac{14}{34.93} y + \frac{14}{71.36} z = 490 \frac{14}{71.36} z = 490 -\frac{14}{56.75} x -\frac{14}{34.93} y z = \left( 490 -\frac{14}{56.75} x -\frac{14}{34.93} y \right) \frac{1}{ \frac{14}{71.36}} z = \left( 490 -\frac{14}{56.75} x -\frac{14}{34.93} y \right) \frac{71.36}{14}

expresiones para el método:

x = 0.86756 z y = 0.55067 z z = \left( 490 -\frac{14}{56.75} x -\frac{14}{34.93} y \right) (5.09714)

literal c. Iteraciones Jacobi

Si la cámara tiene un peso de 490, cuelga de 3 cables, en el mejor de los casos cada cable tendría una tensión de 1/3 del peso. Por lo que el vector inicial X0=[490/3,490/3,490/3]

x = 0.86756 z y = 0.55067 z z = \left( 490 -\frac{14}{56.75} x -\frac{14}{34.93} y \right) (5.09714)

itera = 0

X0=[490/3,490/3,490/3]

x = 0.86756 (490/3) = 141.7014 y = 0.55067 (490/3) = 89.9427 z = \left( 490 -\frac{14}{56.75} (490/3) -\frac{14}{34.93} (490/3) \right) (5.09714) z =1958.53

X1 = [141.7014, 89.9427, 1958.5366]

 X1:  [141.7014, 89.9427, 1958.5366]
-X0: -[490/3,    490/3,   490/3    ]
____________________________________
dif:  [21.63185  73.38956 1795.2033 ]
errado = max(abs(diferencia) = 1795.20

itera = 1

x = 0.86756 (1958.5366)=1699.1483 y = 0.55067 (1958.5366)= 1078.51941 z = \left( 490 -\frac{14}{56.75} (141.7014) -\frac{14}{34.93} (89.9427) \right) (5.09714) z=2135.66818

X2= [1699.1483, 1078.51941, 2135.66818]

 X2:  [1699.1483, 1078.51941, 2135.66818]
-X1: -[ 141.7014,   89.9427,  1958.5366 ]
_________________________________________
dif:  [1557.44681  988.57564   177.13155]
errado = max(abs(diferencia) = 1557.44681

itera = 2

x = 0.86756 (2135.66818)=1852.82057 y = 0.55067 (2135.66818)=1176.06153 z = \left( 490 -\frac{14}{56.75} (1699.1483) -\frac{14}{34.93} (1078.51941) \right) (5.09714) z =-1842.33913

X3= [1852.82057, 1176.06153, -1842.33913]

 X3:  [1852.82057, 1176.06153, -1842.33913]
-X2: -[1699.1483,  1078.51941,  2135.66818]
____________________________________________
dif:  [ 153.67227   97.54212 3978.00731]
errado = max(abs(diferencia) = 3978.00731

literal d. convergencia

Se observa que el error aumenta en cada iteración, por lo que el método NO converge.

En la tercera iteración, la Tensión AD es negativa, lo que no tiene sentido en el contexto del ejercicio.

literal e. Número de condición

el número de condición calculado es:

numero de condición: 3.254493400285106

literal f. resultados con algoritmo

los resultados de las iteraciones con el algoritmo son:

Matriz aumentada
[[ 9.6916299e-01  0.0000000e+00 -8.4080717e-01  0.000e+00]
 [ 2.4669603e-01  4.0080160e-01  1.9618834e-01  4.900e+02]
 [ 0.0000000e+00 -9.1611795e-01  5.0448430e-01  0.000e+00]]
Pivoteo parcial:
  1 intercambiar filas:  1 y 2
AB
Iteraciones Jacobi
itera,[X]
     ,errado,|diferencia|
0 [163.33333333 163.33333333 163.33333333]
  nan
1 [ 141.70149   89.94377 1958.53663]
  1795.203299403506 [  21.63185   73.38956 1795.2033 ]
2 [1699.1483  1078.51941 2135.66818]
  1557.446808619277 [1557.44681  988.57564  177.13155]
3 [ 1852.82057  1176.06153 -1842.33913]
  3978.007311178223 [ 153.67227   97.54212 3978.00731]
4 [-1598.33998 -1014.53222 -2234.84654]
  3451.1605418268064 [3451.16054 2190.59375  392.50741]
5 [-1938.86376 -1230.67669  6580.05603]
  8814.902564542654 [ 340.52378  216.14447 8814.90256]
6 [5708.59426 3623.47991 7449.81676]
  7647.458018820763 [7647.45802 4854.1566   869.76074]
7 [  6463.164     4102.43641 -12083.20597]
  19533.02272824792 [  754.56974   478.95649 19533.02273]
8 [-10482.90774  -6653.93333 -14010.51669]
  16946.071746250553 [16946.07175 10756.36974  1927.31073]
9 [-12154.96569  -7715.25738  29272.88595]
  43283.40263645846 [ 1672.05794  1061.32405 43283.40264]
10 [25395.98875 16119.88011 33543.6313 ]
  37550.95443771429 [37550.95444 23835.13748  4270.74536]
11 [ 29101.11715  18471.67771 -62368.45408]
  95912.08538760681 [ 3705.1284   2351.79761 95912.08539]
12 [-54108.38416 -34344.82012 -71832.03755]
  83209.50131084416 [83209.50131 52816.49783  9463.58346]
13 [-62318.61187 -39556.18982 140700.42439]
  212532.4619384469 [  8210.22771   5211.3697  212532.46194]
14 [122066.07854  77480.36788 161670.86502]
  184384.6904047115 [184384.6904  117036.5577   20970.44063]
15 [ 140259.19675   89028.28937 -309281.7495 ]
  470952.61452269484 [ 18193.11821  11547.92149 470952.61452]
16 [-268320.51494 -170314.0828  -355750.33954]
  408579.7116922584 [408579.71169 259342.37218  46468.59004]
No converge,iteramax superado
Metodo de Jacobi
numero de condición: 3.254493400285106
X:  nan
errado: 408579.7116922584
iteraciones: 16

las gráficas de las iteraciones son:

camara aerea cables 03 Jacobi

la gráfica de errores por iteración

camara aerea cables 04 Jacobi errores

 

s1Eva_2025PAOI_T1 Recargar combustible en órbita

Ejercicio1Eva_2025PAOI_T1 Recargar combustible en órbita

literal a. Planteamiento

Según el enunciado, se plantea el ejercicio primero para el eje y. Cuando las coordenadas de ambos son iguales en el eje y.

T_y (t) = 2\cos(3.5t) S_y (t) = 2 - 2e^{(-9t)} T_y (t) = S_y (t) 2\cos(3.5t) =2 - 2e^{(-9t)} 2 - 2e^{(-9t)} -2\cos(3.5t) = 0 f(t) = 2 - 2e^{(-9t)} -2\cos(3.5t)

literal b. Intervalo [a,b]

Las gráficas presentadas en el enunciado, confirman que existe una raíz en el intervalo 0 ≤ t ≤ (π/7). Se verifica revisando el signo de f(t) en los extremos del intervalo:

f(0) = 2 - 2e^{(-9(0))} -2\cos(3.5(0)) =-2 f(π/7) = 2 - 2e^{(-9(π/7))} -2\cos(3.5(π/7))=1.9647

Los resultados tienen signos opuestos, lo que confirma que existe al menos una raíz en el intervalo.

literal c. Método de Newton-Raphson

En éste método se requiere de la derivada f'(t)

f(t) = 2 - 2e^{(-9t)} -2\cos(3.5t) f'(t) = 18e^{(-9t)} +2(3.5)\sin(3.5t)
import sympy as sym
t = sym.Symbol('t')
f = 2-2*sym.exp(-9*t)-2*sym.cos(3.5*t)
df = sym.diff(f,t,1)
print(df)

resultado:

7.0*sin(3.5*t) + 18*exp(-9*t)

itera = 0

el punto inicial de búsqueda puede ser x0=0.1, que se encuentra dentro del intervalo

f(0.1) = 2 - 2e^{(-9(0.1))} -2\cos(3.5(0.1)) = -0.6918 f'(0.1) = 18e^{(-9(0.1))} +2(3.5)\sin(3.5(0.1)) = 9.7185 x_1 = x_0 - \frac{f(x_0)}{f'(x_0)} = 0.1 - \frac{-0.6918}{9.7185} =0.1711 tramo = |0.1711-0.1| = 0.0711

itera = 1

x1= 0.1711

f(0.1711) = 2 -2e^{(-9(0.1711))} -2\cos(3.5(0.1711)) =-0.08005 f'(0.1711) = 18e^{(-9(0.1711))} + 2(3.5)\sin(3.5(0.1711))=7.8037 x_1 = 0.1711 - \frac{-0.08005}{7.8037} =0.1814 tramo = |0.1814-0.1711| = 0.0102

itera = 2
x2= 0.1814

f(0.1814) = 2 -2e^{(-9(0.1814))} -2\cos(3.5(0.1814)) =-0.0003660 f'(0.1814) = 18e^{(-9(0.1814))} + 2(3.5)\sin(3.5(0.1814)) =7.9654 x_1 = 0.1814 - \frac{-0.0003660}{7.9654} = 0.1815 tramo = |0.1815-0.1814| = 0.0001

literal d y e. Errores por iteración

En el desarrollo se muestran los errores como tramos. Se observa que los errores disminuyen en cada iteración, por lo que se considera que el método converge.  El error de la última iteración es del orden de 10-4, lo que es menor que la  tolerancia 10-3. por lo que la raíz será: 0.1815

Nota: el algoritmo lo obtiene del blog y lo modifica para el ejercicio, obteniendo los datos de las operaciones

Resultados con el algoritmo:

i: 1 fi: -0.691884745175956 dfi: 9.718538527518945
   xnuevo: 0.171192262418554 tramo: 0.071192262418554
i: 2 fi: -0.08005384152091866 dfi: 7.803760114465353
   xnuevo: 0.18145063022416194 tramo: 0.010258367805607932
i: 3 fi: -0.0007153774553945169 dfi: 7.668649926460424
   xnuevo: 0.18154391619525917 tramo: 9.328597109722891e-05
raiz en:  0.18154391619525917
con error de:  9.328597109722891e-05

Gráfica f(t) = Sy(t) - Ty(t)

estacion orbital cisterna Eje y


literal f. Encontrar k en Sx(t) = Tx(t)

Se usan las ecuaciones en eje x con el valor encontrado t=0.1815.

No se indica desarrollar el ejercicio en papel y lápiz, por lo que la respuesta es solo con el algoritmo, por ejemplo, bisección.

T_x (t) = 2\sin(3.5t) S_x (t) = 3.2(t+k)+4.1(t+k)^2 T_x (t) = S_x (t) 2\sin(3.5t) = 3.2(t+k)+4.1(t+k)^2 3.2(t+k)+4.1(t+k)^2-2\sin(3.5t) =0 3.2(0.1815+k)+4.1(0.1815+k)^2 -2\sin(3.5(0.1815))=0 f(k) = 3.2(0.1815+k)+4.1(0.1815+k)^2 - 2\sin(3.5(0.1815))

que da una función dependiente de k, usando el método de la bisección, para el intervalo [0,π/7] y tolerancia del ejercicio anterior, siempre que exista cambio de signo se prueba:

i: 0 a: 0 c: 0.2243994752564138 b: 0.4487989505128276
  fa: -0.4709358324617918 fc: 0.7876530469374095 fb: 2.459153947198512 tramo: 0.2243994752564138
i: 1 a: 0 c: 0.1121997376282069 b: 0.2243994752564138
  fa: -0.4709358324617918 fc: 0.10674460463007107 fb: 0.7876530469374095 tramo: 0.1121997376282069
i: 2 a: 0 c: 0.05609986881410345 b: 0.1121997376282069
  fa: -0.4709358324617918 fc: -0.19499911456779484 fb: 0.10674460463007107 tramo: 0.05609986881410345
i: 3 a: 0.05609986881410345 c: 0.08414980322115517 b: 0.1121997376282069
  fa: -0.19499911456779484 fc: -0.0473531301318455 fb: 0.10674460463007107 tramo: 0.028049934407051724
i: 4 a: 0.08414980322115517 c: 0.09817477042468103 b: 0.1121997376282069
  fa: -0.0473531301318455 fc: 0.028889268458366812 fb: 0.10674460463007107 tramo: 0.014024967203525862
i: 5 a: 0.08414980322115517 c: 0.0911622868229181 b: 0.09817477042468103
  fa: -0.0473531301318455 fc: -0.009433548034425865 fb: 0.028889268458366812 tramo: 0.007012483601762931
i: 6 a: 0.0911622868229181 c: 0.09466852862379957 b: 0.09817477042468103
  fa: -0.009433548034425865 fc: 0.00967745591254876 fb: 0.028889268458366812 tramo: 0.0035062418008814655
i: 7 a: 0.0911622868229181 c: 0.09291540772335884 b: 0.09466852862379957
  fa: -0.009433548034425865 fc: 0.00010935286420599155 fb: 0.00967745591254876 tramo: 0.0017531209004407328
i: 8 a: 0.0911622868229181 c: 0.09203884727313846 b: 0.09291540772335884
  fa: -0.009433548034425865 fc: -0.0046652478538238285 fb: 0.00010935286420599155 tramo: 0.0008765604502203733
       raiz en:  0.09203884727313846
error en tramo:  0.0008765604502203733

se encuentra k = 0.09203

estacion orbital cisterna Eje x

s3Eva_2024PAOII_T4 Sin()Cos() Integrar con Cuadratura de Gauss

Ejercicio: 3Eva_2024PAOII_T4 Sin()Cos() Integrar con Cuadratura de Gauss

A= \int_0^7 \Big( \sin(0.1t) \cos(0.7t) +3.7 \Big) \delta t

literal a

Para el planteamiento del integral es necesario observar la gráfica de la función a integrar dentro del intervalo.

integra Gauss Tramos 2La función tiene al menos dos "picos" y dos valles en el intervalo. Por lo que un solo tramo del integral podría aumentar el error de integración numérica con una figura trapezoidal equivalente como propone la cuadratura de Gauss.

Se plantea usar al menos dos tramos, y comparar el resultado con tres tramos para observar el error.

Para dos tramos se dispone de los segmentos entre los puntos
[0, 3.5, 7]

Para tres tramos se tiene los segmentos entre los puntos
[ 0, 7/3, 2(7/3), 7]

literal b

Si se usan dos tramos se tienen los segmentos entre los puntos [0,3.5,7]

tramo = [0, 3.5]

x_a = \frac{3.5+0}{2} - \frac{3.5-0}{2}\left(\frac{1}{\sqrt{3}} \right) = 0.7396 x_b = \frac{3.5+0}{2} + \frac{3.5-0}{2}\left(\frac{1}{\sqrt{3}} \right) = 2.7603 f(0.7396) =\sin(0.1(0.7396)) \cos(0.7(0.7396)) +3.7 =3.7642 f(2.7603) =\sin(0.1(2.7603)) \cos(0.7(2.7603)) +3.7 =3.6036 I \cong \frac{3.5-0}{2}(f(0.7396) + f(2.7603)) I \cong \frac{3.5-0}{2}(3.7642 + 3.6036) = 12.8937

tramo = [3.5, 7]

x_a = \frac{3.5+7}{2} - \frac{7-3.5}{2}\left(\frac{1}{\sqrt{3}} \right) = 4.2396 x_b = \frac{3.5+7}{2} + \frac{7-3.5}{2}\left(\frac{1}{\sqrt{3}} \right) = 6.2603 f(4.2396) =\sin(0.1(4.2396)) \cos(0.7(4.2396)) +3.7 =3.2948 f(6.2603) =\sin(0.1(6.2603)) \cos(0.7(6.2603)) +3.7 =3.5100 I \cong \frac{7-3.5}{2}(f(4.2396) + f(6.2603)) I \cong \frac{7-3.5}{2}(3.2948 + 3.5100) = 11.9085

literal c

Integral total : = 12.8937 + 11.9085 = 24.8022

Si de compara con 3 tramos, el error se estima como la diferencia entre los dos integrales calculados

[xa,xb,f(xa),f(xb)]
[0.49309135261210324, 1.8402419807212302, 3.7463820813248043, 3.75103137375189] 8.746982364256144
[xa,xb,f(xa),f(xb)]
[2.8264246859454367, 4.173575314054563, 3.5894184973574266, 3.304431611500099] 8.042825127000448
[xa,xb,f(xa),f(xb)]
[5.159758019278771, 6.506908647387897, 3.2601677912890605, 3.6049588227871885] 8.009314383088956
Integral:  24.79912187434555

Error usando 2 y 3 tramos, es del orden 10(-3) :

>>> 24.802242263095337 - 24.79912187434555
0.003120388749788816

gráfica con dos tramos:
integra Gauss Tramos 2

s3Eva_2024PAOII_T3 EDO efecto Allee en poblaciones pequeñas

Ejercicio: 3Eva_2024PAOII_T3 EDO efecto Allee en poblaciones pequeñas

literal a

Dada la ecuación diferencial ordinaria, se reemplazan los valores de las constantes:

\frac{dx}{dt} = rx \left(\frac{x}{K}-1 \right) \left(1-\frac{x}{A} \right) \frac{dx}{dt} = 0.7 x \left(\frac{x}{10}-1 \right) \left(1-\frac{x}{50} \right)

siendo h = 0.2

K_1 = 0.2 f(t_i,x_i) = 0.2\left(0.7 x \left(\frac{x}{10}-1 \right) \left(1-\frac{x}{50} \right) \right) K_2 = 0.2 f(t_i+0.2, x_i + K_1) = 0.2\left(0.7(x+K_1) \left(\frac{x+K_1}{10}-1 \right) \left(1-\frac{x+K_1}{50} \right) \right) x_{i+1} = x_i + \frac{K_1+K_2}{2} t_{i+1} = t_i + 0.2

literal b

Para el desarrollo de las iteraciones se requieren valores iniciales. Para la variable independiente tiempo podría usar t = 0.

Para la variable dependiente población, según la descripción se encontraría entre el intervalo [10,50]. Si x0<10 la población se extingue. Si la variable x0>50 se encuentra saturada la capacidad del medio.

Por lo que se propone usar un valor mayor que el mínimo, por ejemplo x0=11 y otro valor que se encuentre en el intervalo.

itera = 0 , t0 = 0, x0 = 11

K_1 = 0.2\left(0.7 (11) \left(\frac{11}{10}-1 \right) \left(1-\frac{11}{50} \right) \right) = 0.1201 K_2 = 0.2\left(0.7(11+0.1201) \left(\frac{11+0.1201}{10}-1 \right) \left(1-\frac{11+0.1201}{50} \right) \right) K_2= 0.1355 x_{i+1} = 11 + \frac{0.1201+0.1355}{2} = 11.1278 t_{i+1} = 0 + 0.2 = 0.2

itera = 1 , t0 = 0.2, x0 = 11.1278

K_1 = 0.2\left(0.7 (11.1278) \left(\frac{11.1278}{10}-1 \right) \left(1-\frac{11.1278}{50} \right) \right) = 0.1366 K_2 = 0.2\left(0.7(11.1278+0.1366) \left(\frac{11.1278+0.1366}{10}-1 \right) \left(1-\frac{11.1278+0.1366}{50} \right) \right) K_2= 0.1544 x_{i+1} = 11.1278 + \frac{0.1366+0.1544}{2} =11.2734 t_{i+1} = 0.2 + 0.2 = 0.4

itera = 2 , t0 = 0.4, x0 = 11.2734

K_1 = 0.2\left(0.7 (11.2734) \left(\frac{11.2734}{10}-1 \right) \left(1-\frac{11.2734}{50} \right) \right) = 0.1556 K_2 = 0.2\left(0.7(11.2734+0.1556) \left(\frac{11.2734+0.1556}{10}-1 \right) \left(1-\frac{11.2734+0.1556}{50} \right) \right) K_2 = 0.1763 x_{i+1} = 11.2734 + \frac{0.1556+0.1763}{2} = 11.4394 t_{i+1} = 0.4 + 0.2 = 0.6

literal c

Según los resultados de las tres iteraciones anteriores, la población crece. El resultado es acorde al concepto descrito en el enunciado para poblaciones mayores al valor mínimo de extinción. En el ejercicio se usó 11 como valor inicial.

Esto se puede comprobar usando el algoritmo y teniendo los resultados presentados en el literal d

literal d

Los resultados tabulados con el algoritmo son:

EDO con Runge-Kutta 2 Orden
 [ti, xi, K1, K2]
[[ 0.         11.          0.          0.        ]
 [ 0.2        11.12785958  0.12012     0.13559915]
 [ 0.4        11.2734037   0.13660392  0.15448432]
 [ 0.6        11.43943235  0.15566412  0.17639319]
 [ 0.8        11.629282    0.17778585  0.20191345]
 [ 1.         11.84695218  0.20356688  0.23177349]
...
[ 5.6        48.42689825  1.26594886  0.67489419]
 [ 5.8        49.04060051  0.81966583  0.4077387 ]
 [ 6.         49.41989811  0.5143157   0.2442795 ]]

La gráfica del ejercicio para 30 muestras es:

EfectoAllee01_x11

Instrucciones en Python: EDO dy/dx, Runge-Kutta con Python

# 3Eva_2024PAOII_T3 EDO efecto Allee en poblaciones pequeñas
# EDO. Método de RungeKutta 2do Orden 
# estima la solucion para muestras espaciadas h en eje x
# valores iniciales x0,y0, entrega tabla[xi,yi,K1,K2]
import numpy as np

def rungekutta2(d1y,x0,y0,h,muestras,
                vertabla=False,precision=6):
    '''solucion a EDO dy/dx, con Runge Kutta de 2do orden
    d1y es la expresi n dy/dx, tambien planteada como f(x,y),
    valores iniciales: x0,y0, tama o de paso h.
    muestras es la cantidad de puntos a calcular. 
    '''
    tamano = muestras + 1
    tabla = np.zeros(shape=(tamano,2+2),dtype=float)
    tabla[0] = [x0,y0,0,0] # incluye el punto [x0,y0]
    
    xi = x0 # valores iniciales
    yi = y0
    for i in range(1,tamano,1):
        K1 = h * d1y(xi,yi)
        K2 = h * d1y(xi+h, yi + K1)

        yi = yi + (K1+K2)/2
        xi = xi + h
        
        tabla[i] = [xi,yi,K1,K2]
       
    if vertabla==True:
        np.set_printoptions(precision)
        print( 'EDO dy/dx con Runge-Kutta 2 Orden')
        print('i, [xi,     yi,     K1,    K2]')
        for i in range(0,tamano,1):
            print(i,tabla[i])

    return(tabla)

# PROGRAMA PRUEBA -------------------
# INGRESO
# d1y = y' = f, d2y = y'' = f'
r = 0.7
K = 10
A = 50
d1x = lambda t,x: r*x*(x/A-1)*(1-x/K)
t0 = 0
x0 = 11
h  = 0.2
muestras = 30

# PROCEDIMIENTO
tabla = rungekutta2(d1x,t0,x0,h,muestras)
xi = tabla[:,0]
yiRK2 = tabla[:,1]

# SALIDA
print( 'EDO con Runge-Kutta 2 Orden')
print(' [ti, xi, K1, K2]')
print(tabla)

# GRAFICA
import matplotlib.pyplot as plt
plt.plot(xi,yiRK2)
plt.plot(xi[0],yiRK2[0],
         'o',color='r', label ='[t0,x0]')
plt.plot(xi[1:],yiRK2[1:], 'o',color='m',
         label ='[ti,xi] Runge-Kutta 2 Orden')

plt.title('EDO: Solución con Runge-Kutta 2do Orden')
plt.xlabel('t')
plt.ylabel('x')
plt.legend()
plt.grid()
plt.show()

 

s3Eva_2024PAOII_T2 Interpolar trayectoria helicóptero

Ejercicio: 3Eva_2024PAOII_T2 Interpolar trayectoria helicóptero

xi = [0.  , 2.50, 3.75, 5.00, 6.25, 7.5 ]
yi = [3.7 , 3.25, 4.05, 4.33, 2.95, 3.22]

literal a

Según la gráfica presentada, los puntos a considerar para todo el intervalo, deberían ser al menos el primero y el último. Para un polinomio de grado 3 se requieren usar 4 muestras, por lo que faltarían dos muestras dentro del intervalo. Los puntos adicionales estarían entre los puntos intermedios, tratando de mantener una distancia equidistante entre ellos y tratar de mantener los cambios de dirección.

helicoptero Interpola 01

Los puntos seleccionados para el ejercicio serán

xi = [0. , 2.50, 5.00, 7.5 ]
fi = [3.7 , 3.25, 4.33, 3.22]

Se puede construir el polinomio con los cualquiera de los métodos para interpolación dado que tienen tamaños de paso iguales entre tramos.

Desarrollando con el método de Lagrange, el polinomio se construye como:

término 1

L_{0} (x) = \frac{(x-2.5)(x-5.0)(x-7.5)}{(0-2.5)(0-5.0)(0-7.5)}

término 2

L_{1} (x) = \frac{(x-0)(x-5.0)(x-7.5)}{(2.5-0)(2.5-5.0)(2.5-7.5)}

término 3

L_{2} (x) = \frac{(x-0)(x-2.5)(x-7.5)}{(5-0)(5-2.5)(5-7.5)}

término 4

L_{3} (x) = \frac{(x-0)(x-2.5)(x-5)}{(7.5-0)(7.5-2.5)(7.5-5)}

se construye el polinomio usando la fórmula para fn(x) para cada valor fi,

p_3(x) = 3.7 \frac{(x-2.5)(x-5.0)(x-7.5)}{(0-2.5)(0-5.0)(0-7.5)} + 3.25 \frac{(x-0)(x-5.0)(x-7.5)}{(2.5-0)(2.5-5.0)(2.5-7.5)} + 4.33 \frac{(x-0)(x-2.5)(x-7.5)}{(5-0)(5-2.5)(5-7.5)} + 3.22 \frac{(x-0)(x-2.5)(x-5)}{(7.5-0)(7.5-2.5)(7.5-5)}

simplificando con Sympy:

Polinomio de Lagrange, expresiones
0.104*x*(x - 7.5)*(x - 5.0) - 0.13856*x*(x - 7.5)*(x - 2.5) + 0.0343466666666667*x*(x - 5.0)*(x - 2.5) - 0.0394666666666667*(x - 7.5)*(x - 5.0)*(x - 2.5)

Polinomio de Lagrange: 
-0.03968*x**3 + 0.42*x**2 - 0.982*x + 3.7
p_3(x) = 3.7 - 0.982x + 0.42 x^2 -0.03968 x^3

literal b

Para verificar que el polinomio pasa por los puntos, se puede usar una gráfica o al menos dos puntos usados para crear el polinomio:

p_3(2.5) = 3.7 - 0.982(2.5) + 0.42 (2.5)^2 -0.03968 (2.5)^3 = 3.25 p_3(5) = 3.7 - 0.982(5) + 0.42 (5)^2 -0.03968 (5)^3 = 4.33
>>> polisimple
-0.03968*x**3 + 0.42*x**2 - 0.982*x + 3.7
>>> polisimple.subs(x,2.5)
3.25000000000000
>>> polisimple.subs(x,5)
4.33000000000000
>>>

Se comprueba que los valores obtenidos corresponden a las muestras, por lo que el polinomio cumple con los criterios básicos de interpolación. La gráfica permite verificar también el resultado.

helicoptero Interpola 02

literal c

Error en puntos no usados de las muestras

p_3(3.75) = 3.7 - 0.982(3.75) + 0.42 (3.75)^2 -0.03968 (3.75)^3 = 3.83125

error = |3.83125 - 4.05| = 0.218

p_3(6.25) = 3.7 - 0.982(6.25) + 0.42 (6.25)^2 -0.03968 (6.25)^3 = 4.28125

error = |4.28125 - 4.05| = 1.3312

literal d

Observando las gráficas de la trayectoria construida junto a las funciones descritas en el tema 1 se tiene que:

Un polinomio de grado 3 es insuficiente para describir la trayectoria, se debe aumentar el grado del polinomio para ajustar mejor la curva.

Por ejemplo, usando todos los puntos, la trayectoria y el polinomio son mas cercanas aunque no iguales.

helicoptero Interpola 03literal e

Encontrar el error en P(5), como x=5 y es parte de los puntos de muestra, el error debería ser cero. Siempre y cuando x=5 sea parte de los puntos seleccionados.

p_3(5) = 3.7 - 0.982(5) + 0.42 (5)^2 -0.03968 (5)^3 = 4.33

error = | 4.33-4.33| = 0

literal f

Los resultados con el algoritmo de Lagrange se muestran como:

    valores de fi:  [3.7  3.25 4.33 3.22]
divisores en L(i):  [-93.75  31.25 -31.25  93.75]

Polinomio de Lagrange, expresiones
0.104*x*(x - 7.5)*(x - 5.0) - 0.13856*x*(x - 7.5)*(x - 2.5) + 0.0343466666666667*x*(x - 5.0)*(x - 2.5) - 0.0394666666666667*(x - 7.5)*(x - 5.0)*(x - 2.5)

Polinomio de Lagrange: 
-0.03968*x**3 + 0.42*x**2 - 0.982*x + 3.7

Algoritmo en Python. Interpolación polinómica de Lagrange

# 3Eva_2024PAOII_T2 Interpolar trayectoria helicóptero
# Interpolacion de Lagrange
# divisoresL solo para mostrar valores
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt

# INGRESO , Datos de prueba
# todos los datos
xj = [0.  , 2.50, 3.75, 5.00, 6.25, 7.5 ]
fj = [3.7 , 3.25, 4.05, 4.33, 2.95, 3.22]

# datos seleccionados
xi = [0.  , 2.50, 5.00, 7.5 ]
fi = [3.7 , 3.25, 4.33, 3.22]

# trayectoria
gx = lambda t: 0.5*t +0 *t
gy = lambda t: np.sin(0.10*t)*np.cos(0.7*t)+ 3.7

ta = 0 ; tb = 15
muestrast = 7
muestrasj = 4*muestrast

# PROCEDIMIENTO
# trayectoria
tj = np.linspace(ta,tb,muestrasj)
gxj = gx(tj)
gyj = gy(tj)

# Interpolación
xi = np.array(xi,dtype=float)
fi = np.array(fi,dtype=float)
# Polinomio de Lagrange
n = len(xi)
x = sym.Symbol('x')
polinomio = 0
divisorL = np.zeros(n, dtype = float)
for i in range(0,n,1):
    
    # Termino de Lagrange
    numerador = 1
    denominador = 1
    for j  in range(0,n,1):
        if (j!=i):
            numerador = numerador*(x-xi[j])
            denominador = denominador*(xi[i]-xi[j])
    terminoLi = numerador/denominador

    polinomio = polinomio + terminoLi*fi[i]
    divisorL[i] = denominador

# simplifica el polinomio
polisimple = polinomio.expand()

# para evaluación numérica
px = sym.lambdify(x,polisimple)

# Puntos para la gráfica
muestras = 101
a = np.min(xi)
b = np.max(xi)
pxi = np.linspace(a,b,muestras)
pfi = px(pxi)

# SALIDA
print('    valores de fi: ',fi)
print('divisores en L(i): ',divisorL)
print()
print('Polinomio de Lagrange, expresiones')
print(polinomio)
print()
print('Polinomio de Lagrange: ')
print(polisimple)

# Gráfica
plt.plot(gxj,gyj,color='orange', label = 'trayectoria')
plt.plot(xi,fi,'o', label = 'muestras')
plt.plot(pxi,pfi,color='green',linestyle='dashed', label = 'P(x)')
plt.legend()
plt.xlabel('xi')
plt.ylabel('fi')
plt.grid()
plt.title('Interpolación Lagrange')
plt.show()

s3Eva_2024PAOII_T1 Accidente entre aeronaves

Ejercicio: 3Eva_2024PAOII_T1 Accidente entre aeronaves

literal a

La distancia entre las aeronaves se determina a partir de las ecuaciones proporcionadas en el enunciado.

d = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2 + (z_2-z_1)^2}

La ecuación también mantiene la forma y el mínimo si se utiliza el cuadrado de la distancia:

D = d^2 = (x_2-x_1)^2 + (y_2-y_1)^2 + (z_2-z_1)^2

Las diferencias de distancia por eje pueden ser convergentes hacia el punto de impacto, dado que se conoce que el accidente ya ocurrió. Por lo que también se pueden revisar las distancias entre ejes en lugar de la distancia total en 3D, simplificando un poco el ejercicio. Observe la gráfica proporcionada:

accidente entre aeronaces trayectoria

Avión Helicóptero distancia por eje
Ax(t) = 5.1 Hx(t) = 0.5t |0.5t-5.1|
Ay(t) = 0.4t Hy(t) = sin(0.1t)cos(0.7t)+3.7 |sin(0.1t)cos(0.7t) + 3.7-0.4|
Az(t) = 0.5 e^{-0.2t} + 0.3 Hz(t) = 0.36 |0.36 - (0.5 e^{-0.2t} + 0.3)|
D = (0.5t-5.1)^2 + (sin(0.1t)cos(0.7t)+3.7-0.4t)^2 + (0.36-(0.5 e^{-0.2t} + 0.3))^2 dx =0.5t-5.1 dy = sin(0.1t)cos(0.7t) + 3.7-0.4 dz = 0.36 - (0.5 e^{-0.2t} + 0.3)

Se realiza la gráfica para la distancia al cuadrado Di y las distancias por cada eje dxi, dyi, dzi :

accidenteaereo Distancia Cuadrado

Por lo que el resultado también se podría determinar usando por ejemplo el eje y. La ecuación a buscar la distancia mínima, punto de choque o cruce por cero podría ser:

f(t) =dy(t)= sin(0.1t)cos(0.7t) + 3.7-0.4t = 0

literal b

Por la gráfica se puede obtener un intervalo de búsqueda entre [8, 12], que usando solo las distancias en el eje y, se tiene:

dy(8) =1.0563 dy(12) =-1.5839

literal c

Se pide usar un método de búsqueda de raíces, pudiendo seleccionar Bisección en el intervalo encontrado en el literal b.

iteración 1

a = 8, b=12 c = \frac{a+b}{2} = \frac{8+12}{2} = 10 f(8) = 1.0563 f(10) =sin(0.1(10))cos(0.7(10)) + 3.7-0.4(10) = 0.3343 f(12) = -1.5839

cambio de signo a la derecha

a = 10, b = 12 tramo = |12-10| =2

iteración 2

a = 10, b=12 c = \frac{10+12}{2} = 11 f(11) =sin(0.1(11))cos(0.7(11)) + 3.7-0.4(11) = -0.5633

cambio de signo a la izquierda

a = 10, b = 11 tramo = |11-10| = 1

iteración 3

a = 10, b=11 c = \frac{10+11}{2} = 10.5 f(10.5) =sin(0.1(10.5))cos(0.7(10.5)) + 3.7-0.4(10.5) = -0.0811

cambio de signo a la izquierda

a = 10, b = 10.5 tramo = |10.5-10| = 0.5

literal d

La variable independiente en el ejercicio es tiempo 't', que podría ser segundos. Si la tolerancia se estima en milisegundos, tolera = 10-3 .

El error se ha calculado en cada iteración

literal e

El error disminuye en cada iteración, por lo que el método converge.

La distancia mínima entre las aeronaves no tiene que llegar a cero para que se produzca un accidente. Las dimensiones de las aeronaves muestran que se encuentran entre 70m y 4 m, por lo que se estima que debe existir una separación mayor a 70 metros en cualquiera de los ejes para evitar un accidente. Si las coordenadas se estiman en Km, la tolerancia sería de 0.070 Km al considerar más de 70 metros como la distancia segura.

literal f

Usando el algoritmo se encuentra la raíz en:

i ['a', 'c', 'b'] ['f(a)', 'f(c)', 'f(b)']
   tramo
0 [8, 10.0, 12] [ 1.0564  0.3344 -1.584 ]
   2.0
1 [10.0, 11.0, 12] [ 0.3344 -0.5633 -1.584 ]
   1.0
2 [10.0, 10.5, 11.0] [ 0.3344 -0.0811 -0.5633]
   0.5
3 [10.0, 10.25, 10.5] [ 0.3344  0.1368 -0.0811]
   0.25
4 [10.25, 10.375, 10.5] [ 0.1368  0.0302 -0.0811]
   0.125
5 [10.375, 10.4375, 10.5] [ 0.0302 -0.0249 -0.0811]
   0.0625
6 [10.375, 10.40625, 10.4375] [ 0.0302  0.0028 -0.0249]
   0.03125
7 [10.40625, 10.421875, 10.4375] [ 0.0028 -0.011  -0.0249]
   0.015625
8 [10.40625, 10.4140625, 10.421875] [ 0.0028 -0.0041 -0.011 ]
   0.0078125
9 [10.40625, 10.41015625, 10.4140625] [ 0.0028 -0.0007 -0.0041]
   0.00390625
10 [10.40625, 10.408203125, 10.41015625] [ 0.0028  0.001  -0.0007]
   0.001953125
11 [10.408203125, 10.4091796875, 10.41015625] [ 0.001   0.0002 -0.0007]
   0.0009765625
raíz en:  10.4091796875

Por lo que las coordenadas de choque entre aeronaves será:

Avión Helicóptero distancia por eje
Ax(t) = 5.1 Hx(t) = 0.5 (10.40) = 5.2 |5.1-5.2| = 0.1
Ay(t) = 0.4(10.4) = 4.16 Hy(t) = sin(0.1(10.40))cos(0.7(10.40))+3.7 = 4.168 |4.16 - 4.168| = 0.008
Az(10.4) = 0.5 e^{-0.2(10.4)} + 0.3

= 0.3624

Hz(t) = 0.36 |0.3624 - 0.36|  = 0.0024

Instrucciones en Python para Gráfica de distancias

import numpy as np
import matplotlib.pyplot as plt
import sympy as sym

# INGRESO
# Avión Aterriza
Ax = lambda t: 5.1 + 0*t
Ay = lambda t: 0.4*t
Az = lambda t: 0.5*np.exp(-0.2*t) + 0.3
# helicóptero
Hx = lambda t: 0.5*t + 0*t
Hy = lambda t: np.sin(0.10*t)*np.cos(0.7*t)+ 3.7
Hz = lambda t: 0.36 + 0*t

a = 0
b = 6/0.5 # x entre[0,6] usando gx(t)= 6
muestras = 41

# PROCEDIMIENTO
# Distancia por ejes
dx = lambda t: Hx(t) - Ax(t)
dy = lambda t: Hy(t) - Ay(t)
dz = lambda t: Hz(t) - Az(t)
# Distancia 3D
distancia2 = lambda t: dx(t)**2 + dy(t)**2 + dz(t)**2

# Simulacion en segmento t=[a,b]
ti = np.linspace(a,b,muestras)
dxi = dx(ti)
dyi = dy(ti)
dzi = dz(ti)

Di = distancia2(ti)

# SALIDA
print(dy(8))
print(dy(12))

plt.plot(ti,Di, label='Di')
plt.plot(ti,dxi,label='dxi')
plt.plot(ti,dyi,label='dyi')
plt.plot(ti,dzi,label='dzi')
plt.xlabel('ti')
plt.ylabel('distancia2')
plt.grid()
plt.legend()
plt.show()

Instrucciones en Python - Algoritmo Bisección

# 3Eva_2024PAOII_T1 Accidente entre aeronaves
# Algoritmo de Bisección
# [a,b] se escogen de la gráfica de la función
# error = tolera

import numpy as np
import matplotlib.pyplot as plt

# Algoritmo de Bisección
# [a,b] se escogen de la gráfica de la función
# error = tolera
import numpy as np

def biseccion(fx,a,b,tolera,iteramax = 20, vertabla=False, precision=4):
    '''
    Algoritmo de Bisección
    Los valores de [a,b] son seleccionados
    desde la gráfica de la función
    error = tolera
    '''
    fa = fx(a)
    fb = fx(b)
    tramo = np.abs(b-a)
    itera = 0
    cambia = np.sign(fa)*np.sign(fb)
    if cambia<0: # existe cambio de signo f(a) vs f(b)
        if vertabla==True:
            print('método de Bisección')
            print('i', ['a','c','b'],[ 'f(a)', 'f(c)','f(b)'])
            print('  ','tramo')
            np.set_printoptions(precision)
            
        while (tramo>=tolera and itera<=iteramax):
            c = (a+b)/2
            fc = fx(c)
            cambia = np.sign(fa)*np.sign(fc)
            if vertabla==True:
                print(itera,[a,c,b],np.array([fa,fc,fb]))
            if (cambia<0):
                b = c
                fb = fc
            else:
                a = c
                fa = fc
            tramo = np.abs(b-a)
            if vertabla==True:
                print('  ',tramo)
            itera = itera + 1
        respuesta = c
        # Valida respuesta
        if (itera>=iteramax):
            respuesta = np.nan

    else: 
        print(' No existe cambio de signo entre f(a) y f(b)')
        print(' f(a) =',fa,',  f(b) =',fb) 
        respuesta=np.nan
    return(respuesta)

# INGRESO
fx = lambda t: np.sin(0.10*t)*np.cos(0.7*t)+ 3.7 - 0.4*t 
a = 8
b = 12
tolera = 0.001

# PROCEDIMIENTO
respuesta = biseccion(fx,a,b,tolera,vertabla=True)
# SALIDA
print('raíz en: ', respuesta)

s2Eva_2024PAOII_T2 EDO Mayoría entre grupos Azules y Rojos

Ejercicio: 2Eva_2024PAOII_T2 EDO Mayoría entre grupos Azules y Rojos

literal a

La población anual del país se describe con x(t), con tasas de natalidad a = 0.018 y mortalidad b = 0.012,

f(t,x,,y) = \frac{\delta x}{\delta t} = 0.018 x - 0.012 x^2

La población de Rojos es minoría y se describe con y(t). Los valore iniciales son: x(0)=2 , y(0)=0.5 y tamaño de paso h=0.5

g(t,x,y) = \frac{\delta y}{\delta t} = 0.026x - 0.017 y^2 +0.19 (0.012) (x-y)

el algoritmo de Runge-Kutta para sistemas de ecuaciones aplicado al ejercicio:

K1x = h f(t,x,y) = h (0.018 x - 0.012 x^2) K1y = h g(t,x,y) = h \Big(0.026x - 0.017 y^2 +0.19 (0.012) (x-y)\Big) K2x = h f(t+h,x+K1x,y+K1y) = h (0.018 (x+K1x) - 0.012 (x+K1x)^2) K2y = h g(t+h,x+K1x,y+K1y) = h \Big(0.026(x+K1x) - 0.017 (y + K1y)^2 +0.19 (0.012) ((x+K1x)-(y + K1y))\Big) x[i+1] = x[i] + \frac{K1x+K2x}{2} y[i+1] = y[i] + \frac{K1y+K2y}{2} t[i+1] = t[i] + h

literal b

Desarrolle tres iteraciones con expresiones completas para x(t), y(t) con tamaño de paso h=0.5.

itera = 0

K1x = 0.5 (0.018 (2) - 0.012 (2)^2) = -0.006 K1y = 0.5 \Big(0.026(2) - 0.017 (0.5)^2 +0.19 (0.012) ((2)-(0.5))\Big) = 0.006085 K2x = 0.5 (0.018 (2-0.006) - 0.012 (2-0.006)^2) = -0.00591 K2y = 0.5 \Big(0.026(2-0.006) - 0.017 (0.5 + 0.006085)^2 +0.19 (0.012) ((2-0.006)-(0.5 + 0.006085))\Big) = 0.006098 x[1] = 2 + \frac{-0.006+-0.00591}{2} = 1.9940 y[1] = 0.5 + \frac{0.006085+0.006098}{2} = 0.5060 t[1] = 0 + 0.5 =0.5

itera = 1

K1x = 0.5 (0.018 (1.9940) - 0.012 (1.9940)^2) =-0.005911 K1y = 0.5 \Big(0.0261.9940 - 0.017 (0.5060)^2 +0.19 (0.012) (1.9940-y)\Big) = 0.006098 K2x = 0.5 (0.018 (1.9940-0.005911) - 0.012 (1.9940-0.005911)^2 = -0.005823 K2y = 0.5 \Big(0.026(1.9940-0.005911) - 0.017 (0.5060 + 0.006098)^2 +0.19 (0.012) ((1.9940-0.005911)-(0.5060 + 0.006098))\Big) = 0.006111 x[2] = 1.9940 + \frac{-0.005911-0.005823}{2} = 1.988178 y[2] = 0.5060 + \frac{0.006098+0.006111}{2} = 0.512196 t[2] = 0.5 + 0.5 = 1

itera = 2

K1x = 0.5 (0.018 (1.988178) - 0.012 (1.988178)^2) =-0.005824 K1y = 0.5 \Big(0.026(0.512196) - 0.017 (0.512196)^2 +0.19 (0.012) (1.988178-0.512196)\Big) = 0.006111 K2x = 0.5 (0.018 (1.988178-0.005824) - 0.012 (1.988178-0.005824)^2) =-0.005737 K2y = 0.5 \Big(0.026(0.512196+0.006111) - 0.017 (0.512196 + 0.006111 )^2 +0.19 (0.012) ((1.988178-0.005911)-(0.512196 + 0.006111)\Big) =0.006124 x[3] = (1.988178) + \frac{-0.005824-0.005737}{2} = 1.982398 y[3] = 0.512196 + \frac{0.006111+0.006124}{2} = 0.518314 t[3] = 1 + 0.5 = 1.5

literal c

Los resultados para x(t) de las primeras iteraciones indican que la población total del país disminuye en el intervalo observado. Se puede comprobar al usar el algoritmo para mas iteraciones como se muestra en la gráfica.

Mayoría Azules Rojos

literal d

Los resultados para y(t) muestran que la población clasificada como Rojo aumenta en el intervalo observado. Sin embargo la mayoría sigue siendo Azul para las tres iteraciones realizadas.

literal e

La población y(t) alcanza la mitad de la población cuanto t cambia de 30.5 a 31. Tiempo en el que de realizar elecciones, ganarían los Rojos.

Usando el algoritmo, se añade una columna con la condición que MayoriaY = yi>xi/2, que se convierte a 1 o verdadero cuando se cumple la condición. Con lo que se encuentra el cambio de mayoría a Rojo.

Runge-Kutta Segundo Orden
i  [ ti,  xi,  yi ]
   [ K1x,  K1y,  K2x,  K2y , MayoriaY]
0 [0.  2.  0.5]
   [0. 0. 0. 0. 0.]
1 [0.5      1.994045 0.506092]
  [-0.006     0.006085 -0.00591   0.006098  0.      ]
2 [1.       1.988178 0.512196]
  [-0.005911  0.006098 -0.005823  0.006111  0.      ]
3 [1.5      1.982398 0.518314]
  [-0.005824  0.006111 -0.005737  0.006124  0.      ]
4 [2.       1.976702 0.524443]
…
   [-0.002761  0.005927 -0.002727  0.005907  0.      ]
60 [30.        1.755801  0.869617]
   [-0.002728  0.005907 -0.002695  0.005887  0.      ]
61 [30.5       1.753123  0.875494]
   [-0.002695  0.005887 -0.002662  0.005867  0.      ]
62 [31.        1.750476  0.88135 ]
   [-0.002663  0.005867 -0.002631  0.005846  1.      ]
63 [31.5       1.747861  0.887185]
   [-0.002631  0.005846 -0.002599  0.005824  1.      ]
64 [32.        1.745277  0.892998]
   [-0.002599  0.005824 -0.002568  0.005802  1.      ]
65 [32.5       1.742724  0.898789]
   [-0.002568  0.005802 -0.002538  0.00578   1.      ]
66 [33.        1.740201  0.904558]
   [-0.002538  0.00578  -0.002508  0.005757  1.      ]
67 [33.5       1.737708  0.910303]
   [-0.002508  0.005757 -0.002478  0.005734  1.      ]

 

s2Eva_2024PAOII_T1 Área de incendio forestal en Cerro Azul

Ejercicio: 2Eva_2024PAOII_T1 Área de incendio forestal en Cerro Azul

Area Incendio Cerro Azul 202412 plt

literal a

Calcular los tamaños de paso dxi en cada frontera y plantear la integración con fórmulas compuestas.

Usando los datos de las coordenadas de obtiene cada dxi = xi[i+1]-xi[i]. De forma semejante se encuentra cada dxj, Seleccionando los métodos según se disponga de tamaño de paso iguales y consecutivos como se muestra en la tabla ampliada.

Frontera superior

Trapecio Trapecio Trapecio Trapecio Simpson 1/3
Trapecio Trapecio Simpson 1/3 Trapecio Simpson 1/3
dxi 40 100 -30 66 20 20 79 125 54 50 50 20 20 --
xi 410 450 550 520 586 606 626 705 830 884 934 984 1004 1024
yi 131 194 266 337 402 483 531 535 504 466 408 368 324 288

Frontera Inferior

Trapecio
Simpson 3/8
dxj 190 190 190 44 --
xj 410 600 790 980 1024
yj 131 124 143 231 288

Desarrollando con instrucciones sobre el arreglo en Python con la instrucción np.diff(xi).

>>> xi = [410, 450, 550, 520, 586, 606, 626, 705, 830,
          884, 934, 984, 1004, 1024]
>>> xi = np.array(xi)
>>> dxi = np.diff(xi)
>>> dxi
array([ 40, 100, -30, 66, 20, 20, 79, 125, 54,
        50, 50, 20, 20])
>>> xj = [410, 600, 790, 980, 1024]
>>> dxj = np.array(xj)
>>> dxj = np.diff(xj)
>>> dxj
array([190, 190, 190, 44])
>>>

literal b

Desarrollar las expresiones del área para las coordenadas de la frontera superior, según el literal a. Cuando se tienen dos tamaños de paso iguales se usa Simpson de 1/3.

I_{superior} = 40\Big(\frac{131+194}{2}\Big) +100\Big(\frac{194+266}{2}\Big) + -30\Big(\frac{266+337}{2}\Big) +66\Big(\frac{337+402}{2}\Big)+ + \frac{20}{3}\Big(402+4(483)+531\Big) + +79\Big(\frac{531+535}{2}\Big) +125\Big(\frac{535+504}{2}\Big) + 54\Big(\frac{504+466}{2}\Big) + + \frac{50}{3}\Big(466+4(408)+368\Big) + + \frac{20}{3}\Big(368+4(324)+288\Big) I_{superior} = 254753,33

literal c

Realice los cálculos para la frontera inferior y encuentre el área afectada. Con tres tamaños de paso iguales se usa Simpson de 3/8.

I_{Inferior} = \frac{3}{8}(190)\Big(131+3(124)+3(143)+231\Big) +44\Big(\frac{231+288}{2}\Big) = 94281,75

Área total afectada:

A_{afectada} = I_{superior} - I_{Inferior} = 254753,33 -94281,75 A_{afectada} = 160.471,58

literal d

Estime la cota de error en los cálculos.

Considere usar las unidades en Km en lugar de metros para los tamaños de paso.

Error_{truncaSup} = O( 0.040^3) + O(0. 100^3)+ O( (-0.030)^3) + O( 0.066^3)+ + O( 0.020^5) + O(0. 079^3)+ O( 0.125^3) + O( 0.054^3)+ + O( 0.050^5) + O( 0.020^5) Error_{truncaInf} = O( 0.190^5) + O(0. 044^3)