Autor: Edison Del Rosario

  • s1Eva_IIT2017_T1 Aproximar a polinomio usando puntos

    Ejercicio: 1Eva_IIT2017_T1 Aproximar a polinomio usando puntos

    Se dispone de tres puntos para la gráfica.

    x  f(x)
     0  1
     0.2  1.6
     0.4  2.0

    Si el polinomio de Taylor fuera de grado 0, sería una constante, que si se evalúa en x0 = 0 para eliminar los otros términos, se encuentra que sería igual a 1

    Como se pide el polinomio de grado 2, se tiene la forma:

    p(x) = a + bx + c x ^2 p(x) = 1 + bx + c x^2

    Se disponen de dos puntos adicionales que se pueden usar para determinar b y c:

    p(0.2) = 1 + 0.2 b + (0.2)^2 c = 1.6 p(0.4) = 1 + 0.4 b + (0.4)^2 c = 2.0

    simplificando:

    0.2 b + (0.2)^2 c = 1.6 - 1 = 0.6 0.4 b + (0.4)^2 c = 2.0 - 1 = 1

    multiplicando la primera ecuación por 2 y restando la segunda ecuación:

    0 - 0.08 c = 1.2-1 = 0.2 c = - 0.2/0.08 = -2.5

    sustituyendo el valor de c obtenido en la primera ecuación

    0.2 b + 0.04(-2.5) = 0.6 0.2 b = 0.6 - 0.04(-2.5) = 0.6 + 0.1 = 0.7 b = 0.7/0.2 = 3.5

    con lo que el polinomio queda:
    p(x) = 1 + 3.5 x - 2.5 x^2

    validando con python:
    tomando los puntos de prueba:

    xi = [ 0, 0.2, 0.4]
    fi = [ 1, 1.6, 2 ]
    >>>

    se obtiene la gráfica:

    se adjunta las instrucciones usadas para validar que el polinomio pase por los puntos requeridos.

    # 1Eva_IIT2017_T1 Aproximar a polinomio usando puntos
    import numpy as np
    import matplotlib.pyplot as plt
    
    # INGRESO
    xi = [ 0, 0.2, 0.4]
    fi = [ 1, 1.6, 2 ]
    
    px = lambda x: 1 + 3.5*x - 2.5*(x**2)
    a = -0.5
    b = 1
    muestras = 21
    
    # PROCEDIMIENTO
    xj = np.linspace(a,b,muestras)
    pxj = px(xj)
    
    # SALIDA
    print(xj)
    print(pxj)
    
    # Gráfica
    plt.plot(xj,pxj,label='p(x)')
    plt.plot(xi,fi,'o', label='datos')
    
    plt.xlabel('x')
    plt.ylabel('f(x)')
    plt.grid()
    plt.legend()
    plt.show()
    
    

    Nota: Se puede intentar realizar los polinomios aumentando el grado, sin embargo cada término agrega un componente adicional a los términos anteriores por la forma (x - x0)k

    literal b

    se requiere el integral aproximado de f(x) en el intervalo limitado por los 3 puntos de la tabla:

    \int_{0}^{0.4}f(x) dx

    Esta aproximación con un polinomio es el concepto de integración numérica con la regla de Simpson de 1/3, tema desarrollado en la unidad 5

    I_{S13} = \frac{0.2}{3} \Big(1+4(1.6)+ 2 \Big) = 0.62666
  • s2Eva_IIT2017_T4 Problema con valor de frontera

    Ejercicio: 2Eva_IIT2017_T4 Problema con valor de frontera

    \frac{d^2T}{dx^2} + \frac{1}{x}\frac{dT}{dx} +S =0 0 \leq x \leq 1

    Las diferencias finitas a usar son:

    \frac{dT}{dx} =\frac{T_{i+1} - T_{i-1}}{2h}+O(h^2) \frac{d^2T}{dx^2}=\frac{T_{i+1} - 2T_i + T_{i-1}}{h^2}+O(h^2)

    que al reemplazar el la ecuación:

    \frac{T_{i+1} - 2T_i + T_{i-1}}{h^2} + \frac{1}{x_i}\frac{T_{i+1} -T_{i-1}}{2h}+S=0 2x_i (T_{i+1} - 4h x_i T_i + T_{i-1}) + h (T_{i+1} - T_{i-1}) = -2h^2 S x_i T_{i+1}(2x_i + h) - 4x_i T_i + T_{i-1}(2x_i - h) = -2h^2 S x_i T_{i-1}(2x_i - h) - 4x_i T_i + T_{i+1}(2x_i + h)= -2h^2 S x_i

    con lo que se puede crear un sistema de ecuaciones para cada valor xi con T0=2 y T4 =1 que son parte del enunciado del problema.

    Siendo h = 0.25 = 1/4,  y se indica al final que S=1, se crea un sistema de ecuaciones a resolver,

    x = [0, 1/4, 1/4, 3/4, 1]
    T_{i-1}\Big[2x_i - \frac{1}{4} \Big] - 4x_i T_i + T_{i+1}\Big[2x_i + \frac{1}{4} \Big] = -2\Big(\frac{1}{4}\Big)^2 (1) x_i T_{i-1}\Big[2x_i -\frac{1}{4}\Big] - 4x_i T_i + T_{i+1}\Big[2x_i + \frac{1}{4}\Big] = -\frac{1}{8} x_i

    se sustituye con los valores conocidos para cada i:

    i=1: 
    T0[2(1/4) - 1/4] - 4(1/4)T1 + T2[2(1/4) + 1/4] = -(1/8)(1/4)
    
         - T1 + (3/4)T2 = -1/32 - (1/4)(2)
         - T1 + (3/4)T2 = -17/32
    
    i=2: 
    T1[2(1/2) - 1/4] - 4(1/2)T2 + T3[2(1/2) + 1/4] = -(1/8)(1/2)
    
         (3/4)T1 - 2T2 + (5/4)T3 = -1/16
    
    i=3: 
    T2[2(3/4) - 1/4] - 4(3/4)T3 + T4[2(3/4) + 1/4] = -(1/8)(3/4)
    
         (5/4)T2 - 3T3 = -3/32 - (7/4)(1)
         (5/4)T2 - 3T3 = -59/32
    

    se ponen las ecuaciones en matrices para resolver con algun metodo numérico:

    A = [[ -1, 3/4,   0],
         [3/4,  -2, 5/4],
         [  0, 5/4,  -3]]
    B = [-17/32, -1/16, -59/32]
    np.linalg.solve(A,B)
    array([ 1.54,  1.34,  1.17])
    

  • s2Eva_IIT2017_T1 EDO Runge Kutta 2do Orden d2y/dx2

    Ejercicio: 2Eva_IIT2017_T1 EDO Runge Kutta 2do Orden d2y/dx2

    Tema 1

    Runge kutta de 2do Orden
    f: y' = z
    g: z' = .....
    K1y = h f(xi, yi, zi)
    K1z = h g(xi, y1, zi)
    
    K2y = h f(xi+h, yi+K1y, zi+K1z)
    K2z = h g(xi+h, yi+K1y, zi+K1z)
    
    y(i+1) = yi + (1/2)(K1y + K2y)
    z(i+1) = zi + (1/2)(K1z + K2z)
    
    x(i+1) = xi + h
    E = O(h3) 
    xi ≤ z ≤ x(i+1)
    

    f: z = Θ'
    g: z' = (-gr/L) sin(Θ)

    Θ(0) = π/6
    z(0) = 0

    h=0.1

    i=0, t0 = 0, Θ0 = π/6, z0 = 0
        K1y = 0.1(0) = 0
        K1z = 0.1(-9.8/2)sin(π/6) = -0.245
    
        K2y = 0.1(0+(-0.245)) = -0.0245
        K2z = 0.1(-9.8/2)sin(π/6+0) = -0.245
    
        Θ1 = π/6 + (1/2)(0+(-0.0245)) = 0.51139
        z1 = 0 + (1/2)(-0.245-0.245) = -0.245
        t1 = 0 + 0.1 = 0.1
    
    i=1, t1 = 0.1, Θ1 = 0.51139, z1 = -0.245
        K1y = 0.1(-0.245) = -0.0245
        K1z = 0.1(-9.8/2)sin(0.51139) = -0.23978
    
        K2y = 0.1(-0.245+(-0.0245)) = -0.049
        K2z = 0.1(-9.8/2)sin(0.51139+(-0.0245)) = -0.22924
    
        Θ2 = 0.51139 + (1/2)(-0.0245+(-0.049)) = 0.47509
        z2 = -0.245 + (1/2)(-0.23978+(-0.22924)) = -0.245
        t2 = 0.1 + 0.1 = 0.2
    
    

       t         theta     z
    [[ 0.        0.523599  0.      ]
     [ 0.1       0.511349 -0.245   ]
     [ 0.2       0.47486  -0.479513]
     [ 0.3       0.415707 -0.692975]
     [ 0.4       0.336515 -0.875098]
     [ 0.5       0.240915 -1.016375]
     [ 0.6       0.133432 -1.108842]
     [ 0.7       0.019289 -1.14696 ]
     [ 0.8      -0.09588  -1.128346]
     [ 0.9      -0.206369 -1.054127]
     [ 1.       -0.306761 -0.92877 ]
     [ 1.1      -0.39224  -0.759461]
     [ 1.2      -0.458821 -0.555246]
     [ 1.3      -0.503495 -0.326207]
     [ 1.4      -0.524294 -0.082851]
     [ 1.5      -0.520315  0.164197]
     [ 1.6      -0.491715  0.404296]
     [ 1.7      -0.439718  0.62682 ]
     [ 1.8      -0.366606  0.821313]
     [ 1.9      -0.275693  0.977893]
     [ 2.       -0.171235  1.087942]]
    

    Literal b), con h= 0.25, con t = 1 ángulo= -0.352484

       t         theta     z
    [[ 0.        0.523599  0.      ]
     [ 0.25      0.447036 -0.6125  ]
     [ 0.5       0.227716 -1.054721]
     [ 0.75     -0.070533 -1.170971]
     [ 1.       -0.352484 -0.910162]
     [ 1.25     -0.527161 -0.363031]
     [ 1.5      -0.540884  0.299952]
     [ 1.75     -0.387053  0.890475]
     [ 2.       -0.106636  1.221932]]
    

    El error de del orden h3


    Instruccciones en python, usando el algoritmo desarrollado en clase

    # Runge Kutta de 2do
    # EDO de 2do orden con condiciones de inicio
    import numpy as np
    import matplotlib.pyplot as plt
    
    def rungekutta2_fg(f,g,v0,h,m):
        tabla = [v0]
        xi = v0[0]
        yi = v0[1]
        zi = v0[2]
        for i in range(0,m,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)
    
            yi1 = yi + (1/2)*(K1y+K2y)
            zi1 = zi + (1/2)*(K1z+K2z)
            xi1 = xi + h
            vector = [xi1,yi1,zi1]
            tabla.append(vector)
    
            xi = xi1
            yi = yi1
            zi = zi1
        tabla = np.array(tabla)
        return(tabla)
    
    # Programa Prueba
    # Funciones
    f = lambda x,y,z : z
    g = lambda x,y,z : (-gr/L)*np.sin(y)
    
    gr = 9.8
    L = 2
    
    x0 = 0
    y0 = np.pi/6
    z0 = 0
    
    v0 = [x0,y0,z0]
    
    h = 0.1
    xn = 2
    m = int((xn-x0)/h)
    
    # PROCEDIMIENTO
    tabla = rungekutta2_fg(f,g,v0,h,m)
    
    xi = tabla[:,0]
    yi = tabla[:,1]
    zi = tabla[:,2]
    
    # SALIDA
    np.set_printoptions(precision=6)
    print('x, y, z')
    print(tabla)
    plt.plot(xi,yi, label='y')
    plt.plot(xi,zi, label='z')
    plt.legend()
    plt.grid()
    plt.show()
    
  • s3Eva_IT2017_T3 Sustancia en lago

    Ejercicio: 3Eva_IT2017_T3 Sustancia en lago

    El ejercicio se divide en dos partes: sección transversal con la derivada y concentración promedio con integrales.

    Sección transversal

    Se calcula la derivada con  una aproximación básica con error O(h)

    f'(x_i) = \frac{f(x_{i+1})-f(x_i)}{h} + O(h)

    repidiendo la fórmula entre cada par de puntos consecutivos

    dv/dz: [-1.1775  -0.7875  -0.39175 -0.09825  0.     ]
    

    Concentración promedio

    Para los integrales usamos la regla del trapecio:

    I = (b-a) \frac{f(a)+f(b)}{2}
    numerador:  224.38960000000003
    denominador:  29.852
    concentracion promedio:  7.516735897092323
    

    Aplicando los algoritmos en Python para todos los puntos:

    # 3Eva_IT2017_T3 Sustancia en lago
    import numpy as np
    import matplotlib.pyplot as plt
    
    # INGRESO
    zi = np.array([0.  , 4   , 8   , 12    , 16])
    vi = np.array([9.82, 5.11, 1.96,  0.393,  0.])
    ci = np.array([10.2, 8.5 , 7.4 ,  5.2  ,  4.1])
    
    # PROCEDIMIENTO
    n = len(zi)
    # primera derivada hacia adelante con error O(h)
    dv = np.zeros(n,dtype=float)
    for i in range(0,n-1,1):
        h = zi[i+1]-zi[i]
        dv[i]=(vi[i+1]-vi[i])/h
    
    As = -dv*zi
    
    # integrales por rectángulo
    numerador = 0
    for i in range(0,n-1,1):
        altura = (ci[i]*As[i]+ci[i+1]*As[i+1])/2
        numerador = numerador +altura*(zi[i+1]-zi[i])
    
    denominador = 0
    for i in range(0,n-1,1):
        altura = (As[i]+As[i+1])/2
        denominador = denominador +altura*(zi[i+1]-zi[i])
    
    cpromedio = numerador/denominador
    
    # SALIDA
    print('dv/dz: ')
    print(dv)
    print('numerador: ',numerador)
    print('denominador: ',denominador)
    print('concentracion promedio: ',cpromedio)
    
    # Grafica
    plt.subplot(121)
    plt.plot(zi,vi)
    plt.plot(zi,vi,'bo')
    plt.xlabel('profundidad z')
    plt.ylabel('Volumen')
    plt.grid()
    plt.subplot(122)
    plt.plot(zi,ci, color = 'orange')
    plt.plot(zi,ci,'ro')
    plt.xlabel('profundidad z')
    plt.ylabel('concentración')
    plt.grid()
    plt.show()
    

  • 2Eva_IIT2017_T4 EDO valor en frontera

    2da Evaluación II Término 2017-2018. Febrero 7, 2018. MATG1013

    Tema 4. Use el algoritmo lineal de diferencias finitas para aproximar la solución del problema con valor en las fronteras

    \frac{d^2T}{dx^2} + \frac{1}{x}\frac{dT}{dx} +S =0 0 \leq x \leq 1

    con condiciones de frontera

    T(x=0) =2, T(x=1) = 1

    a) Plantee las ecuaciones con h = 0.25

    b) Plantee el error para Ti

    c) Realice los cálculos con S=1

  • 2Eva_IIT2017_T3 EDP parabólica con diferencias regresivas

    2da Evaluación II Término 2017-2018. Febrero 7, 2018. MATG1013

    Tema 3. Aproxime la solución de la sigiente EDP parcial usando diferencias regresivas

    \frac{\partial U}{ \partial t} - \frac{1}{16} \frac{\partial ^2U}{\partial x^2} = 0 0 \lt x \lt 1 , 0\lt t U(0,t) = U(1,t) = 0, 0\lt t, U(x,0) = 2 \sin (\pi x), 0\leq x \leq 1

    a) Plantee las ecuaciones usando hx = 1/3, ht = 0.05, T = 2

    b) Calcule U(xi,tj)

    c) Plantee el error de U(xi,tj)

  • s2Eva_IIT2017_T3 EDP parabólica con diferencias regresivas

    Ejercicio: 2Eva_IIT2017_T3 EDP parabólica con diferencias regresivas

    \frac{dU}{dt} - \frac{1}{16} \frac{d^2U}{dx^2} = 0

    Las diferencias finitas requidas en el enunciado son:

    U'(x_i,t_j) = \frac{U(x_{i},t_j)-U(x_{i},t_{j-1})}{\Delta t} + O(\Delta t) U''(x_i,t_j) = \frac{U(x_{i+1},t_j)-2U(x_{i},t_j)+U(x_{i-1},t_j)}{\Delta x^2} + O(\Delta x^2)

    La indicación de regresiva es para la primera derivada, dependiente de tiempo t.

    que al reemplazar en la ecuación sin el término de error, se convierte a.

    \frac{U(x_{i},t_j)-U(x_{i},t_{j-1})}{\Delta t} - \frac{1}{16}\frac{U(x_{i+1},t_j)-2U(x_{i},t_j)+U(x_{i-1},t_j)}{\Delta x^2} =0

    Se reordenan los términos de forma semejante al modelo planteado en el método básico:

    \frac{\Delta t}{16\Delta x^2}[U(x_{i+1},t_j)-2U(x_{i},t_j)+U(x_{i-1},t_j)] = U(x_{i},t_j)-U(x_{i},t_{j-1})

    Se simplifica haciendo que haciendo

    \lambda = \frac{\Delta t}{16\Delta x^2}

    Cambiando la nomenclatura con solo los índices para las variables x y t, ordenando en forma ascendente los índices previo a crear el algoritmo.

    \lambda[U(i+1,j)-2U(i,j)+U(i-1,j)] = U(i,j)-U(i,j-1)

    Se reordena la ecuación como modelo para el sistema de ecuaciones.

    \lambda U(i+1,j)+(-2\lambda-1)U(i,j)+ \lambda U(i-1,j) = -U(i,j-1) P U(i-1,j) + Q U(i,j) + R U(i+1,j) = -U(i,j-1)

    Se calculan los valores constantes:

    λ = dt/(16*dx2) = 0.05/[16*(1/3)2] = 0.028125
    
    P = λ = 0.028125
    Q = (-1-2λ) = (1-2*0.028125) = -1.05625
    R = λ = 0.028125
    

    Usando las condiciones del problema:

    U(0,t) = U(1,t) = 0, entonces, Ta = 0, Tb = 0

    Para los valores de la barra iniciales se debe usar un vector calculado como 2sin(π x) en cada valor de xi espaciados por hx = 1/3, x entre [0,1]

    xi  = [0,1/3, 2/3, 1]
    U[xi,0] = [2sin (0*π), 2sin(π/3), 2sin(2π/3), 2sin(π)]
    U[xi,0] = [0, 2sin(π/3), 2sin(2π/3), 0]
    U[xi,0] = [0, 1.732050,  1.732050, 0]
    

    Con lo que se puede plantear las ecuaciones:

    j=1: i=1
    0.028125 U(0,1) + (-1.05625) U(1,1) + 0.028125 U(2,1) = -U(1,0)

    j=1: i=2
    0.028125 U(1,1) + (-1.05625) U(2,1) + 0.028125 U(3,1) = -U(2,0)

    y reemplazando los valores de la malla conocidos:

    0.028125 (0) - 1.05625 U(1,1) + 0.028125 U(2,1) = -1.732050
    0.028125 U(1,1) - 1.05625 U(2,1) + 0.028125 (0) = -1.732050

    hay que resolver el sistema de ecuaciones:

    -1.05625  U(1,1) + 0.028125 U(2,1) = -1.732050
     0.028125 U(1,1) - 1.05625  U(2,1) = -1.732050
    
    A = [[-1.05625 ,  0.028125],
         [ 0.028125, -1.05625 ]]
    B = [-1.732050,-1.732050]
    que resuelta con un método numérico:
    [ 1.68,  1.68]
    

    Por lo que la solución para una gráfica, con los índices de (fila,columna) como (t,x):

    U = [[0, 1.732050,  1.732050, 0],
         [0, 1.680000,  1,680000, 0]]
    

    El error del procedimiento, tal como fué planteado es del orden de O(Δt) y O(Δx2), o error de truncamiento E = O(Δx2) + O(Δt). Δt debe ser menor que Δx en aproximadamente un orden de magnitud


    Usando algoritmo en python.

    Usando lo resuelto en clase y laboratorio, se comprueba la solución con el algoritmo, con hx y ht mas pequeños y más iteraciones:

    # EDP parabólicas d2u/dx2  = K du/dt
    # método implícito
    # Referencia: Chapra 30.3 p.895 pdf.917
    #       Rodriguez 10.2.5 p.417
    import numpy as np
    import matplotlib.pyplot as plt
    
    # INGRESO
    # Valores de frontera
    Ta = 0
    Tb = 0
    # longitud en x
    a = 0
    b = 1
    # Constante K
    K = 16
    # Tamaño de paso
    dx = 0.1
    dt = 0.01
    # temperatura en barra
    tempbarra = lambda x: 2*np.sin(np.pi*x)
    # iteraciones
    n = 100
    
    # PROCEDIMIENTO
    # Valores de x
    xi = np.arange(a,b+dx,dx)
    m = len(xi)
    
    # Resultados en tabla de u
    u = np.zeros(shape=(m,n), dtype=float)
    # valores iniciales de u
    j=0
    u[0,j] = Ta
    for i in range(1,m-1,1):
        u[i,j] = tempbarra(xi[i])
    u[m-1,j] = Tb
    
    # factores P,Q,R
    lamb = dt/(K*dx**2)
    P = lamb
    Q = -1 -2*lamb
    R = lamb
    vector = np.array([P,Q,R])
    tvector = len(vector)
    
    # Calcula U para cada tiempo + dt
    j=1
    while not(j>=n):
        u[0,j] = Ta
        u[m-1,j] = Tb
        # Matriz de ecuaciones
        tamano = m-2
        A = np.zeros(shape=(tamano,tamano), dtype = float)
        B = np.zeros(tamano, dtype = float)
        for f in range(0,tamano,1):
            for c in range(0,tvector,1):
                c1 = f+c-1
                if(c1>=0 and c1<tamano):
                    A[f,c1] = vector[c]
            B[f] = -u[f+1,j-1]
        B[0] = B[0]-P*u[0,j]
        B[tamano-1] = B[tamano-1]-R*u[m-1,j]
        # Resuelve sistema de ecuaciones
        C = np.linalg.solve(A, B) 
        # copia resultados a u[i,j]
        for f in range(0,tamano,1):
            u[f+1,j] = C[f]
        j=j+1 # siguiente iteración
            
    # SALIDA
    print('Tabla de resultados')
    np.set_printoptions(precision=2)
    print(u)
    # Gráfica
    salto = int(n/10)
    if (salto == 0):
        salto = 1
    for j in range(0,n,salto):
        vector = u[:,j]
        plt.plot(xi,vector)
        plt.plot(xi,vector, '.m')
    plt.xlabel('x[i]')
    plt.ylabel('t[j]')
    plt.title('Solución EDP parabólica')
    plt.show()
    
  • 2Eva_IIT2017_T2 Volumen de isla

    2da Evaluación II Término 2017-2018. Febrero 7, 2018. MATG1013

    Tema 2. Se tienen las coordenadas (x,y) y las alturas f(x,y) de una isla sobre el nivel del mar obtenidas por internet como se ilustra en la tabla.2evaiit2017t2 Vol 01

    El nodo que está en el agua tiene altura cero.

    x0 = 0 x1 = 100 x2 = 200 x3 = 300 x4 = 400
     y0 = 0 0 1 0 0 0
    y1 = 50 1 3 1 1 0
    y2 = 100  5  4 3 2 0
    y3 = 150 0 0 1 1 0

    Las unidades de los ejes se encuentran en metros.

    a) Plantee el volumen de la isla como una integral doble en una región rectangular,

    b) Usando los métodos de Simpson, plantee la formulación para aproximar el volumen,

    c) Aproxime el volumen de la isla

    d) Estime el error


    isla = [[0,1,0,0,0],
            [1,3,1,1,0],
            [5,4,3,2,0],
            [0,0,1,1,0]]
    
    xi = [0,100,200,300,400]
    yi = [0, 50,100,150])
  • 2Eva_IIT2017_T1 EDO Runge Kutta 2do Orden d2y/dx2

    2da Evaluación II Término 2017-2018. Febrero 7, 2018. MATG1013

    Tema 1. Use el método de Runge Kutta de 2do orden (Euler Mejorado) para sistemas de ecuaciones y aproxime la solución de la EDO de orden superior

    \frac{d^2\theta}{dt^2} + \frac{g}{L}\sin (\theta) = 0 \theta (0) = \frac{\pi}{6}, \theta '(0) =0

    Suponga que g=9.8 y L=2

    a) Plantee la formulación para 0 ≤t≤2, h=0.1

    b) Calcule el ángulo para t=1, usando h=0.25

    c) Estime el error (solo la fórmula del error para Euler Mejorado)

  • s2Eva_IIT2017_T2 Volumen de isla

    Ejercicio: 2Eva_IIT2017_T2 Volumen de isla

    isla = np.array([[0,1,0,0,0],
                     [1,3,1,1,0],
                     [5,4,3,2,0],
                     [0,0,1,1,0]])
    
    xi = np.array([0,100,200,300,400])
    yi = np.array([0, 50,100,150])
    

    Tamaño de la matriz: n=4, m=5

    cantidad de elementos por fila impar, aplica Simpson 1/3
    hx = (200-0)/2 =100
    fila=0
        vector = [0,1,0,0,0]
        deltaA = (100/3)(0+4(1)+0) = 4(100/3)
        deltaA = (100/3)(0+4(0)+0) = 0
        area0 = 4(100/3) + 0 = 4(100/3)
    fila=1
        vector = [1,3,1,1,0]
        deltaA = (100/3)(1+4(3)+1) = 14(100/3)
        deltaA = (100/3)(1+4(1)+0) = 5(100/3)
        area1 = 14(100/3) + 5(100/3) = 19(100/3)
    fila=2
        vector = [5,4,3,2,0]
        deltaA = (100/3)(5+4(4)+3) = 24(100/3)
        deltaA = (100/3)(3+4(2)+0) = 11(100/3)
        area2 = 24(100/3) + 11(100/3) = 35(100/3)
    fila=3
        vector = [0,0,1,1,0]
        deltaA = (100/3)(0+4(0)+1) = (100/3)
        deltaA = (100/3)(1+4(1)+0) = 5(100/3)
        area3 = (100/3) + 5(100/3) = 6(100/3)
    
    areas = [ 4(100/3), 19(100/3), 35(100/3), 6(100/3)]
    areas = (100/3)[ 4, 19, 35, 6 ]
    
    areas tiene cantidad de elementos par, aplica Simpson 3/8
        hy = (150-0)/3 = 50
        deltaV = (3/8)(50)(100/3)(4+3(19) + 3(35)+ 6)
               = (25*25)(168)
        Volumen = 107500
    

    2evaiit2017t2 Vol 01

    tramos:  4 5
    areas:  [  133.33333333   633.33333333  1166.66666667    66.66666667]
    Volumen:  107500.0
    

    las instrucciones en python para encontrar el valor son:

    # 2da Eval II T 2017. Tema 2
    # Formula de simpson
    # Integración: Regla Simpson 1/3 y 3/8
    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import axes3d
    
    def simpson13(xi,yi):
        '''
        las muestras deben ser impares
        '''
        area = 0
        muestras = len(xi)
        impar = muestras%2
        if impar == 1:
            for i in range(0,muestras-2,2):
                h = (xi[i+2] - xi[i])/2
                deltaA = (h/3)*(yi[i]+4*yi[i+1]+yi[i+2])
                area = area + deltaA
        return(area)
    
    def simpson38(xi,yi):
        '''
        las muestras deben ser pares
        '''
        area = 0
        muestras = len(xi)
        impar = muestras%2
        if impar == 0:
            for i in range(0,muestras-3,3):
                h = (xi[i+3] - xi[i])/3
                deltaA = (3*h/8)*(yi[i]+3*yi[i+1]+3*yi[i+2]+yi[i+3])
                area = area + deltaA
        return(area)
    
    def simpson(xi,yi):
        '''
        Selecciona el tipo de algoritmo Simpson
        '''
        muestras = len(xi)
        impar = muestras%2
        if impar == 1:
            area = simpson13(xi,yi)
        else:
            area = simpson38(xi,yi)
        return(area)
        
    
    # INGRESO
    isla = np.array([[0,1,0,0,0],
                     [1,3,1,1,0],
                     [5,4,3,2,0],
                     [0,0,1,1,0]])
    
    xi = np.array([0,100,200,300,400])
    yi = np.array([0, 50,100,150])
    
    # PROCEDIMIENTO
    tamano = np.shape(isla)
    n = tamano[0]
    m = tamano[1]
    
    areas = np.zeros(n,dtype = float)
    for fila in range(0,n,1):
        unafranja = isla[fila,:]
        areas[fila] = simpson(xi,unafranja)
    volumen = simpson(yi,areas)
    
    # SALIDA
    print('tramos: ', n,m)
    print('areas: ', areas)
    print('Volumen: ', volumen)
    
    # Gráfica
    X, Y = np.meshgrid(xi, yi)
    fig = plt.figure()
    ax = fig.add_subplot(111, projection = '3d')
    ax.plot_wireframe(X,Y,isla)
    plt.show()