Ejercicio: 1Eva2019TII_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 en X1: 2.4
Evaluando p(x1): 0.2894044975129779
Error en x1: 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
Resultado con el algoritmo
Matriz Vandermonde:
[[ 0. 0. 1.]
[ 4. 2. 1.]
[16. 4. 1.]]
los coeficientes del polinomio:
[ 0.04994705 -0.41595438 1. ]
Polinomio de interpolación:
0.049947050111716*x**2 - 0.415954379637711*x + 1.0
formato pprint
2
0.049947050111716*x - 0.415954379637711*x + 1.0
Evaluando en X1: 2.4
Evaluando p(x1): 0.2894044975129779
Error en x1: 0.011789714399224216
Error relativo: 0.039143230291095066
Evaluando en X2: 1.7
Evaluando p(x2): 0.2894044975129779
Error en x2: 0.011789714399224216
Error relativo: 0.039143230291095066
Presentado por secciones, semejante a lo desarrollado en clases
# 1Eva_IIT2019_T2 Proceso Termodinámico
# El polinomio de interpolación
import numpy as np
import sympy as sym
# INGRESO
fx = lambda x: np.exp(-0.5*x)
xi =np.array([0,2,4],dtype=float)
# determina vector
fi= fx(xi)
# PROCEDIMIENTO
# Convierte a arreglos numpy
xi = np.array(xi,dtype=float)
fi = np.array(fi,dtype=float)
B = fi
n = len(xi)
# Matriz Vandermonde D
D = np.zeros(shape=(n,n),dtype=float)
for i in range(0,n,1):
for j in range(0,n,1):
potencia = (n-1)-j # Derecha a izquierda
D[i,j] = xi[i]**potencia
# Aplicar métodos Unidad03. Tarea
# Resuelve sistema de ecuaciones A.X=B
coeficiente = np.linalg.solve(D,B)
# Polinomio en forma simbólica
x = sym.Symbol('x')
polinomio = 0
for i in range(0,n,1):
potencia = (n-1)-i # Derecha a izquierda
termino = coeficiente[i]*(x**potencia)
polinomio = polinomio + termino
# Polinomio a forma Lambda x:
# para evaluación con vectores de datos xin
muestras = 21
px = sym.lambdify(x,polinomio)
# SALIDA
print('Matriz Vandermonde: ')
print(D)
print('los coeficientes del polinomio: ')
print(coeficiente)
print('Polinomio de interpolación: ')
print(polinomio)
print('\n formato pprint')
sym.pprint(polinomio)
# literal b
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
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
import matplotlib.pyplot as plt
a = np.min(xi)
b = np.max(xi)
xin = np.linspace(a,b,muestras)
yin = px(xin)
# Usando evaluación simbólica
##yin = np.zeros(muestras,dtype=float)
##for j in range(0,muestras,1):
## yin[j] = polinomio.subs(x,xin[j])
plt.plot(xi,fi,'o', label='[xi,fi]')
plt.plot(xin,yin, label='p(x)')
plt.plot(xin,fx(xin), label='f(x)')
plt.xlabel('xi')
plt.ylabel('fi')
plt.legend()
plt.title(polinomio)
plt.show()