Categoría: Soluciones

Ejercicios resueltos de examen

  • 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)