Ejercicio: 1Eva_IIT2019_T2 Proceso Termodinámico
la ecuación para el problema se describe como:
f(x)=e^{-0.5x}ecuación que se usa para describir los siguientes puntos:
x | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
f(x) | 1 | 0.60653065 | 0.36787944 | 0.22313016 | 0.13533528 |
Como el polinomio es de grado 2, se utilizan tres puntos. Para cubrir el intervalo los puntos seleccionados incluyen los extremos y el punto medio.
literal a
Con los puntos seleccionados se escriben las ecuaciones del polinomio:
p_2(x)= a_0 x^2 + a_1 x + a_2usando los valores de la tabla:
p_2(0)=a_0 (0)^2 + a_1 (0) + a_2 = 1 p_2(2)=a_0 (2)^2 + a_1 (2) + a_2 = 0.36787944 p_2(4)=a_0 (4)^2 + a_1 (4) + a_2 = 0.13533528con la que se escribe la matriz Vandermonde con la forma A.x=B
A= [[ 0., 0., 1.,] [ 4., 2., 1.,] [16., 4., 1.,]] B= [[1. ], [0.36787944], [0.13533528]])
matriz aumentada
[[ 0., 0., 1., 1. ] [ 4., 2., 1., 0.36787944] [16., 4., 1., 0.13533528]]
matriz pivoteada
[[16., 4., 1., 0.13533528] [ 4., 2., 1., 0.36787944] [ 0., 0., 1., 1. ]]
Resolviendo por algún método directo, la solución proporciona los coeficientes del polinomio
Tarea: escribir la solución del método directo, semejante a la presentada en el tema 3
[[ 0.04994705] [-0.41595438] [ 1. ]]
con lo que el polinomio de interpolación es:
p_2(x) = 0.04994705 x^2 - 0.41595438 x + 1.0en el enunciado se requiere la evaluación en x=2.4
p_2(2.4) = 0.04994705 (2.4)^2 - 0.41595438 (2.4) + 1.0 f(2.4)=e^{-0.5(2.4)} error = |f(2.4)-p_2(2.4)|Evaluando p(2.4): 0.2894044975129779 Error en 2.4: 0.011789714399224216 Error relativo: 0.039143230291095066
La diferencia entre la función y el polinomio de interpolación se puede observar en la gráfica:
literal b
Tarea: Encontrar la cota de error con f(1.7)
Algoritmo en Python
Presentado por secciones, semejante a lo desarrollado en clases
# Interpolación por polinomio import numpy as np import matplotlib.pyplot as plt # INGRESO, Datos de prueba fx = lambda x: np.exp(-0.5*x) xi = np.array([0,2,4]) # determina vector n = len(xi) fi = np.zeros(n,dtype=float) for i in range(0,n,1): fi[i]= fx(xi[i]) # PROCEDIMIENTO # Arreglos numpy xi = np.array(xi) fi = np.array(fi) n = len(xi) # Vector B en columna B = np.array(fi) B = fi[:,np.newaxis] # Matriz Vandermonde D D = np.zeros(shape=(n,n),dtype =float) for f in range(0,n,1): for c in range(0,n,1): potencia = (n-1)-c D[f,c] = xi[f]**potencia # Resolver matriz aumentada coeficiente = np.linalg.solve(D,B) # Polinomio en forma simbólica import sympy as sym x = sym.Symbol('x') polinomio = 0 for i in range(0,n,1): potencia = (n-1)-i termino = coeficiente[i,0]*((x**potencia)) polinomio = polinomio + termino # Convierte polinomio a funcion # para evaluación más rápida px = sym.lambdify(x,polinomio) # Para graficar el polinomio k = 100 inicio = np.min(xi) fin = np.max(xi) puntosx = np.linspace(inicio,fin,k) puntosy = px(puntosx) puntosf = fx(puntosx) # Puntos evaluados x1 = 2.4 px1 = px(x1) fx1 = fx(x1) errorx1 = np.abs(px1-fx1) errorx1rel = errorx1/fx1 x2 = 1.7 px2 = px(x1) fx2 = fx(x1) errorx2 = np.abs(px1-fx1) errorx2rel = errorx1/fx1 # SALIDA print('Matriz Vandermonde: ') print(D) print('los coeficientes del polinomio: ') print(coeficiente) print('Polinomio de interpolación: ') print(polinomio) print() print('Evaluando en X1: ',x1) print('Evaluando p(x1): ',px1) print('Error en x1: ',errorx1) print(' Error relativo: ', errorx1rel) print() print('Evaluando en X2: ',x2) print('Evaluando p(x2): ',px2) print('Error en x2: ',errorx2) print(' Error relativo: ', errorx2rel) # Grafica plt.plot(xi,fi,'o',label='muestras' ) plt.plot(puntosx,puntosy,label='p(x)') plt.plot(puntosx,puntosf,label='f(x)') plt.xlabel('x') plt.legend() plt.show()