Autor: Edison Del Rosario

  • 3Eva_IT2019_T2 Integral con interpolación

    3ra Evaluación I Término 2019-2020. 10/Septiembre/2019. MATG1013

    Tema 2. (40 Puntos) Construya un polinomio que aproxime a

    f(x) = sin(\pi x)

    usando los puntos x=0, π/4, π/2 y aproxime la integral de 0 a π/2.

    a. Realice la interpolación mediante el método de trazador cúbico fijo

    b. Integre usando el método de cuadratura de Gauss

    c. Estime el error para el ejercicio.

    Rúbrica: Bosquejo de gráficas (5 puntos), literal a, planteo de fórmulas (5 puntos), calcula los parámetros (10 puntos), literal b (15 puntos), literal c (5 puntos).

  • s3Eva_IT2019_T2 Integral con interpolación

    Ejercicio: 3Eva_IT2019_T2 Integral con interpolación

    El ejercicio considera dos partes: interpolación e integración

    a. Interpolación

    Se requiere aproximar la función usando tres puntos. Para comprender la razón del método solicitado, se compara la función con dos interpolaciones:

    a.1 Lagrange
    a.2 Trazador cúbico sujeto

    Observando la gráfica se aclara que en éste caso, una mejor aproximación se obtiene con el método  de trazador cúbico sujeto. Motivo por lo que el tema tiene un peso de 40/100 puntos

    Los valores a considerar para la evaluación son:

    puntos referencia xi,yi: 
    [0.         0.78539816 1.57079633]
    [ 0.          0.62426595 -0.97536797]
    derivadas en los extremos:  
        3.141592653589793 
        0.6929852019184021
    Polinomio de Lagrange
    -1.80262534301178*x**2 + 2.21061873102778*x
    Trazadores cúbicos sujetos
    [0.         0.78539816]
    -0.548171611756137*x**3 - 2.55744517923506*x**2 + 3.14159265358979*x
    
    [0.78539816 1.57079633]
    4.66299098804068*x**3 - 14.8359577843727*x**2 + 12.7851139029174*x - 2.52466795930204
    
    ------------------
    Valores calculados para Trazadores cúbicos sujetos:
    Matriz A: 
    [[-0.26179939 -0.13089969  0.        ]
     [ 0.78539816  3.14159265  0.78539816]
     [ 0.          0.13089969  0.26179939]]
    Vector B: 
    [  2.34675256 -16.9893436    2.72970237]
    coeficientes S: 
    [-5.11489036 -7.69808822 14.27573913]
    coeficientes a,b,c,d
    [-0.54817161  4.66299099]
    [-2.55744518 -3.84904411]
    [ 3.14159265 -1.89005227]
    [0.         0.62426595]
    

    b. Integración

    Como forma de comparacíon de resultados, se requiere integrar con varios métodos para comparar resultados y errores.

    b.1 Integración con Cuadratura de Gauss, usando el resultado de trazador cúbico.

    Se integra en cada tramo de cada polinomio:

    Trazadores cúbicos sujetos
    [0.         0.78539816]
    -0.548171611756137*x**3 - 2.55744517923506*x**2 + 3.14159265358979*x
    

    Se obtienen los puntos del método de cuadratura desplazados en el rango:

    xa:  0.16597416116944688
    xb:  0.6194240022280014
    area:  0.5037962958529855
    

    Para el segundo tramo:

    [0.78539816 1.57079633]
    4.66299098804068*x**3 - 14.8359577843727*x**2 + 12.7851139029174*x - 2.52466795930204
    xa:  0.9513723245668951
    xb:  1.4048221656254496
    area:  -0.2706563884589365
    

    Con lo que el integral total es:

    Integral total:  0.23313990739404894
    

    b.2 Integración analítica

    \int_0^{\pi /2}sin(\pi x) dx

    u = πx
    du/dx = π
    dx = du/π

    se convierte en:

    \frac{1}{\pi}\int sin(u) du \frac{1}{\pi}(-cos(u))

    volviendo a la variable x:

    \frac{1}{\pi}(-cos(\pi x)) \Big\rvert_{0}^{\frac{\pi}{2}} -\frac{1}{\pi}(cos(\pi \frac{\pi}{2})-cos(\pi(0))) = 0.24809580527879377

    c. Estimación del error

    Se restan los resultados de las secciones b.1 y b.2

    error = |0.24809580527879377 - 0.23313990739404894 |

    error = 0.014955897884744829


    Algoritmo en Python

    separado por literales

    # 3Eva I T 2019 Interpola e Integra
    import numpy as np
    import sympy as sym
    import matplotlib.pyplot as plt
    
    def interpola_lagrange(xi,yi):
        '''
        Interpolación con método de Lagrange
        resultado: polinomio en forma simbólica
        '''
        # PROCEDIMIENTO
        n = len(xi)
        x = sym.Symbol('x')
        # Polinomio
        polinomio = 0
        for i in range(0,n,1):
            # Termino de Lagrange
            termino = 1
            for j  in range(0,n,1):
                if (j!=i):
                    termino = termino*(x-xi[j])/(xi[i]-xi[j])
            polinomio = polinomio + termino*yi[i]
        # Expande el polinomio
        polinomio = polinomio.expand()
        return(polinomio)
    
    def traza3sujeto(xi,yi,u,v):
        '''
        Trazador cúbico sujeto, splines
        resultado: polinomio en forma simbólica
        '''
        n = len(xi)
        # Valores h
        h = np.zeros(n-1, dtype=float)
        # Sistema de ecuaciones
        A = np.zeros(shape=(n,n), dtype=float)
        B = np.zeros(n, dtype=float)
        S = np.zeros(n-1, dtype=float)
        # coeficientes
        a = np.zeros(n-1, dtype=float)
        b = np.zeros(n-1, dtype=float)
        c = np.zeros(n-1, dtype=float)
        d = np.zeros(n-1, dtype=float)
        
        polinomios=[]
        
        if (n>=3):
            for i in range(0,n-1,1):
                h[i]=xi[i+1]-xi[i]
            A[0,0] = -h[0]/3
            A[0,1] = -h[0]/6
            B[0] = u-(yi[1]-yi[0])/h[0]
            for i in range(1,n-1,1):
                A[i,i-1] = h[i-1]
                A[i,i] = 2*(h[i-1]+h[i])
                A[i,i+1] = h[i]
                B[i] = 6*((yi[i+1]-yi[i])/h[i] - (yi[i]-yi[i-1])/h[i-1])
            A[n-1,n-2] = h[n-2]/6
            A[n-1,n-1] = h[n-2]/3
            B[n-1] = v-(yi[n-1]-yi[n-2])/h[n-2]
    
            # Resolver sistema de ecuaciones
            S = np.linalg.solve(A,B)
    
            # Coeficientes
            for i in range(0,n-1,1):
                a[i]=(S[i+1]-S[i])/(6*h[i])
                b[i]=S[i]/2
                c[i]=(yi[i+1]-yi[i])/h[i]-(2*h[i]*S[i]+h[i]*S[i+1])/6
                d[i]=yi[i]
          
            # polinomio en forma simbólica
            x=sym.Symbol('x')
            polinomios=[]
            for i in range(0,n-1,1):
                ptramo = a[i]*(x-xi[i])**3 + b[i]*(x-xi[i])**2 + c[i]*(x-xi[i])+ d[i]
                ptramo = ptramo.expand()
                polinomios.append(ptramo)
            parametros = [A,B,S,a,b,c,d]                                                           
        return(polinomios, parametros)
    
    # INGRESO
    f = lambda x: np.sin(np.pi*x)
    muestrasf = 20
    a = 0
    b = np.pi/2
    # Derivadas en los extremos
    u = np.pi*np.cos(np.pi*a)
    v = np.pi*np.cos(np.pi*b)
    muestras = 3
    
    # literal a
    # PROCEDIMIENTO
    xif = np.linspace(a,b,muestrasf)
    yif = f(xif)
    
    xi = np.linspace(a,b,muestras)
    yi = f(xi)
    
    # Usando Lagrange
    x = sym.Symbol('x')
    pL = interpola_lagrange(xi,yi)
    pxL = sym.lambdify(x,pL)
    pxiL =  pxL(xif)
    
    # Trazador cúbico sujeto
    pS, parametros = traza3sujeto(xi,yi,u,v)
    pxiS = np.zeros(muestrasf,dtype=float)
    
    # Evalua trazadores cúbicos sujetos
    i=0
    ap = xi[i]
    bp = xi[i+1]
    poli = sym.lambdify(x, pS[i])
    for j in range(0,muestrasf,1):
        punto = xif[j]
        if (punto>bp):
            i = i+1
            ap = xi[i]
            bp = xi[i+1]
            poli = sym.lambdify(x,pS[i])
        pxiS[j] = poli(punto)
    
    # SALIDA
    print('puntos referencia xi,yi: ')
    print(xi)
    print(yi)
    print('derivadas en los extremos: ',u,v)
    print('Polinomio de Lagrange')
    print(pL)
    print('Trazadores cúbicos sujetos')
    n = len(xi)
    for i in range(0,n-1,1):
        print(xi[i:i+2])
        print(pS[i])
    # Parametros de Trazadores cúbicos sujetos
    print('Matriz A: ')
    print(parametros[0])
    print('Vector B: ')
    print(parametros[1])
    print('coeficientes S: ')
    print(parametros[2])
    print('coeficienetes a,b,c,d')
    print(parametros[3])
    print(parametros[4])
    print(parametros[5])
    print(parametros[6])
    
    # Gráficas
    plt.plot(xif,yif, label='funcion')
    plt.plot(xi,yi,'o', label='muestras')
    plt.plot(xif,pxiL, label='p(x)_Lagrange')
    plt.plot(xif,pxiS, label='p(x)_Traza3Sujeto')
    plt.legend()
    plt.xlabel('x')
    plt.show()
    
    # literal b
    # cuadratura de Gauss de dos puntos
    def integraCuadGauss2p(funcionx,a,b):
        x0 = -1/np.sqrt(3)
        x1 = -x0
        xa = (b+a)/2 + (b-a)/2*(x0)
        xb = (b+a)/2 + (b-a)/2*(x1)
        area = ((b-a)/2)*(funcionx(xa) + funcionx(xb))
        print('xa: ',xa)
        print('xb: ',xb)
        print('area: ', area)
        return(area)
    
    # INGRESO
    f0 = sym.lambdify(x,pS[0])
    f1 = sym.lambdify(x,pS[1])
    # Procedimiento
    I0 = integraCuadGauss2p(f0,xi[0],xi[1])
    I1 = integraCuadGauss2p(f1,xi[1],xi[2])
    It = I0+I1
    
    # SALIDA
    print('Integral 1: ', I0)
    print('Integral 2: ', I1)
    print('Integral total: ',It)
    
  • 3Eva_IT2019_T1 Ecuaciones simultáneas

    3ra Evaluación I Término 2019-2020. 10/Septiembre/2019. MATG1013

    Tema 1. (30 Puntos).  Determine las raíces de las ecuaciones simultáneas siguientes:

    y = -x^2 +x + 0.75 y+5xy=x^3

    a. Realice un bosquejo para cada ecuación
    b. Use el método de Newton-Raphson con x0=1 , y0=0.75, realice 3 iteraciones
    c. Estime el orden del error

    Rúbrica: literal a (5 puntos), literal b planteo (5 puntos), iteraciones (15 puntos), literal c (5 puntos)

  • s3Eva_IT2019_T1 Ecuaciones simultáneas

    Ejercicio: 3Eva_IT2019_T1 Ecuaciones simultáneas

    Para plantear la intersección de las ecuaciones se pueden simplificar como:

    y_1 = -x^2 +x + 0.75 y+5xy=x^3 y(1+5x)=x^3 y_2=\frac{x^3}{1+5x}

    Quedando dos ecuaciones simplificadas:

    y_1 = -x^2 +x + 0.75 y_2 = \frac{x^3}{1+5x}

    cuyas gráficas son:

    dónde se puede observar la intersección alrededor de 1.3

    Restando ambas ecuaciones, se tiene que encontrar el valor de x para que el resultado sea cero.

    y_1(x)-y_2(x)= -x^2 +x + 0.75 -\frac{x^3}{1+5x} f(x) = -x^2 +x + 0.75 -\frac{x^3}{1+5x} = 0

    Para encontrarla derivada se procesa la expresión:

    (1+5x)(-x^2 +x + 0.75) -x^3 = 0(1+5x) -6x^3+4x^2+4.75x+0.75 = 0 f'(x)= -18x^2 +8x + 4.75

    Se usa el punto inicial x0=1 definido en el enunciado y se realizan las iteraciones siguiendo el algoritmo.

    Se tiene que la raiz es:

    raiz en:  1.3310736382369661
     [  xi, 	 xnuevo,	 fxi,	 dfxi, 	 tramo]
    [[ 1.000e+00  1.111e+00  5.833e-01 -5.250e+00  1.111e-01]
     [ 1.111e+00  1.160e+00  4.173e-01 -8.583e+00  4.862e-02]
     [ 1.160e+00  1.193e+00  3.353e-01 -1.018e+01  3.293e-02]
     [ 1.193e+00  1.217e+00  2.766e-01 -1.131e+01  2.445e-02]
     [ 1.217e+00  1.236e+00  2.313e-01 -1.218e+01  1.899e-02]
     [ 1.236e+00  1.251e+00  1.951e-01 -1.286e+01  1.517e-02]
    ....
    ]
    

    Algoritmo en Python

    # 3Eva I T 2019 ecuaciones simultaneas
    import numpy as np
    import matplotlib.pyplot as plt
    
    def newton_raphson(funcionx, fxderiva, xi, tolera):
        '''
        funciónx y fxderiva son de forma numérica
        xi es el punto inicial de búsqueda
        '''
        tabla = []
        tramo = abs(2*tolera)
        while (tramo>=tolera):
            fxi = funcionx(xi)
            dfxi = fxderiva(xi)
            xnuevo = xi - fxi/dfxi
            tramo = abs(xnuevo-xi)
            tabla.append([xi,xnuevo,fxi,dfxi,tramo])
            xi = xnuevo
        return(xi,tabla)
    
    # INGRESO
    y1 = lambda x: -x**2 +x +0.75
    y2 = lambda x: (x**3)/(1+5*x)
    a = 0.5
    b = 1.5
    muestras = 20
    
    f = lambda x: -x**2+x+0.75-x**3/(1+5*x)
    df = lambda x: -18*(x**2)+8*x +4.75
    tolera = 1e-4
    x0 = 1
    
    # PROCEDIMIENTO
    # datos para la gráfica
    xi = np.linspace(a,b,muestras)
    yi1 = y1(xi)
    yi2 = y2(xi)
    fi = f(xi)
    # determina raiz
    raiz, tabla = newton_raphson(f, df, x0, tolera)
    tabla = np.array(tabla)
    
    # SALIDA
    np.set_printoptions(precision=3)
    print('raiz en: ',raiz)
    print(' [  xi, \t xnuevo,\t fxi,\t dfxi, \t tramo]')
    print(tabla)
    
    # Gráfica
    plt.plot(xi,yi1, label ='yi1')
    plt.plot(xi,yi2, label ='yi2')
    plt.plot(xi,fi, label ='fi=yi1-yi2')
    plt.axvline(raiz,linestyle='dashed')
    plt.axhline(0)
    plt.xlabel('x')
    plt.legend()
    plt.title('ecuaciones simultáneas')
    plt.show()
    
  • 2Eva_IT2019_T3 EDP Elíptica Placa 6x5

    2da Evaluación I Término 2019-2020. 27/Agosto/2019. MATG1013

    Tema 3. (30 Puntos) Una placa rectangular de plata de 6x5 cm tiene calor que se genera uniformemente en todos los puntos, con una rapidez q = 1.5 cal/cm3 s.

    Al representar con x la distancia a lo largo del borde de longitud 6 cm y con y la de 5 cm.

    Suponga que la temperatura en los bordes se mantiene como se indica:

    u(x,0) = x(6-x) u(x,5)=0 0≤x≤6
    u(0,y) = y(5-y) u(6,y)=0 0≤y≤5

    Donde el origen se encuentra en una esquina de la placa y los bordes se hayan a lo largo de los ejes positivos x, y.

    La temperatura de estado estable u(x,y) satisface la ecuación de Poisson:

    \frac{\partial^2 u}{\partial x^2} (x,y)+\frac{\partial ^2 u}{\partial y^2 } (x,y) = -\frac{q}{K}

    0≤x≤6
    0≤y≤5

    Donde K, la conductividad térmica es 1.04 cal/cm deg s.

    a. Aproxime la temperatura u(x,y) en los nodos de la malla con hx =2, hy= 2.5

    b. Exprese el término del error

    Rúbrica: literal a expresiones (10 puntos), valor (10 puntos), literal b (5 puntos)


    Referencia: Ejercicio 12.1.8, Burden 9Ed, p724.

  • s2Eva_IT2019_T3 EDP Elíptica Placa 6x5

    Ejercicio: 2Eva_IT2019_T3 EDP Elíptica Placa 6×5

    La ecuación se discretiza con diferencias divididas centradas

    \frac{\partial^2 u}{\partial x^2} (x,y)+\frac{\partial ^2 u}{\partial y^2 } (x,y) = -\frac{q}{K} \frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{(\Delta x)^2} + \frac{u_{i,j+1}-2u_{i,j}+u_{i,j-1}}{(\Delta y)^2}= -\frac{q}{K}

    Para procesar los datos se toma como referencia la malla

    se agrupan los términos conocidos de las diferencias divididas

    \frac{(\Delta y)^2}{(\Delta x)^2} \Big( u_{i+1,j}-2u_{i,j} +u_{i-1,j} \Big) + u_{i,j+1}-2u_{i,j}+u_{i,j-1}=-\frac{q}{K}(\Delta y)^2

    Considerando que hx =2, hy= 2.5 son diferentes, se mantiene el valor de λ para el desarrollo.

    \lambda = \frac{(\Delta y)^2}{(\Delta x)^2} = \frac{(2.5)^2}{(2)^2} = 1.5625 \lambda u_{i+1,j}-2\lambda u_{i,j} +\lambda u_{i-1,j} + u_{i,j+1}-2u_{i,j}+u_{i,j-1}=-\frac{q}{K}(\Delta y)^2

    Se agrupan términos de u que son iguales

    \lambda u_{i+1,j}-2(1+\lambda) u_{i,j} +\lambda u_{i-1,j} + u_{i,j+1}+u_{i,j-1}=-\frac{q}{K}(\Delta y)^2

    con lo que se puede generar el sistema de ecuaciones a resolver para los nodos de la malla.

    i = 1 , j=1

    1.5625 u_{2,1}-2(1+ 1.5625) u_{1,1} + 1.5625 u_{0,1} + +u_{1,2}+u_{1,0}=-\frac{1.5}{1.04}(2.5)^2 1.5625 u_{2,1}-5.125u_{1,1} + 1.5625 y_1(5-y_1) + + 0+x_i(6-x_i)=-9.0144 1.5625 u_{2,1}-5.125u_{1,1} + 1.5625[ 1(5-1)]+ + 0+2(6-2)=-9.0144 1.5625 u_{2,1}-5.125 u_{1,1} = =-9.0144 - 1.5625 [1(5-1)] - 0-2(6-2)

     

    1.5625 u_{2,1}-5.125 u_{1,1} =-23.2644

    i=2, j=1

    1.5625 u_{3,1}-2(1+1.5625) u_{2,1} +1.5625 u_{1,1} + +u_{2,2}+u_{2,0}=-9.0144 1.5625 (0)-5.125 u_{2,1} +1.5625 u_{1,1} + 0 +x_2(6-x_2)=-9.0144 -5.125 u_{2,1} +1.5625 u_{1,1} + 0 +4(6-4)=-9.0144

     

    -5.125 u_{2,1} +1.5625 u_{1,1} =-17.0144

    las ecuaciones a resolver son:

    1.5625 u_{2,1}-5.125 u_{1,1} =-23.2644 -5.125 u_{2,1} +1.5625 u_{1,1} =-17.0144

    cuya solución es:

    u_{2,1} = 5.1858 u_{1,1} =6.1204

    Resuelto usando:

    import numpy as np
    A = np.array([[1.5625,-5.125],
                 [-5.125, 1.5625]])
    B = np.array([-23.2644,-17.0144])
    x = np.linalg.solve(A,B)
    print(x)
    
  • 2Eva_IT2019_T2 EDO Péndulo vertical

    2da Evaluación I Término 2019-2020. 27/Agosto/2019. MATG1013

    Tema 2. (40 Puntos) Suponga que un péndulo tiene 0.6 m de Longitud, se desplaza θ desde la posición vertical de equilibrio.pendulo Vertical 01

    \frac{d^2\theta }{dt^2}+\frac{g}{L}\sin (\theta)=0 0\lt t \lt 1 g = 9.81 \frac{m}{s^2} \theta(0) = \frac{\pi}{6} \theta '(0) = 0

    a. Aproxime la solución de la ecuación para t = [0,1] con pasos de h=0.2
    b. Aproxime el valor del error

    Rúbrica: literal a, expresiones (20 puntos), valor (10 puntos), literal b (10 puntos)


    Referencia: Ejercicio 5.9.8, Burden 9Ed, p338.
    2Eva_IT2010_T2 Movimiento angular

    Professor of Physics Emeritus Walter Lewin.  Lec 11 | 8.01 Physics I: Classical Mechanics, Fall 1999.

    El PÉNDULO SIMPLE NO es como te explicaron | Física y Matemáticas. Mates Mike

  • s2Eva_IT2019_T2 EDO Péndulo vertical

    Ejercicio: 2Eva_IT2019_T2 EDO Péndulo vertical

    Para resolver la ecuación usando Runge-Kutta se estandariza la ecuación a la forma:

    \frac{d^2\theta }{dt^2}+\frac{g}{L}\sin (\theta)=0 \frac{d^2\theta }{dt^2}= -\frac{g}{L}\sin (\theta)

    Se simplifica su forma a:

    \frac{d\theta}{dt}=z = f_t(t,\theta,z) \frac{d^2\theta }{dt^2}= z' =-\frac{g}{L}\sin (\theta) = g_t(t,\theta,z)

    y se usan los valores iniciales para iniciar la tabla:

    \theta(0) = \frac{\pi}{6} \theta '(0) = 0
    ti θ(ti) θ'(ti)=z
    0 π/6 = 0.5235 0
    0.2 0.3602 -1.6333
    0.4 -0.0815 -2.2639
    ...

    para las iteraciones se usan los valores (-g/L) = (-9.8/0.6)

    Iteración 1:  ti = 0 ; yi = π/6 ; zi = 0

    K1y = h * ft(ti,yi,zi) 
        = 0.2*(0) = 0
    K1z = h * gt(ti,yi,zi) 
        = 0.2*(-9.8/0.6)*sin(π/6) = -1.6333
            
    K2y = h * ft(ti+h, yi + K1y, zi + K1z)
        = 0.2*(0-1.6333)= -0.3266
    K2z = h * gt(ti+h, yi + K1y, zi + K1z)
        = 0.2*(-9.8/0.6)*sin(π/6+0) = -1.6333
    
    yi = yi + (K1y+K2y)/2 
       = π/6+ (0+(-0.3266))/2 = 0.3602
    zi = zi + (K1z+K2z)/2 
       = 0+(-1.6333-1.6333)/2 = -1.6333
    ti = ti + h = 0 + 0.2 = 0.2
    
    estimado[i] = [0.2,0.3602,-1.6333]
    

    Iteración 2: ti = 0.2 ; yi = 0.3602 ; zi = -1.6333

    K1y = 0.2*( -1.6333) = -0.3266
    K1z = 0.2*(-9.8/0.6)*sin(0.3602) = -1.1515
            
    K2y = 0.2*(-1.6333-0.3266)= -0.5569
    K2z = 0.2*(-9.8/0.6)*sin(0.3602-0.3266) = -0.1097
    
    yi = 0.3602 + ( -0.3266 + (-0.3919))/2 = -0.0815
    zi = -1.6333+(-1.151-0.1097)/2 = -2.2639
    ti = ti + h = 0.2 + 0.2 = 0.4
    
    estimado[i] = [0.4,-0.0815,-2.2639]
    

    Se continúan con las iteraciones, hasta completar la tabla.

    Tarea: realizar la Iteración 3

    Usando el algoritmo RungeKutta_fg se obtienen los valores y luego la gráfica

     [ t, 		 y, 	 dyi/dti=z]
    [[ 0.          0.52359878  0.        ]
     [ 0.2         0.36026544 -1.63333333]
     [ 0.4        -0.08155862 -2.263988  ]
     [ 0.6        -0.50774327 -1.2990876 ]
     [ 0.8        -0.60873334  0.62920692]
     [ 1.         -0.29609456  2.32161986]]
    

    pendulo Vertical 02

    si se mejora la resolución disminuyendo h = 0.05 y muestras = 20 para cubrir el dominio [0,1] se obtiene el siguiente resultado:
    pendulo Vertical 03

    Tarea: Para el literal b, se debe considerar que los errores se calculan con

    Runge-Kutta 2do Orden tiene error de truncamiento O(h3)
    Runge-Kutta 4do Orden tiene error de truncamiento O(h5)


    Algoritmo en Python

    # 3Eva_IT2019_T2 Péndulo vertical
    import numpy as np
    import matplotlib.pyplot as plt
    
    def rungekutta2_fg(f,g,x0,y0,z0,h,muestras):
        tamano = muestras + 1
        estimado = np.zeros(shape=(tamano,3),dtype=float)
        # incluye el punto [x0,y0,z0]
        estimado[0] = [x0,y0,z0]
        xi = x0
        yi = y0
        zi = z0
        for i in range(1,tamano,1):
            K1y = h * f(xi,yi,zi)
            K1z = h * g(xi,yi,zi)
            
            K2y = h * f(xi+h, yi + K1y, zi + K1z)
            K2z = h * g(xi+h, yi + K1y, zi + K1z)
    
            yi = yi + (K1y+K2y)/2
            zi = zi + (K1z+K2z)/2
            xi = xi + h
            
            estimado[i] = [xi,yi,zi]
        return(estimado)
    
    # INGRESO theta = y
    g = 9.8
    L  = 0.6
    ft = lambda t,y,z: z
    gt = lambda t,y,z: (-g/L)*np.sin(y)
    
    t0 = 0
    y0 = np.pi/6
    z0 = 0
    h=0.2
    muestras = 5
    
    # PROCEDIMIENTO
    tabla = rungekutta2_fg(ft,gt,t0,y0,z0,h,muestras)
    
    # SALIDA
    print(' [ t, \t\t y, \t dyi/dti=z]')
    print(tabla)
    
    # Grafica
    ti = np.copy(tabla[:,0])
    yi = np.copy(tabla[:,1])
    zi = np.copy(tabla[:,2])
    plt.subplot(121)
    plt.plot(ti,yi)
    plt.xlabel('ti')
    plt.title('yi')
    plt.subplot(122)
    plt.plot(ti,zi, color='green')
    plt.xlabel('ti')
    plt.title('dyi/dti')
    plt.show()
    

    Otra solución propuesta puede seguir el problema semejante:

    s2Eva_IT2010_T2 EDO Movimiento angular

  • 2Eva_IT2019_T1 Esfuerzo en pulso cardiaco

    2da Evaluación I Término 2019-2020. 27/Agosto/2019. MATG1013

    Tema 1. (30 Puntos) La conducción eléctrica del corazón se identifica en un electrocardiograma por segmentos de ondas P, R, T.

    Pulso Cardiaco EKG 01Mediante un sensor se obtuvo lecturas de un pulso cardiaco y se requiere obtener una medida del esfuerzo mediante el valor Xrms expresado como:

    X_{rms} = \sqrt{\frac{1}{t_n-t_0}\int_{t_0}^{t_n}[f(t)]^2dt}
    t 0.0 0.04 0.08 0.1 0.11 0.12 0.13 0.16 0.20 0.23 0.25
    f(t) 10 18 7 -8 110 -25 9 8 25 9 9

    a. Aproxime el valor Xrms usando el integral en todo el intervalo [0,0.25], minimice el error usando preferiblemente métodos de Simpson.

    b. Estime la cota de error para el valor Xrms encontrado
    Justifique sus respuestas escribiendo todas las expresiones

    Rúbrica: literal a, expresiones (16 puntos), valor (8 puntos), literal b (6 puntos)


    t  = np.array([0.0,0.04,0.08,0.1,0.11,0.12,0.13,0.16,0.20,0.23,0.25])
    ft = np.array([10.0, 18, 7, -8, 110, -25, 9, 8, 25, 9, 9])
    

    Referencia: Valor cuadrático medio, https://es.wikipedia.org/wiki/Media_cuadr%C3%A1tica
    Sensor de pulso cardiaco arduino, http://blog.espol.edu.ec/edelros/pulso-cardiaco/

  • s2Eva_IT2019_T1 Esfuerzo en pulso cardiaco

    Ejercicio: 2Eva_IT2019_T1 Esfuerzo en pulso cardiaco

    Para resolver el ejercicio, la función a integrar es el cuadrado de los valores. Para minimizar los errores se usarán TODOS los puntos muestreados, aplicando los métodos adecuados.
    Con aproximación de Simpson se requiere que los tamaños de paso sean iguales en cada segmento.
    Por lo que primero se revisa el tamaño de paso entre lecturas.

    Un Pulso Cardiaco Sensor 01

    tamaño de paso h:
    [0.04 0.04 0.02 0.01 0.01 0.01 0.03 0.04 0.03 0.02 0.  ]
    tiempos:
    [0.   0.04 0.08 0.1  0.11 0.12 0.13 0.16 0.2  0.23 0.25]
    ft:
    [ 10.  18.   7.  -8. 110. -25.   9.   8.  25.   9.   9.]

    Observando los tamaños de paso se tiene que:
    - entre dos tamaños de paso iguales se usa Simpson de 1/3
    - entre tres tamaños de paso iguales se usa Simpson de 3/8
    - para tamaños de paso variables se usa trapecio.

    Se procede a obtener el valor del integral,

    Intervalo [0,0.8], h = 0.04

    I_{S13} = \frac{0.04}{3}(10^2+4(18^2)+7^2)

    Intervalo [0.08,0.1], h = 0.02

    I_{Tr1} = \frac{0.02}{2}(7^2+(-8)^2)

    Intervalo [0.1,0.13], h = 0.01

    I_{S38} = \frac{3}{8}(0.01)((-8)^2+3(110)^2+3(-25)^2+9^2)

    Intervalo [0.13,0.25], h = variable

    I_{Tr2} = \frac{0.03}{2}(9^2+8^2) I_{Tr3} = \frac{0.04}{2}(8^2+25^2) I_{Tr4} = \frac{0.03}{2}(25^2+9^2) I_{Tr5} = \frac{0.02}{2}(9^2+9^2)

    El integral es la suma de los valores parciales, y con el resultado se obtiene el valor Xrms requerido.

    I_{total} = \frac{1}{0.08-0}I_{S13}+\frac{1}{0.1-0.08}I_{Tr1} +\frac{1}{0.13-0.1}I_{S38} + \frac{1}{0.16-0.13}I_{Tr2} + \frac{1}{0.2-0.16}I_{Tr3} +\frac{1}{0.23-0.2}I_{Tr4} + \frac{1}{0.25-0.23}I_{Tr5} X_{rms} = \sqrt{I_{total}}

    Los valores resultantes son:

    Is13:  19.26666666666667
    ITr1:  1.1300000000000001
    Is38:  143.7
    ITr2:  2.175
    ITr3:  13.780000000000001
    ITr4:  10.59
    ITr5:  1.62
    Itotal:  5938.333333333333
    Xrms:  77.06058222809722
    

    Tarea: literal b

    Para Simpson 1/3

    error_{trunca} = -\frac{h^5}{90} f^{(4)}(z)

    Para Simpson 3/8

    error_{truncamiento} = -\frac{3}{80} h^5 f^{(4)} (z)

    Para trapecios

    error_{truncar} = -\frac{h^3}{12}f''(z)


    Algoritmo en Python

    # 3Eva_IT2019_T1 Esfuerzo Cardiaco
    import numpy as np
    import matplotlib.pyplot as plt
    
    # INGRESO
    t  = np.array([0.0,0.04,0.08,0.1,0.11,0.12,0.13,0.16,0.20,0.23,0.25])
    ft = np.array([10., 18, 7, -8, 110, -25, 9, 8, 25, 9, 9])
    
    # PROCEDIMIENTO
    # Revisar tamaño de paso h
    n = len(t)
    dt = np.zeros(n, dtype=float)
    for i in range(0,n-1,1):
        dt[i]=t[i+1]-t[i]
    
    # Integrales
    Is13 = (0.04/3)*((10)**2 + 4*((18)**2) + (7)**2)
    ITr1 = (0.02/2)*((7)**2 + (-8)**2)
    Is38 = (3/8)*0.01*((-8)**2 + 3*((110)**2) + 3*((-25)**2) + (9)**2)
    
    ITr2 = (0.03/2)*((9)**2 + (8)**2)
    ITr3 = (0.04/2)*((8)**2 + (25)**2)
    ITr4 = (0.03/2)*((25)**2 + (9)**2)
    ITr5 = (0.02/2)*((9)**2 + (9)**2)
    
    Itotal = (1/(0.08-0.0))*Is13 + (1/(0.1-0.08))*ITr1
    Itotal = Itotal + (1/(0.13-0.1))*Is38 + (1/(0.16-0.13))*ITr2
    Itotal = Itotal + (1/(0.20-0.16))*ITr3 + (1/(0.23-0.20))*ITr4
    Itotal = Itotal + (1/(0.25-0.23))*ITr5
    Xrms = np.sqrt(Itotal)
    
    # SALIDA
    print('tamaño de paso h:')
    print(dt)
    print('tiempos:')
    print(t)
    print('ft: ')
    print(ft)
    print('Is13: ', Is13)
    print('ITr1: ', ITr1)
    print('Is38: ', Is38)
    print('ITr2: ', ITr2)
    print('ITr3: ', ITr3)
    print('ITr4: ', ITr4)
    print('ITr5: ', ITr5)
    print('Itotal: ', Itotal)
    print('Xrms: ', Xrms)
    
    # Grafica
    plt.plot(t,ft)
    for i in range(1,n,1):
        plt.axvline(t[i], color='green', linestyle='dashed')
    plt.xlabel('tiempo s')
    plt.ylabel('valor sensor')
    plt.title('Un pulso cardiaco con sensor')
    plt.show()