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

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

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

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]

xa=3.5+023.502(13)=0.7396 x_a = \frac{3.5+0}{2} - \frac{3.5-0}{2}\Big(\frac{1}{\sqrt{3}} \Big) = 0.7396 xb=3.5+02+3.502(13)=2.7603 x_b = \frac{3.5+0}{2} + \frac{3.5-0}{2}\Big(\frac{1}{\sqrt{3}} \Big) = 2.7603 f(0.7396)=sin(0.1(0.7396))cos(0.7(0.7396))+3.7=3.7642 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 f(2.7603) =\sin(0.1(2.7603)) \cos(0.7(2.7603)) +3.7 =3.6036 I3.502(f(0.7396)+f(2.7603)) I \cong \frac{3.5-0}{2}(f(0.7396) + f(2.7603)) I3.502(3.7642+3.6036)=12.8937 I \cong \frac{3.5-0}{2}(3.7642 + 3.6036) = 12.8937

tramo = [3.5, 7]

xa=3.5+7273.52(13)=4.2396 x_a = \frac{3.5+7}{2} - \frac{7-3.5}{2}\Big(\frac{1}{\sqrt{3}} \Big) = 4.2396 xb=3.5+72+73.52(13)=6.2603 x_b = \frac{3.5+7}{2} + \frac{7-3.5}{2}\Big(\frac{1}{\sqrt{3}} \Big) = 6.2603 f(4.2396)=sin(0.1(4.2396))cos(0.7(4.2396))+3.7=3.2948 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 f(6.2603) =\sin(0.1(6.2603)) \cos(0.7(6.2603)) +3.7 =3.5100 I73.52(f(4.2396)+f(6.2603)) I \cong \frac{7-3.5}{2}(f(4.2396) + f(6.2603)) I73.52(3.2948+3.5100)=11.9085 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:

dxdt=rx(xK1)(1xA) \frac{dx}{dt} = rx \Big(\frac{x}{K}-1 \Big) \Big(1-\frac{x}{A} \Big) dxdt=0.7x(x101)(1x50) \frac{dx}{dt} = 0.7 x \Big(\frac{x}{10}-1 \Big) \Big(1-\frac{x}{50} \Big)

siendo h = 0.2

K1=0.2f(ti,xi)=0.2(0.7x(x101)(1x50)) K_1 = 0.2 f(t_i,x_i) = 0.2\Big(0.7 x \Big(\frac{x}{10}-1 \Big) \Big(1-\frac{x}{50} \Big) \Big) K2=0.2f(ti+0.2,xi+K1) K_2 = 0.2 f(t_i+0.2, x_i + K_1) =0.2(0.7(x+K1)(x+K1101)(1x+K150)) = 0.2\Big(0.7(x+K_1) \Big(\frac{x+K_1}{10}-1 \Big) \Big(1-\frac{x+K_1}{50} \Big) \Big) xi+1=xi+K1+K22 x_{i+1} = x_i + \frac{K_1+K_2}{2} ti+1=ti+0.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

K1=0.2(0.7(11)(11101)(11150))=0.1201 K_1 = 0.2\Big(0.7 (11) \Big(\frac{11}{10}-1 \Big) \Big(1-\frac{11}{50} \Big) \Big) = 0.1201 K2=0.2(0.7(11+0.1201)(11+0.1201101)(111+0.120150)) K_2 = 0.2\Big(0.7(11+0.1201) \Big(\frac{11+0.1201}{10}-1 \Big) \Big(1-\frac{11+0.1201}{50} \Big) \Big) K2=0.1355 K_2= 0.1355 xi+1=11+0.1201+0.13552=11.1278 x_{i+1} = 11 + \frac{0.1201+0.1355}{2} = 11.1278 ti+1=0+0.2=0.2 t_{i+1} = 0 + 0.2 = 0.2

itera = 1 , t0 = 0.2, x0 = 11.1278

K1=0.2(0.7(11.1278)(11.1278101)(111.127850))=0.1366 K_1 = 0.2\Big(0.7 (11.1278) \Big(\frac{11.1278}{10}-1 \Big) \Big(1-\frac{11.1278}{50} \Big) \Big) = 0.1366 K2=0.2(0.7(11.1278+0.1366)(11.1278+K1101)(111.1278+0.136650)) K_2 = 0.2\Big(0.7(11.1278+0.1366) \Big(\frac{11.1278+K_1}{10}-1 \Big) \Big(1-\frac{11.1278+0.1366}{50} \Big) \Big) K2=0.1544 K_2= 0.1544 xi+1=11.1278+0.1366+0.15442=11.2734 x_{i+1} = 11.1278 + \frac{0.1366+0.1544}{2} =11.2734 ti+1=0.2+0.2=0.4 t_{i+1} = 0.2 + 0.2 = 0.4

itera = 2 , t0 = 0.4, x0 = 11.2734

K1=0.2(0.7(11.2734)(11.2734101)(111.273450))=0.1556 K_1 = 0.2\Big(0.7 (11.2734) \Big(\frac{11.2734}{10}-1 \Big) \Big(1-\frac{11.2734}{50} \Big) \Big) = 0.1556 K2=0.2(0.7(11.2734+0.1556)(11.2734+0.1556101)(1(11.2734+0.1556)50)) K_2 = 0.2\Big(0.7(11.2734+0.1556) \Big(\frac{11.2734+0.1556}{10}-1 \Big) \Big(1-\frac{(11.2734+0.1556)}{50} \Big) \Big) K2=0.1763 K_2 = 0.1763 xi+1=11.2734+0.1556+0.17632=11.4394 x_{i+1} = 11.2734 + \frac{0.1556+0.1763}{2} = 11.4394 ti+1=0.4+0.2=0.6 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

# 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):
    # Runge Kutta de 2do orden
    tamano = muestras + 1
    tabla = np.zeros(shape=(tamano,2+2),dtype=float)
    
    # incluye el punto [x0,y0]
    tabla[0] = [x0,y0,0,0]
    xi = x0
    yi = y0
    for i in range(1,tamano,1):
        K1 = h * d1y(xi,yi)
        K2 = h * d1y(xi+h, yi + K1)

        yi = yi + (1/2)*(K1+K2)
        xi = xi + h
        
        tabla[i] = [xi,yi,K1,K2]
    return(tabla)
# PROGRAMA PRUEBA
# Ref Rodriguez 9.1.1 p335 ejemplo.
# prueba y'-y-x+(x**2)-1 =0, y(0)=1

# 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
# np.set_printoptions(precision=4)
print( 'EDO con Runge-Kutta 2 Orden')
print(' [ti, xi, K1, K2]')
print(tabla)

