Métodos numéricos Ing. Matilde Montealegre Madero, MSc. Interpolación y Aproximación Polinomial POLINOMIOS DE INTERPOLACIÓN La interpolación se usa cuando es necesario estimar valores intermedios entre datos precisos. El método más común es la Interpolación Polinomial, la cual consiste en determinar el único polinomio de n-ésimo orden que se ajusta a m+1 puntos de datos, en donde: f ( x) a0 a1 x a2 x 2 ...am 1 x n 1 am x n (1) Luego, para m+1 datos, existe un polinomio de orden n o menor que pasa a través de todos los puntos y el cual provee una fórmula para calcular los valores intermedios. Ejemplo: f (x) Interpolación Lineal: f1(x) es un polinomio de orden 1. Conecta dos puntos, x0 y x1. x0 x1 x En donde despejado para y se tiene: Luego, para el polinomio de primer orden que Conecta los puntos, x0 y x1. f1 ( x) f ( x0 ) f ( x1 ) f ( x0 ) x x0 x1 x0 (2) f (x) Interpolación Cuadrática o Parabólica: Conecta 3 puntos: x0, x1, y x2 x0 x1 x2 x Luego, para el polinomio de segundo orden: f 2 ( x) b0 b1 ( x x0 ) b2 ( x x0 )( x x1 ) (3) Una vez encontrando los valores de los coeficientes de la ecuación general para un polinomio de segundo orden, se tiene: b0 f ( x0 ) b1 (4) f ( x1 ) f ( x0 ) x1 x0 f ( x2 ) f ( x1 ) f ( x1 ) f ( x0 ) x2 x1 x1 x0 b2 x2 x0 (5) (6) 1. POLINOMIO DE INTERPOLACION DE NEWTON Generalizando para un polinomio de orden n, se requieren m+1 datos: X0, X1, X2, …..Xm. El polinomio de m-ésimo orden es: f n ( x) b0 b1 ( x x0 ) ...bm ( x x0 )( x x1 )...( x xm 1 ) (7) Los coeficientes b0, b1,…bm se evalúan usando las siguientes fórmulas b0 f ( x0 ) b1 f [ x1 , x0 ] b2 f [ x2 , x1 , x0 ] (8) .... bm f [ xm , xm 1 ,...x1 , x0 ] Las funciones entre corchetes indican las diferencias finitas divididas. Por ejemplo la primera diferencia finita es: f [ xi , x j ] f ( xi ) f ( x j ) xi x j La segunda diferencia finita es: (8) f [ xi , x j , xk ] f [ xi , x j ] f [ x j , xk ] xi xk (9) Similarmente la m-ésima diferencia finita es: f [ xm , xm 1...x1 , x0 ] f [ xm , xm 1...x1 ] f [ xm 1 , xm 2 ...x1 , x0 ] xm x0 (10) Los valores de b0, b1, …bm son reemplazados en la Ec. 7 para obtener el polinomio de interpolación de Newton, el cual llamado Polinomio de Interpolación de Diferencias Divididas de Newton. f n ( x) f ( x0 ) f [ x1 , x0 ]( x x0 ) f [ x2 , x1 , x0 ]( x x0 )( x x1 ) ... f [ xm , xm 1 ,..., x1 , x0 ]( x x0 )( x x1 )...( x xm 1 ) (11) El error del polinomio de Newton se calcula como: Rn f [ xm 1 , xm , xm1...x1 , x0 ]( x x0 )( x x1 )....( x xm ) (12) 2. POLINOMIOS DE INTERPOLACIÓN DE LAGRANGE Son una simple reformulación de los polinomios de Newton que evitan el cómputo de diferencias divididas. Puede ser representado como: m f n ( x) Li ( x) f ( xi ) (12) i0 m Donde Li ( x) j 0 j i x xj xi x j (13) representa el “producto de” Ejemplo: para polinomio de orden 1. n = 1, luego se determina f1(x). Reemplazando en la Ec. 12 y utilizando la Ec. 13. m 1 f1 ( x) Li f ( xi ) i 0 f1 ( x) L0 f ( x0 ) L1 f ( x1 ) 1 L0 ( x) j 0 j 0 1 L1 ( x) j 0 j 1 x xj xi x j x xj xi x j x x1 x0 x1 x x0 x1 x0 Luego se tiene: f1 ( x) x x0 x x1 f ( x0 ) f ( x1 ) x0 x1 x1 x0 (14) Para un polinomio de segundo orden n = 2, se determina f2(x). Reemplazando en la Ec. 12 y utilizando la Ec. 13 resulta en: 2 f 2 ( x) Li ( x) f ( xi ) i 0 n Li ( x) j 0 j i x xj xi x j 2 j 0 j i x xj xi x j f 2 ( x) L0 ( x) f ( xo ) L1 ( x) f ( x1 ) L2 ( x) f ( x2 ) 2 L0 ( x) j 0 j 0 2 L1 ( x) j 0 j 1 2 L2 ( x) j 0 j2 x xj xi x j x xj xi x j x xj xi x j x x1 x x2 x0 x1 x0 x2 x x0 x x2 x1 x0 x1 x2 x x0 x x1 x2 x0 x2 x1 Luego se tiene: f 2 ( x) x x0 x x2 x x0 x x1 ( x x1 ) ( x x2 ) f ( xo ) f ( x1 ) f ( x2 ) (15) ( x0 x1 ) ( x0 x2 ) x1 x0 x1 x2 x2 x0 x2 x1 Ejemplo: La interpolación polinomial es la base de muchos tipos de integración numérica y tiene otras aplicaciones teóricas. En la práctica a menudo tenemos una tabla de datos {f(xi,yi), i = 0, 1, 2, ...,n}, obtenida por muestreo o experimentación. Suponemos que los datos corresponden a los valores de una función f desconocida (a veces es conocida, pero queremos cambiarla por una función más sencilla de calcular). El “ajuste de curvas” trata el problema de construir una función que aproxime muy bien estos datos (es decir, a f ). Un caso particular de ajuste de curvas es la interpolación polinomial: En este caso se construye un polinomio P(x) que pase por los puntos de la tabla. La interpolación polinomial consiste en estimar f (x*) con P(x*) si x* no está en la tabla pero se puede ubicar entre estos valores. Una situación típica se muestra en el siguiente ejemplo en el que tenemos datos que relacionan temperatura con el segundo coeficiente virial1. Taller de Clase #1: Métodos Numéricos Ing. Matilde Montealegre Madero, MSc. POLINOMIOS DE INTERPOLACIÓN DE LAGRANGE Son una simple reformulación de los polinomios de Newton que evitan el cómputo de diferencias divididas. Puede ser representado como: 𝑓 (𝑥) = ∑ 𝐿 (𝑥)𝑓(𝑥 ) (1) Donde 𝐿 (𝑥 ) = ∏ (2) Para interpolar se necesitan n+1 puntos dados por: Donde n, indica el orden del polinomio usado para interpolar y x es el punto para interpolar. Para interpolar para un polinomio de orden n se sigue el siguiente Algoritmo: Organizar información como se muestra en siguiente imagen: ALGORITMO 1. Dimensionar los vectores X() y Y() donde almacenara la información para N datos, y las variables necesarias para el proceso como se indica en imagen. 2. 'llamar a procedimiento que genere de forma aleatorio en el rango [a,b] ' los valores del vector X() 'almacenar los valores aleatorios en vector X() e imprimirlos en la hoja (columna B) 'Leer rango de valores [a,b] para generador de aleatorios Utilice la FUNCTION Function generaaletorio(a, b) generaaletorio = (b - a) * Rnd() + a End Function 3. Ordenar los valores generados y almacenados en el vector X() utilizando el siguiente procedimiento. ' ver https://www.ecured.cu/Ordenamiento_de_burbuja Procedimiento usando versión lenguaje C Sub OrdenarBurbuja(VectorOriginal, n) Dim Temp As Double, i As Integer, j As Integer For i = 0 To n - 1 For j = i + 1 To n If VectorOriginal(i) > VectorOriginal(j) Then Temp = VectorOriginal(i) VectorOriginal(i) = VectorOriginal(j) VectorOriginal(j) = Temp End If Next j Next i End Sub 4. Genere valores para Y() usando la función 𝑓(𝑥) = 𝑒 , e imprimir en la columna D 5. 'evalua posicion Pos donde empieza la tabla de datos dependiendo del orden del polinomio. Buscar en el Vector X() la posición (Pos) que sea mayor que el x a interpolar. Para el ejemplo de la imagen. Pos = 8 dado que X(8)= 3.799073339 es mayor que xainterpolar z=3.7 6. Con base en el valor de Pos seleccione los valores a usar en el método de Lagrange para X o, X1, X2…Xn generando la tabla de datos dependiendo del orden a partir de la posición Pos1. ESTO PARA ASEGURAR QUE LOS VALORES DE LA TABLA DE DATOS QUE DEPENDEN DEL ORDEN SIEMPRE ESTEN DENTRO DE LOS DATOS DONDE INTERPOLAMOS (EVITAR VOLADAS DEL VECTOR). Rem asigna valores a Pos1 de acuerdo con la posición encontrada para Pos. Rem ver imagen explicativa de los posibles casos Select Case Pos Case 0 'first position Pos1 = 0 Case n 'last position Pos1 = Pos - Order Case n - Order To n - 1 'any position between N-order and the one before last Pos1 = n - Order Case Else 'any position in between Pos1 = Pos - 1 End Select 7. 'colocaR information in Xi(), Yi() de acuerdo con lo asignado con la posición asignada a Pos1. Ver imagen. 8. Realizar el procedimiento de Lagrange usando las fórmulas 1 y 2. De acuerdo con el siguiente algoritmo para el cálculo del polinomio de Lagrange Se tiene: La entrada: Número de elementos n es el orden del polinomio xi y yi son los valores de la tabla de datos dependiendo del orden, X i() y Yi() son vectores de tamaño del orden. z es el valor para interpolar i, j, son las variables para manejar los ciclos for (para) l (letra ele) para almacenar los Li(x) valor para almacenar el f(x) ENTRADA: número de elementos n, vectores xi, yi,li y punto z. SALIDA: valor del polinomio en el punto z.(valor) valor=0 para i=0 hasta n Hacer li=yi Para j=0 hasta n Hacer Si i <> j li=li*(z-xj)/(xi-xj) fin si fin para valor=valor+li fin para FIN DEL ALGORITMO Taller de Clase #2: Métodos Numéricos Ing. Matilde Montealegre Madero, MSc. Metodo Polinomio de Interpolacion de Newton Codigo adaptado de Programa realizado en Lenguaje C https://www.youtube.com/watch?v=uKiNxSz6PhE DIFERENCIAS FINITAS DE NEWTON – RESULTADOS EN EXCEL ALGORITMO: PASO 1: Seguir los pasos 1 a 7 como se indica en ALGORITMO para interpolar por el metodo de Lagrange. Seguir estos pasos permiten encontrar los valor Xi(), Yi() como se muestra en la imagen (columna I y J) que interpolan dado el orden del polinomio entrada en la celda F2. PASO 2: Crear una matriz bi() del tamano del orden del polinomio bi(orden,orden) para almacenar las diferencias finitas de Newton (ver imagen de tabla abajo) que permiten encontrar los coeficientes de la ecuacion b0, b1, b2…bn En formula General corresponde a: tabla de diferencias finitas de Newton Se utilizan las formulas: Rem CODIGO EN MACROS EN EXCEL - PASOS 1 a 7 COMO SE HIZO EN INTERPOLACION DE LAGRANGE Rem PROCESO DE INTERPOLACION DIFERENCIAS FINITAS DE NEWTON Rem VALOR INTERPOLADO Rem xainterpolar Rem xi() y yi() Rem se crea una matriz bi(orden,orden) o tabla de diferencias Dim bi() As Double, columna As Integer ReDim Preserve bi(orden, orden) Rem paso 2-A: se inicializa la tabla de diferencias con los valores de yi() e imprime valores para columna j=0 fila = 5 For i = 0 To orden bi(i, 0) = yi(i) Cells(fila, 13).Value = bi(i, 0) fila = fila + 1 Next i Rem paso 2-B: se calcula la tabla de diferencias columnas j=1,2,3,4…. For j = 1 To orden For i = 0 To orden - j bi(i, j) = (bi(i + 1, j - 1) - bi(i, j - 1)) / (xi(i + j) - xi(i)) Next i Next j Rem imprime tabla de diferencias columnas j=1,2,3,4…. columna = 14 For j = 1 To orden fila = 5 For i = 0 To orden - j Cells(fila, columna).Value = bi(i, j) fila = fila + 1 Next i columna = columna + 1 Next j PASO 3: Interpola con la variable a interpolar (xainterpolar) y los valores de los xi() para encontrar el valor interpolado (valor) Rem paso 3: interpola con xainterpolar y xi() Rem xainterpolar Rem define xt para guardar los resultados de (x-x 0)(x-x1)…(x-xm-1) como se indica en formula Dim xt As Double Rem inicializa e imprime b0=f(x0) que se encuentra almacenado en bi(0, 0) valor = bi(0, 0) Cells(5, 12).Value = valor Rem calcula valor (valor interpolado para xainterpolar) xt = 1 For j = 0 To orden - 1 xt = xt * (xainterpolar - xi(j)) valor = valor + (bi(0, j + 1)) * xt Next j PASO 4: IMPRIME RESULTADO INTERPOLADO (valor) e imprime ELERROR Cells(3, 6).Value = valor 'Cells(7, 5).Value = valor 'valor verdadero con la funcion valorV = f(xainterpolar) Cells(7, 5).Value = valorV If (valorV <> 0) Then elerror = Abs((valorV - valor) / valorV) * 100 End If Cells(10, 5).Value = elerror FIN DEL ALGORITMO ORGANIZAR macros en EXCEL PARA DESARROLLAR POR LOS METODOS DE LAGRANGE Y DE NEWTON COMO SE INDICA EN IMAGEN. ORGANICE SU INFORMACION EN UNA HOJA POR METODO. RESULTADOS METODO DE LAGRANGE. Interpola 𝑓(𝑥) = 𝑒 para x=3.8 con polinomio de orden 2. CODIGO PARA IMPRIMIR TITULOS Sub imprimirTitulos() Cells(1, 1).Value = "a" Cells(2, 1).Value = "b" Cells(3, 1).Value = "I" Cells(3, 2).Value = "aleatorios" Cells(3, 3).Value = "x(I)" Cells(3, 4).Value = "y(I)" Cells(1, 5).Value = "x a interpolar" Cells(2, 5).Value = "orden polinomio" Cells(3, 5).Value = "valor interpolado" Cells(6, 5).Value = "Valor Verdadero" Cells(9, 5).Value = "Error %" Cells(3, 8).Value = "TABLAS DE DATOS DEPENDIENDO DEL ORDEN" Cells(4, 8).Value = "i" Cells(4, 9).Value = "xi(i)" Cells(4, 10).Value = "yi(i)" Cells(1, 7).Value = "Pos" Cells(2, 7).Value = "Pos1" Cells(1, 3).Value = "N:total datos" End Sub RESULTADOS METODO DE NEWTON Interpola 𝑓(𝑥) = 𝑒 para x=3.8 con polinomio de orden 2.