# Gráfica
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() #comentar para la siguiente gráfica

 

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

L0(x)=(x2.5)(x5.0)(x7.5)(02.5)(05.0)(07.5) 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

L1(x)=(x0)(x5.0)(x7.5)(2.50)(2.55.0)(2.57.5) 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

L2(x)=(x0)(x2.5)(x7.5)(50)(52.5)(57.5) L_{2} (x) = \frac{(x-0)(x-2.5)(x-7.5)}{(5-0)(5-2.5)(5-7.5)}

término 4

L3(x)=(x0)(x2.5)(x5)(7.50)(7.52.5)(7.55) 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,

p3(x)=3.7(x2.5)(x5.0)(x7.5)(02.5)(05.0)(07.5) 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(x0)(x5.0)(x7.5)(2.50)(2.55.0)(2.57.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(x0)(x2.5)(x7.5)(50)(52.5)(57.5) + 4.33 \frac{(x-0)(x-2.5)(x-7.5)}{(5-0)(5-2.5)(5-7.5)} +3.22(x0)(x2.5)(x5)(7.50)(7.52.5)(7.55) + 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
p3(x)=3.70.982x+0.42x20.03968x3 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:

p3(2.5)=3.70.982(2.5)+0.42(2.5)20.03968(2.5)3=3.25 p_3(2.5) = 3.7 - 0.982(2.5) + 0.42 (2.5)^2 -0.03968 (2.5)^3 = 3.25 p3(5)=3.70.982(5)+0.42(5)20.03968(5)3=4.33 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

p3(3.75)=3.70.982(3.75)+0.42(3.75)20.03968(3.75)3=3.83125 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

p3(6.25)=3.70.982(6.25)+0.42(6.25)20.03968(6.25)3=4.28125 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.

p3(5)=3.70.982(5)+0.42(5)20.03968(5)3=4.33 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

# 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=(x2x1)2+(y2y1)2+(z2z1)2 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=d2=(x2x1)2+(y2y1)2+(z2z1)2 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.5e0.2t+0.3 Az(t) = 0.5 e^{-0.2t} + 0.3 Hz(t) = 0.36 |0.36 – (0.5 e^{-0.2t} + 0.3)|
D=(0.5t5.1)2+(sin(0.1t)cos(0.7t)+3.70.4t)2+(0.36(0.5e0.2t+0.3))2 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.5t5.1 dx =0.5t-5.1 dy=sin(0.1t)cos(0.7t)+3.70.4 dy = sin(0.1t)cos(0.7t) + 3.7-0.4 dz=0.36(0.5e0.2t+0.3) 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.70.4t=0 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(8) =1.0563 dy(12)=1.5839 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 a = 8, b=12 c=a+b2=8+122=10 c = \frac{a+b}{2} = \frac{8+12}{2} = 10 f(8)=1.0563 f(8) = 1.0563 f(10)=sin(0.1(10))cos(0.7(10))+3.70.4(10)=0.3343 f(10) =sin(0.1(10))cos(0.7(10)) + 3.7-0.4(10) = 0.3343 f(12)=1.5839 f(12) = -1.5839

cambio de signo a la derecha

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

iteración 2

a=10,b=12 a = 10, b=12 c=10+122=11 c = \frac{10+12}{2} = 11 f(11)=sin(0.1(11))cos(0.7(11))+3.70.4(11)=0.5633 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 a = 10, b = 11 tramo=1110=1 tramo = |11-10| = 1

iteración 3

a=10,b=11 a = 10, b=11 c=10+112=10.5 c = \frac{10+11}{2} = 10.5 f(10.5)=sin(0.1(10.5))cos(0.7(10.5))+3.70.4(10.5)=0.0811 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 a = 10, b = 10.5 tramo=10.510=0.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.5e0.2(10.4)+0.3 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 Mayoría entre grupos Azules y Rojos

Ejercicio: 2Eva_2024PAOII_T2 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)=δxδt=0.018x0.012x2 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)=δyδt=0.026x0.017y2+0.19(0.012)(xy) 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=hf(t,x,y)=h(0.018x0.012x2) K1x = h f(t,x,y) = h (0.018 x - 0.012 x^2) K1y=hg(t,x,y)=h(0.026x0.017y2+0.19(0.012)(xy)) K1y = h g(t,x,y) = h \Big(0.026x - 0.017 y^2 +0.19 (0.012) (x-y)\Big) K2x=hf(t+h,x+K1x,y+K1y) K2x = h f(t+h,x+K1x,y+K1y) =h(0.018(x+K1x)0.012(x+K1x)2) = h (0.018 (x+K1x) - 0.012 (x+K1x)^2) K2y=hg(t+h,x+K1x,y+K1y) K2y = h g(t+h,x+K1x,y+K1y) =h(0.026(x+K1x)0.017(y+K1y)2 = h \Big(0.026(x+K1x) - 0.017 (y + K1y)^2 +0.19(0.012)((x+K1x)(y+K1y)))+0.19 (0.012) ((x+K1x)-(y + K1y))\Big) x[i+1]=x[i]+K1x+K2x2 x[i+1] = x[i] + \frac{K1x+K2x}{2} y[i+1]=y[i]+K1y+K2y2 y[i+1] = y[i] + \frac{K1y+K2y}{2} t[i+1]=t[i]+h 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 K1x = 0.5 (0.018 (2) - 0.012 (2)^2) = -0.006 K1y=0.5(0.026(2)0.017(0.5)2+0.19(0.012)((2)(0.5))) K1y = 0.5 \Big(0.026(2) - 0.017 (0.5)^2 +0.19 (0.012) ((2)-(0.5))\Big) =0.006085= 0.006085 K2x=0.5(0.018(20.006)0.012(20.006)2)=0.00591 K2x = 0.5 (0.018 (2-0.006) - 0.012 (2-0.006)^2) = -0.00591 K2y=0.5(0.026(20.006)0.017(0.5+0.006085)2 K2y = 0.5 \Big(0.026(2-0.006) - 0.017 (0.5 + 0.006085)^2 +0.19(0.012)((20.006)(0.5+0.006085)))=0.006098+0.19 (0.012) ((2-0.006)-(0.5 + 0.006085))\Big) = 0.006098 x[1]=2+0.006+0.005912=1.9940 x[1] = 2 + \frac{-0.006+-0.00591}{2} = 1.9940 y[1]=0.5+0.006085+0.0060982=0.5060 y[1] = 0.5 + \frac{0.006085+0.006098}{2} = 0.5060 t[1]=0+0.5=0.5 t[1] = 0 + 0.5 =0.5

itera = 1

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

itera = 2

K1x=0.5(0.018(1.988178)0.012(1.988178)2)=0.005824 K1x = 0.5 (0.018 (1.988178) - 0.012 (1.988178)^2) =-0.005824 K1y=0.5(0.026(0.512196)0.017(0.512196)2 K1y = 0.5 \Big(0.026(0.512196) - 0.017 (0.512196)^2 +0.19(0.012)(1.9881780.512196))=0.006111+0.19 (0.012) (1.988178-0.512196)\Big) = 0.006111 K2x=0.5(0.018(1.9881780.005824)0.012(1.9881780.005824)2) K2x = 0.5 (0.018 (1.988178-0.005824) - 0.012 (1.988178-0.005824)^2) =0.005737=-0.005737 K2y=0.5(0.026(0.512196+0.006111)0.017(0.512196+0.006111)2 K2y = 0.5 \Big(0.026(0.512196+0.006111) - 0.017 (0.512196 + 0.006111 )^2 +0.19(0.012)((1.9881780.005911)(0.512196+0.006111)) +0.19 (0.012) ((1.988178-0.005911)-(0.512196 + 0.006111)\Big) =0.006124=0.006124 x[3]=(1.988178)+0.0058240.0057372=1.982398 x[3] = (1.988178) + \frac{-0.005824-0.005737}{2} = 1.982398 y[3]=0.512196+0.006111+0.0061242=0.518314 y[3] = 0.512196 + \frac{0.006111+0.006124}{2} = 0.518314 t[3]=1+0.5=1.5 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

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.

Isuperior=40(131+1942)+100(194+2662)+ I_{superior} = 40\Big(\frac{131+194}{2}\Big) +100\Big(\frac{194+266}{2}\Big) + 30(266+3372)+66(337+4022)+ -30\Big(\frac{266+337}{2}\Big) +66\Big(\frac{337+402}{2}\Big)+ +203(402+4(483)+531)+ + \frac{20}{3}\Big(402+4(483)+531\Big) + +79(531+5352)+125(535+5042)+54(504+4662)+ +79\Big(\frac{531+535}{2}\Big) +125\Big(\frac{535+504}{2}\Big) + 54\Big(\frac{504+466}{2}\Big) + +503(466+4(408)+368)+ + \frac{50}{3}\Big(466+4(408)+368\Big) + +203(368+4(324)+288) + \frac{20}{3}\Big(368+4(324)+288\Big) Isuperior=254753,33 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.

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

Área total afectada:

Aafectada=IsuperiorIInferior=254753,3394281,75 A_{afectada} = I_{superior} - I_{Inferior} = 254753,33 -94281,75 Aafectada=160.471,58 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.

ErrortruncaSup=O(0.0403)+O(0.1003)+O((0.030)3)+O(0.0663)+ Error_{truncaSup} = O( 0.040^3) + O(0. 100^3)+ O( (-0.030)^3) + O( 0.066^3)+ +O(0.0205)+O(0.0793)+O(0.1253)+O(0.0543)+ + O( 0.020^5) + O(0. 079^3)+ O( 0.125^3) + O( 0.054^3)+ +O(0.0505)+O(0.0205) + O( 0.050^5) + O( 0.020^5) ErrortruncaInf=O(0.1905)+O(0.0443) Error_{truncaInf} = O( 0.190^5) + O(0. 044^3)

s1Eva_2024PAOII_T3 matriz de distribución de energía por sectores

Ejercicio: s1Eva_2024PAOII_T3 matriz de distribución de energía por sectores

:

Fuente\Consumidor Industrial Comercial Transporte Residencial
Hidroeléctrica 0.7 0.19 0.1 0.01
Gas Natural 0.12 0.18 0.68 0.02
Petróleos-combustible 0.2 0.38 0.4 0.02
Eólica 0.11 0.23 0.15 0.51

total de fuente de generación para la tabla es: [1500,400,600,200]

literal a Planteamiento

Considerando que el factor de la tabla es el factor de consumo por tipo de cliente, para encontrar las cantidades por tipo cliente que se puedan atender con la capacidad de cada «fuente de generación», se plantea:

0.7x+0.19y+0.1z+0.01w=1500 0.7x+0.19y+0.1z+0.01w = 1500 0.12x+0.18y+0.68z+0.02w=400 0.12x+0.18y+0.68z+0.02w = 400 0.2x+0.38y+0.4z+0.04w=600 0.2x+0.38y+0.4z+0.04w = 600 0.11x+0.23y+0.15z+0.51w=200 0.11x+0.23y+0.15z+0.51w =200

literal b. Matriz aumentada y Pivoteo parcial por filas

[0.70.190.10.0115000.120.180.680.024000.20.380.40.026000.110.230.150.51200] \begin{bmatrix} 0.7 & 0.19& 0.1 & 0.01 &1500 \\ 0.12 & 0.18 & 0.68 & 0.02 & 400 \\0.2 & 0.38 & 0.4 & 0.02 & 600 \\0.11 & 0.23& 0.15 & 0.51 & 200 \end{bmatrix}

Revisando la primera columna j=0,  el mayor valor ya se encuentra en la posición de la diagonal i=0, por lo que no hay cambio de filas

Para la segunda columna j=1, desde la posición de la diagonal i=1, el mayor valor se encuentra en i=2, por lo que intercambian las filas.

[0.70.190.10.0115000.20.380.40.026000.120.180.680.024000.110.230.150.51200] \begin{bmatrix} 0.7 & 0.19& 0.1 & 0.01 &1500\\0.2 & 0.38 & 0.4 & 0.02 & 600 \\ 0.12 & 0.18 & 0.68 & 0.02 & 400 \\ 0.11 & 0.23& 0.15 & 0.51 & 200 \end{bmatrix}

Al observar la tercera columna j=2, desde la diagonal i=2, el valor mayor ya se encuentra en la posición de la diagonal, no hay cambio de filas. Para la última fila no se tiene otra fila para comparar, con lo que el pivoteo se terminó.

literal c. Método de Jacobi

A partir de la matriz del literal anterior, las expresiones quedan:

0.7x+0.19y+0.1z+0.01w=1500 0.7x+0.19y+0.1z+0.01w = 1500 0.2x+0.38y+0.4z+0.04w=600 0.2x+0.38y+0.4z+0.04w = 600 0.12x+0.18y+0.68z+0.02w=400 0.12x+0.18y+0.68z+0.02w = 400 0.11x+0.23y+0.15z+0.51w=200 0.11x+0.23y+0.15z+0.51w =200

y despejar una incógnita de cada ecuación se convierte en:

x=10.7(1500(+0.19y+0.1z+0.01w)) x = \frac{1}{0.7} \Big( 1500 - (+0.19y+0.1z+0.01w) \Big) y=10.38(600(0.2x+0.4z+0.04w)) y = \frac{1}{0.38} \Big( 600 - (0.2x +0.4z+0.04w) \Big) z=10.68(400(0.12x+0.18y+0.02w)) z = \frac{1}{0.68} \Big(400-(0.12x+0.18y+0.02w)\Big) w=10.51(200(0.11x+0.23y+0.15z)) w =\frac{1}{0.51} \Big(200-(0.11x+0.23y+0.15z) \Big)

literal d. iteraciones

En el literal c, se sugiere iniciar con el vector X0 = [100,100,100,100].

Como la unidad de medida en las incógnitas es número de clientes, la tolerancia puede ajustarse a 0.1.

itera = 0

X0 = [100,100,100,100]

x=10.7(1500(+0.19(100)+0.1(100)+0.01(100)))=2100 x = \frac{1}{0.7} \Big( 1500 - (+0.19(100)+0.1(100)+0.01(100)) \Big) = 2100 y=10.38(600(0.2(100)+0.4(100)+0.04(100)))=1415.7 y = \frac{1}{0.38} \Big( 600 - (0.2(100) +0.4(100)+0.04(100)) \Big) = 1415.7 z=10.68(400(0.12(100)+0.18(100)+0.02(100)))=541.17 z = \frac{1}{0.68} \Big(400-(0.12(100)+0.18(100)+0.02(100))\Big) = 541.17 w=10.51(200(0.11(100)+0.23(100)+0.15(100)))=296.1 w =\frac{1}{0.51} \Big(200-(0.11(100)+0.23(100)+0.15(100)) \Big) =296.1 errado=max[2100100,1415.7100,541.17100,296.1100] errado = max| [ 2100-100, 1415.7-100, 541.17-100, 296.1-100] | errado=max[2000,1315.7,441.17,196.1]=2000 errado = max| [ 2000, 1315.7,441.17,196.1] | = 2000

itera = 1

X0 = [ 2100, 1415.7, 541.1, 296.1 ]

x=10.7(1500(+0.19(1415.7)+0.1(541.1)+0.01(296.1)))=1677.0 x = \frac{1}{0.7} \Big( 1500 - (+0.19(1415.7)+0.1(541.1)+0.01(296.1)) \Big) = 1677.0 y=10.38(600(0.2(2100)+0.4(541.1)+0.04(296.1)))=111.55 y = \frac{1}{0.38} \Big( 600 - (0.2(2100) +0.4(541.1)+0.04( 296.1)) \Big) = -111.55 z=10.68(400(0.12(2100)+0.18(1415.7)+0.02(541.1)))=165.82 z = \frac{1}{0.68} \Big(400-(0.12(2100)+0.18(1415.7)+0.02(541.1))\Big) = -165.82 w=10.51(200(0.11(2100)+0.23(1415.7)+0.15(541.1)))=858.44 w =\frac{1}{0.51} \Big(200-(0.11( 2100)+0.23( 1415.7)+0.15(541.1)) \Big) =-858.44 errado=max[1677.02100,111.551415.7, errado = max| [ 1677.0 - 2100,-111.55 -1415.7, 165.82541.17,858.44296.1] -165.82- 541.17, -858.44- 296.1] | errado=max[423,1527.25,706.99,1154.54]=1527.25 errado = max| [ -423, -1527.25 ,-706.99 ,-1154.54] | = 1527.25

itera = 2

tarea..

literal e. convergencia y revisión de resultados obtenidos

Para el asunto de convergencia, el error disminuye entre iteraciones, por lo que el método es convergente.

Analizando los resultados desde la segunda iteración, se obtienen valores negativos, lo que no es acorde al concepto del problema. Se continuarán con las iteraciones siguientes y se observará el resultado para dar mayor «opinión» sobre lo obtenido.

literal f Número de condición

Número de condición = 5.77 que al ser «bajo y cercano a 1» se considera que el método converge.

Resultados con el algoritmo

Iteraciones Jacobi
itera,[X],errado
0 [100. 100. 100. 100.] 1.0
1 [2100.      1415.78947  541.17647  296.07843] 2000.0
2 [1677.03081 -111.55831 -165.82893 -858.44716] 1527.3477812177503
3 [2209.09063  916.03777  347.06727  129.52816] 1027.5960799832396
4 [1842.78688   44.11685  -47.89447 -599.50735] 871.9209205662409
5 [2146.28903  691.02779  268.99219  -11.1162 ] 646.9109334007268
...
40 [2022.87519  383.13614  137.36642 -257.41944] 0.11802984805018468
41 [2022.91669  383.22837  137.41009 -257.33833] 0.09223623893257127
numero de condición: 5.7772167744910625
respuesta X: 
[2022.91669  383.22837  137.41009 -257.33833]
iterado, incluyendo X0:  42

El resultado muestra que los clientes residenciales serán -257 según las ecuaciones planteadas. Lo que se interpreta según lo presentado por los estudiantes:

1. energía insuficiente: causa por los apagones diarios en el país en éstos días.

2. Se requiere mejorar el planteamiento, pues la respuesta no debe contener valores negativos según el concepto planteado en el ejercicio.

Se considerarán ambas válidas para la evaluación al observar que el resultado numérico es correcto, pero no es acorde al ejercicio.

 

Instrucciones en Python

# 1Eva_2024PAOII_T3 matriz de distribución de energía por sectores
import numpy as np

#INGRESO
A= [[0.7,0.19,0.1,0.01],
    [0.12,0.18,0.68,0.02],
    [0.2,0.38,0.4,0.02],
    [0.11,0.23,0.15,0.51]]

B = [1500,400,600,200]

# PROCEDIMIENTO
A = np.array(A,dtype=float)
B = np.transpose([np.array(B)])

X0 = [100,100,100,100]
tolera = 0.1
iteramax = 100
verdecimal = 5

def jacobi(A,B,X0, tolera, iteramax=100, vertabla=False, precision=4):
    ''' 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)
    tabla = [np.copy(X0)]

    itera = 0
    if vertabla==True:
        print('Iteraciones Jacobi')
        print('itera,[X],errado')
        print(itera, xnuevo, errado)
        np.set_printoptions(precision)
    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)
        
        tabla = np.concatenate((tabla,[X]),axis = 0)

        itera = itera + 1
        if vertabla==True:
            print(itera, xnuevo, errado)

    # No converge
    if (itera>iteramax):
        X=itera
        print('iteramax superado, No converge')
    return(X,tabla)

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+i)
    if vertabla==True:
        if pivoteado==0:
            print('  Pivoteo por filas NO requerido')
        else:
            print('AB')
    return(AB)

# PROGRAMA Búsqueda de solucion  --------


# PROCEDIMIENTO
AB = pivoteafila(A,B,vertabla=True)
# separa matriz aumentada en A y B
[n,m] = np.shape(AB)
A = AB[:,:m-1]
B = AB[:,m-1]

[X, puntos] = jacobi(A,B,X0,tolera,vertabla=True,precision=verdecimal)
iterado = len(puntos)

# numero de condicion
ncond = np.linalg.cond(A)

# SALIDA
print('numero de condición:', ncond)
print('respuesta X: ')
print(X)
print('iterado, incluyendo X0: ', iterado)

s1Eva_2024PAOII_T2 Interpolar x(t) en caída de cofia para t entre[1,2]

Ejercicio: 1Eva_2024PAOII_T2 Interpolar x(t) en caída de cofia para t entre[1,2]

De la tabla del ejercicio, solo se toman las dos primeras filas ti,xi

ti 1 1.2 1.4 1.8 2
xi -80.0108 -45.9965 3.1946 69.5413 61.1849
yi -8.3002 -22.6765 -20.9677 15.8771 33.8999
zi 113.8356 112.2475 110.5523 106.7938 104.71

literal a. Planteamiento

En el planteamiento del problema para un polinomio de grado 3 indicado en el enunciado, se requieren al menos 4 puntos (grado=puntos-1). Al requerir cubrir todo el intervalo, los puntos en los extremos son obligatorios, quedando solo dos puntos por seleccionar, que se sugiere usar alrededor de 1.63 que es el valor buscado. quedando de ésta forma la selección de los puntos:

xi = [1. , 1.4, 1.8, 2. ]
fi = [-80.0108, 3.1946,  69.5413,  61.1849]

En el parcial, se revisaron dos métodos: polinomio de interpolación con sistema de ecuaciones en la Unidad 3, y el conceptual con diferencias divididas de Newton. Por la extensión del desarrollo se realiza con diferencias divididas de Newton, que por facilidad de espacios se muestra en dos tablas, la de operaciones y resultados.

Tabla de operaciones:

i ti f[ti] Primero Segundo Tercero
0 1 -80.0108 3.1946(80.0108)1.41\frac{3.1946-(-80.0108)}{1.4-1} 165.8667208.01351.81\frac{165.8667-208.0135}{1.8-1} 346.081252.683421\frac{-346.0812-52.6834}{2-1}
1 1.4 3.1946 69.54133.19461.81.4\frac{69.5413-3.1946}{1.8-1.4} 41.782165.866721.4\frac{-41.782-165.8667}{2-1.4}
2 1.8 69.5413 61.184969.541321.8\frac{61.1849-69.5413}{2-1.8}
3 2 61.1849

Tabla de resultados

i ti f[ti] Primero Segundo Tercero
0 1 -80.0108 208.0135 -52.6834 -293.3978
1 1.4 3.1946 165.8667 -346.0812
2 1.8 69.5413 -41.782
3 2 61.1849

Se construye el polinomio con los datos de la primera fila:

p(t)=80.0108+208.0135(t1)52.6834(t1)(t1.4) p(t) = -80.0108 +208.0135 (t - 1) - 52.6834(t - 1)(t - 1.4) 293.3978(t1)(t1.4)(t1.8) -293.3978(t - 1)(t - 1.4)(t - 1.8)

literal b. verificar polinomio

Se puede verificar de dos formas: probando los puntos o con la gráfica del algoritmo. La forma de escritura del polinomio hace cero algunos términos.

p(1.4)=80.0108+208.0135((1.4)1)52.6834((1.4)1)((1.4)1.4) p(1.4) = -80.0108+208.0135 ((1.4) - 1) - 52.6834((1.4) - 1)((1.4) - 1.4) 293.3978((1.4)1)((1.4)1.4)((1.4)1.8)=3.1846 -293.3978((1.4) - 1)((1.4) - 1.4)((1.4) - 1.8) = 3.1846 p(1.8)=80.0108+208.0135((1.8)1)52.6834((1.8)1)(t1.4) p(1.8) = -80.0108+208.0135 ((1.8) - 1) - 52.6834((1.8) - 1)(t - 1.4) 293.3978((1.8)1)((1.8)1.4)((1.8)1.8)=69.5413 -293.3978((1.8) - 1)((1.8) - 1.4)((1.8) - 1.8) =69.5413

La gráfica del algoritmo muestra que el polinomio pasa por todos los puntos.

Trayectoria Caida Interpola grafliteral c. error en polinomio

El punto de la tabla que no se usó es t = 1.2, que al evaluar en el polinomio se obtiene:

p(1.2)=80.0108+208.0135((1.2)1)52.6834((1.2)1)((1.2)1.4) p(1.2) = -80.0108+ 208.0135 ((1.2) - 1) - 52.6834((1.2) - 1)((1.2) - 1.4) 293.3978((1.2)1)((1.2)1.4)((1.2)1.8)=43.3423 -293.3978((1.2) - 1)((1.2) - 1.4)((1.2) - 1.8) = -43.3423 errado=43.3423(45.9965)=2.65 errado = |-43.3423 -(-45.9965)| = 2.65

literal d. conclusiones y recomendaciones

Para el error  P(1.2). dado el orden de magnitud en el intervalo podría considerarse «bajo» e imperceptible al incorporarlo en la gráfica.

literal e. error en otro punto

El polinomio evaluado en t=1.65

p(1.65)=80.0108+208.0135((1.65)1)52.6834((1.65)1)((1.65)1.4) p(1.65) = -80.0108 + 208.0135 ((1.65) - 1) - 52.6834((1.65) - 1)((1.65) - 1.4) 293.3978((1.65)1)((1.65)1.4)((1.65)1.8)=53.7884 -293.3978((1.65) - 1)((1.65) - 1.4)((1.65) - 1.8) = 53.7884

la fórmula para x(t) del tema 1

x(t)=15.3513.42t+100e0.12tcos(2π(0.5)t+π/8) x(t) = 15.35 - 13.42 t+100e^{-0.12t} cos(2\pi (0.5) t + \pi / 8) x(1.65)=15.3513.42(1.65)+100e0.12(1.65)cos(2π(0.5)(1.65)+π/8)=55.5884 x(1.65) = 15.35 - 13.42(1.65)+100e^{-0.12(1.65)} cos(2\pi (0.5) (1.65) + \pi / 8) = 55.5884 errado=55.588453.7884=1.79 errado = |55.5884 -53.7884| = 1.79

resultados del algoritmo

Tabla Diferencia Dividida
[['i   ', 'xi  ', 'fi  ', 'F[1]', 'F[2]', 'F[3]', 'F[4]']]
[[   0.        1.      -80.0108  208.0135  -52.6834 -293.3978    0.    ]
 [   1.        1.4       3.1946  165.8667 -346.0812    0.        0.    ]
 [   2.        1.8      69.5413  -41.782     0.        0.        0.    ]
 [   3.        2.       61.1849    0.        0.        0.        0.    ]]
dDividida: 
[ 208.0135  -52.6834 -293.3978    0.    ]
polinomio: 
208.0135*t - 293.3978125*(t - 1.8)*(t - 1.4)*(t - 1.0) - 52.6834375000001*(t - 1.4)*(t - 1.0) - 288.0243
polinomio simplificado: 
-293.3978125*t**3 + 1179.587375*t**2 - 1343.7817375*t + 377.581375
>>> polinomio.subs(t,1.65)
53.7884880859375
>>> 15.35 - 13.42*(1.65)+100*np.exp(-0.12*(1.65))*np.cos(2*np.pi*(0.5)*(1.65) + np.pi/8)
55.588413032442766
>>> 55.5884 -53.7884
1.7999999999999972
>>>

las gráficas se muestran en los literales anteriores

# 1Eva_2024PAOII_T2 Interpolar x(t) en caída de cofia para t entre[1,2]
# Polinomio interpolación
# Diferencias Divididas de Newton
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt

# INGRESO , Datos de prueba
xi = [1. , 1.4, 1.8, 2. ]
fi = [-80.0108, 3.1946,  69.5413,  61.1849]

##ti = [1. , 1.2, 1.4, 1.8, 2. ]
##xi = [-80.0108, -45.9965,   3.1946,  69.5413,  61.1849]
##yi = [ -8.3002, -22.6765, -20.9677,  15.8771,  33.8999]
##zi = [113.8356, 112.2475, 110.5523, 106.7938, 104.71 ]


# PROCEDIMIENTO
xi = np.array(xi,dtype=float)
fi = np.array(fi,dtype=float)

# Tabla de Diferencias Divididas
titulo = ['i   ','xi  ','fi  ']
n = len(xi)
ki = np.arange(0,n,1)
tabla = np.concatenate(([ki],[xi],[fi]),axis=0)
tabla = np.transpose(tabla)

# diferencias divididas vacia
dfinita = np.zeros(shape=(n,n),dtype=float)
tabla = np.concatenate((tabla,dfinita), axis=1)

# Calcula tabla, inicia en columna 3
[n,m] = np.shape(tabla)
diagonal = n-1
j = 3
while (j < m):
    # Añade título para cada columna
    titulo.append('F['+str(j-2)+']')

    # cada fila de columna
    i = 0
    paso = j-2 # inicia en 1
    while (i < diagonal):
        denominador = (xi[i+paso]-xi[i])
        numerador = tabla[i+1,j-1]-tabla[i,j-1]
        tabla[i,j] = numerador/denominador
        i = i+1
    diagonal = diagonal - 1
    j = j+1

# POLINOMIO con diferencias Divididas
# caso: puntos equidistantes en eje x
dDividida = tabla[0,3:]
n = len(dfinita)

# expresión del polinomio con Sympy
t = sym.Symbol('t')
polinomio = fi[0]
for j in range(1,n,1):
    factor = dDividida[j-1]
    termino = 1
    for k in range(0,j,1):
        termino = termino*(t-xi[k])
    polinomio = polinomio + termino*factor

# simplifica multiplicando entre (t-xi)
polisimple = polinomio.expand()

# polinomio para evaluacion numérica
px = sym.lambdify(t,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
np.set_printoptions(precision = 4)
print('Tabla Diferencia Dividida')
print([titulo])
print(tabla)
print('dDividida: ')
print(dDividida)
print('polinomio: ')
print(polinomio)
print('polinomio simplificado: ' )
print(polisimple)

# Gráfica
plt.plot(xi,fi,'o', label = 'Puntos')
plt.plot(pxi,pfi, label = 'Polinomio')

plt.xlabel('ti')
plt.ylabel('xi')
plt.grid()
plt.title('Polinomio de interpolación')

plt.plot(1.65,polinomio.subs(t,1.65),
         'o',color='red',label='p(1.65)')
plt.plot(1.2,polinomio.subs(t,1.2),
         'o',color='green',label='p(1.2)')
plt.legend()
plt.show()

 

s1Eva_2024PAOII_T1 Capturar en el mar las cofias de cohetes

Ejercicio: 1Eva_2024PAOII_T1 Capturar en el mar las cofias de cohetes

literal a. Planteamiento

Para encontrar el valor t cuando la cofia alcanza 30 mts o 0.030 Km se usa la fórmula del eje z(t)=0.030 dado que se indica que las fórmulas se encuentran en Km.

z(t)=120+45060t(1e0.35t)g2t2+0.012(7.5+gt)2 z(t) = 120 + \frac{450}{60} t \Big(1-e^{-0.35t} \Big) - \frac{g}{2} t^2 + 0.012(7.5+gt)^2 0.030=120+45060t(1e0.35t)g2t2+0.012(7.5+gt)2 0.030 = 120 + \frac{450}{60} t \Big(1-e^{-0.35t} \Big) - \frac{g}{2} t^2 + 0.012(7.5+gt)^2 f(t)=0.030+120+45060t(1e0.35t)g2t2+0.012(7.5+gt)2=0 f(t) = - 0.030 + 120 + \frac{450}{60} t \Big(1-e^{-0.35t} \Big) - \frac{g}{2} t^2 + 0.012(7.5+gt)^2 = 0

literal b, Intervalo para búsqueda

En el enunciado se indica que » trayectoria de caída que no es de más de 10 minutos desde desacople del cohete.»

Al considerar el inicio del «evento» desacople del cohete como t=0, el intervalo a usar es entre [0,10].

Para verificar el intervalo de búsqueda, se evalúa la función z(t) en los extremos del intervalo:

f(0)=0.030+120+45060(0)(1e0.35(0))g2(0)2 f(0) = - 0.030 + 120 + \frac{450}{60} (0) \Big(1-e^{-0.35(0)} \Big) - \frac{g}{2} (0)^2 +0.012(7.5+25.28(0))2=120.645 + 0.012(7.5+25.28(0))^2 = 120.645 f(10)=0.030+120+45060(10)(1e0.35(10))g2(10)2 f(10) = - 0.030 + 120 + \frac{450}{60} (10) \Big(1-e^{-0.35(10)} \Big) - \frac{g}{2} (10)^2 +0.012(7.5+g(10))2=140.509 + 0.012(7.5+g(10))^2 = -140.509

con lo que se muestra el cambio de signo de f(t) dentro del intervalo, que verifica el intervalo de búsqueda.

con el algoritmo:

>>> fz(0)-0.03
120.645
>>> fz(10)-0.03
-140.50972375667382
>>>

también puede verificarse usando las gráficas de las trayectorias de cada eje vs el tiempo en el intervalo. Para el eje z, se puede marcar el punto de interés al trazar una línea horizontal en cero o en la altura z(t) = 0.030.

Trayectoria Caida Cofia 3D_02

literal c. Iteraciones

Se indica usar el método del punto fijo, donde es necesario definir g(t) como un lado de la balanza, mientra que del otro lado es la identidad con t. de la fórmula se despeja por ejemplo del término t2

g2t2+0.012(7.5+gt)2 \frac{g}{2} t^2 + 0.012(7.5+gt)^2 f(t)=0.030+120+45060t(1e0.35t)g2t2+0.012(7.5+gt)2=0 f(t) = - 0.030 + 120 + \frac{450}{60} t \Big(1-e^{-0.35t} \Big) - \frac{g}{2} t^2 + 0.012(7.5+gt)^2 = 0 g2t2=0.030+120+45060t(1e0.35t)+0.012(7.5+gt)2 \frac{g}{2} t^2 = - 0.030 + 120 + \frac{450}{60} t \Big(1-e^{-0.35t} \Big) + 0.012(7.5+gt)^2 t2=2g(0.030+120+45060t(1e0.35t)+0.012(7.5+gt)2) t^2 = \frac{2}{g}\Big(- 0.030 + 120 + \frac{450}{60} t \Big(1-e^{-0.35t} \Big) + 0.012(7.5+gt)^2 \Big) t=2g(0.030+120+45060t(1e0.35t)+0.012(7.5+gt)2) t = \sqrt{\frac{2}{g} \Big(- 0.030 + 120 + \frac{450}{60} t \Big(1-e^{-0.35t} \Big) + 0.012(7.5+gt)^2 \Big)}

siendo g(t) la parte derecha de la ecuación:

g(t)=2g(0.030+120+45060t(1e0.35t)+0.012(7.5+gt)2) g(t) = \sqrt{\frac{2}{g} \Big(- 0.030 + 120 + \frac{450}{60} t \Big(1-e^{-0.35t} \Big) + 0.012(7.5+gt)^2 \Big)}

el punto inicial t0 se puede escoger por ejemplo la mitad del intervalo. Según se observa la gráfica.

La tolerancia puede ser de 10 cm, o 1 m, depende de la precisión a proponer.
Para la parte escrita se selecciona 1m, como las unidades se encuentran en Km: tolera = 0.001

itera = 0

t = 5

g(5)=235.28(0.030+120+45060(5)(1e0.35(5))+0.012(7.5+(35.28(5))2) g(5) = \sqrt{\frac{2}{35.28} \Big(- 0.030 + 120 + \frac{450}{60} (5) \Big(1-e^{-0.35(5)} \Big) + 0.012(7.5+(35.28(5))^2 \Big)} g(5)=5.28 g(5) = 5.28 error=g(5)5=5.285=0.28 error = |g(5)-5| = |5.28-5| = 0.28

que es mayor que la tolerancia.

itera = 0+1 = 1

itera = 1

t = 5.28

g(5.28)=235.28(0.030+120+45060(5.28)(1e0.35(5.28))+0.012(7.5+(35.28(5.28))2) g(5.28) = \sqrt{\frac{2}{35.28} \Big(- 0.030 + 120 + \frac{450}{60} (5.28) \Big(1-e^{-0.35(5.28)} \Big) + 0.012(7.5+(35.28(5.28))^2 \Big)} g(5.28)=5.51 g(5.28) = 5.51 error=g(5.28)5.28=5.515.28=0.23 error = |g(5.28)-5.28| = |5.51-5.28| = 0.23

que es mayor que la tolerancia.

itera = 1+1 = 2

itera = 2

t = 5.51

g(5.51)=235.28(0.030+120+45060(5.51)(1e0.35(5.51))+0.012(7.5+(35.28(5.51))2) g(5.51) = \sqrt{\frac{2}{35.28} \Big(- 0.030 + 120 + \frac{450}{60} (5.51) \Big(1-e^{-0.35(5.51)} \Big) + 0.012(7.5+(35.28(5.51))^2 \Big)} g(5.51)=5.70 g(5.51) = 5.70 error=g(5.51)5=5.705.51=0.19 error = |g(5.51)-5| = |5.70-5.51| = 0.19

que es mayor que la tolerancia.

literal d. tolerancia y error

La tolerancia se describe en la primera iteración. Por ejemplo tolera = 0.001, los errores se calculan en cada iteración.

literal e. Convergencia

El error se reduce en cada iteración, se considera que el método converge.

literal f. Respuestas con algoritmo

La respuesta de la raíz de la función se busca con el algoritmo, se requieren al menos 35 iteraciones en el método del punto fijo.

i,[a,b,tramo]
0 [5.     5.2881 0.2881]
1 [5.2881 5.5234 0.2353]
2 [5.5234 5.7176 0.1942]
3 [5.7176 5.8791 0.1615]
...
34 [6.7551e+00 6.7562e+00 1.1150e-03]
35 [6.7562e+00 6.7572e+00 9.5380e-04]
raíz en:  6.75719557313832
errado :  0.0009538025930524441
itera  :  3

la gráfica del intervalo muestra que es necesario ampliar(zoom) el eje f(x) para observar mejor.

Instrucciones en Python

# Algoritmo de punto fijo
# [a,b] son seleccionados desde la gráfica
# error = tolera

import numpy as np

# INGRESO
g = 35.28
alt =  0.030
fx = lambda t: -alt + 120 + 450/60*t*(1-np.exp(-0.35*t))-0.5*g*t**2 + 0.012*(7.5 - g*t)**2
gx = lambda t: np.sqrt((2/g)*(-alt + 120 + 450/60*t*(1-np.exp(-0.35*t)) + 0.012*(7.5 - g*t)**2))

a = 5
b = 10
tolera = 0.001 # tolera 1m, probar con 10 cm
iteramax = 100

# PROCEDIMIENTO
i = 0 # iteración
b = gx(a)
tramo = abs(b-a)

print('i,[a,b,tramo]')
np.set_printoptions(precision=4)
print(0,np.array([a,b,tramo]))

while not(tramo<=tolera or i>iteramax):
    a = b
    b = gx(a)
    tramo = abs(b-a)
    i = i + 1
    
    print(i,np.array([a,b,tramo]))

respuesta = b
# Valida convergencia
if (i>=iteramax):
    respuesta = np.nan

# SALIDA
print('raíz en: ', respuesta)
print('errado : ', tramo)
print('itera  : ', i)

# GRAFICA
import matplotlib.pyplot as plt
# calcula los puntos para fx y gx
a = 5
b = 10
muestras = 21
xi = np.linspace(a,b,muestras)
fi = fx(xi)
gi = gx(xi)
yi = xi

plt.plot(xi,fi, label='f(t)',
         linestyle='dashed')
plt.plot(xi,gi, label='g(t)')
plt.plot(xi,yi, label='y=t')

plt.axvline(respuesta, color='magenta',
            linestyle='dotted')
plt.axhline(0)
plt.xlabel('t')
plt.ylabel('f(t)')
plt.title('Punto Fijo')
plt.grid()
plt.legend()
plt.show()

 

s2Eva_2024PAOI_T1 EDO Salto Bungee tiempo extiende cuerda

Ejercicio: 2Eva_2024PAOI_T1 EDO Salto Bungee tiempo extiende cuerda

Salto Bungee 01Como referencia par el ejercicio, solo se realizará la primera parte, acorde a:

Encuentre el tiempo tc y la velocidad de la persona cuando se alcanza la longitud de la cuerda extendida y sin estirar (30 m), es decir y<L, aún se entra cayendo signo(v)=1. (solo primera ecuación)

d2ydt2=gsigno(v)Cdm(dydt)2 \frac{d^2y}{dt^2} = g - signo(v) \frac{C_d}{m}\Big( \frac{dy}{dt}\Big)^2 yL y \leq L

Suponga que las condiciones iniciales son:

y(0) = 0

dy(0)dt=0 \frac{dy(0)}{dt} = 0

literal a

Realice el planteamiento del ejercicio usando Runge-Kutta de 2do Orden

d2ydt2=9.8signo(v)0.2568.1(dydt)2 \frac{d^2y}{dt^2} = 9.8 - signo(v) \frac{0.25}{68.1}\Big( \frac{dy}{dt}\Big)^2

Usando los valores de las constantes g, Cd, m, haciendo el cambio de variable dy/dt=v. Adicionalmente, en la caída inicial, signo(v)=1 y se mantiene constante hasta el 2do tramo con la cuerda estirada.

v=9.80.2568.1v2 v' = 9.8 - \frac{0.25}{68.1} v^2

Se plantea el ejercicio como Runge-Kutta para 2da derivada

v=y=f(t,y,v) v = y' = f(t,y,v) v=g(t,y,v)=9.80.2568.1v2 v' = g(t,y,v) = 9.8 - \frac{0.25}{68.1} v^2

siendo h=0.5, las iteraciones se realizan como:

K1y=0.5v K_{1y} = 0.5 v K1v=0.5(9.80.2568.1v2) K_{1v} = 0.5 \Big( 9.8 - \frac{0.25}{68.1} v^2\Big) K2y=0.5(vi+K1v) K_{2y} = 0.5 \Big( v_i + K_{1v}\Big) K2v=0.5(9.80.2568.1(vi+K1v)2) K_{2v} = 0.5 \Big(9.8 - \frac{0.25}{68.1}(v_i + K_{1v})^2 \Big) yi+1=yi+K1y+K2y2 y_{i+1}=y_i+\frac{K_{1y}+K_{2y}}{2} vi+1=vi+K1v+K2v2 v_{i+1}=v_i+\frac{K_{1v}+K_{2v}}{2} ti+1=ti+0.5 t_{i+1} = t_i +0.5

literal b

Desarrolle tres iteraciones para y(t) con tamaño de paso h=0.5

itera = 0

K1y=0.5(0)=0 K_{1y} = 0.5 (0) = 0 K1v=0.5(9.80.2568.1(0)2)=4.9 K_{1v} = 0.5 \Big( 9.8 - \frac{0.25}{68.1} (0)^2\Big) = 4.9 K2y=0.5(0+4.9)=2.45 K_{2y} = 0.5 ( 0 + 4.9) = 2.45 K2v=0.5(9.80.2568.1(0+2.45)2)=4.8559 K_{2v} = 0.5 \Big(9.8 - \frac{0.25}{68.1}(0 + 2.45)^2 \Big) =4.8559 yi+1=0+0+2.452=1.225 y_{i+1}=0+\frac{0+2.45}{2}=1.225 vi+1=0+4.9+4.88892=4.8779 v_{i+1}=0+\frac{4.9+4.8889}{2}=4.8779 ti+1=0+0.5=0.5 t_{i+1} =0 +0.5 = 0.5

itera=1

Continuar con las iteraciones como tarea.

literal c

Usando el algoritmo, aproxime la solución para y en el intervalo entre [0,tc], adjunte sus resultados.txt

las iteraciones con el algoritmo son:

 [ ti, yi, vi,K1y,K1v,K2y,K2v]
[[0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
  0.000000e+00 0.000000e+00]
 [5.000000e-01 1.225000e+00 4.877964e+00 0.000000e+00 4.900000e+00
  2.450000e+00 4.855929e+00]
 [1.000000e+00 4.878063e+00 9.669162e+00 2.438982e+00 4.856324e+00
  4.867144e+00 4.726071e+00]
 [1.500000e+00 1.089474e+01 1.429311e+01 4.834581e+00 4.728391e+00
  7.198776e+00 4.519513e+00]
 [2.000000e+00 1.917255e+01 1.868062e+01 7.146557e+00 4.525013e+00
  9.409063e+00 4.249997e+00]
 [2.500000e+00 2.957773e+01 2.277738e+01 9.340309e+00 4.259461e+00
  1.147004e+01 3.934054e+00]
 [3.000000e+00 4.195334e+01 2.654573e+01 1.138869e+01 3.947708e+00
  1.336254e+01 3.589005e+00]

con lo que se observa que para alcanzar los 30m de la cuerda sin estirar se alcanzan entre los [2.5, 3.0] s.

Salto Bungee 03 longitud cuerda sin estirar

literal d

Indique el valor de tc, muestre cómo mejorar la precisión y realice sus observaciones sobre los resultados.

Para mejorar la precisión del algoritmo se reduce el valor del tamaño de paso h,  de esta forma se puede obtener una mejor lectura del tiempo de la primera fase del ejercicio.

Por ejemplo haciendo el tamaño de paso h=0.5/4, el tiempo entre [2.5, 2.625]. que tiene un error segundos menor al valor encontrado inicialmente y se mejora la precisión.