Interpolación: funciones
Informática. Ajuste. Lagrange: polinomio. Programa

- Interpolación: funciones
Ficha resumen del documento - Interpolación: funciones
Versión PDF - Interpolación: funciones
Versión para descargar
APROXIMACIÓN DE FUNCIONES DISCRETAS (Ajuste de Funciones)
FUNCIÓN DE INTERPOLACIÓN
Será una función que pasará exactamente por los puntos que optendremos como datos, tal y como se representa en la siguiente gráfica:
P(x)
P2
P4
P1
P3
a b
Este tipo de funciones se utilizan en temas relacionados con el control, debido a que minimizo el error en un punto concreto (error mínimo puntual).
INTERPOLACIÓN DE LAGRANGE
Queremos optener una función P(x) que pase por los puntos que tenemos.
Pn(xi) = yi
En un principio , nos centraremos en allar una función de primer grado: P1(x)
P1(x) = a0 +a1x
y0 = a0 +a1x0
y1 = a0 + a1x1 ! a0 = ( y1- a0) / x1
a1 = ( y1-y0) / (x1-x0)
P1(x) = (x-x1)y0/(x0-x1) - (x-x0)y1/(x1-x0) !
P1(x) = L0y0 + L1y1 Polinomio de 1º de Lagrange
Generalizando dicha función para un grado `n' obtendríamos lo siguiente:
n
Pn(x) = Li(x) yi
i=0
n
Li(x) = (x-xj) / (xi-xj)
j=0
j"i
!
POLINOMIO DE LAGRANGE
Para el cálculo de dicho polinomio utilizaremos el siguiente programa:
program int_lagrange;
type
lista=array [1..10] of real;
var
lista1,lista2,lista3:lista;
punto,i:integer;
valor:real;
procedure introducir_datos (var lista1,lista2:lista;punto:integer);
var
punto1,punto2:real;
i:integer;
begin
for i:=1 to punto do
begin
writeln ('Introduce el valor de X',i-1,':');
readln (punto1);
lista1 [i]:=punto1;
writeln ('Introduce el valor de Y',i-1,':');
readln (punto2);
lista2 [i]:=punto2;
end;
end;
procedure calcular (var lista3:lista;lista1,lista2:lista;punto:integer;valor:real);
var
i,j:integer;
cal,cal1,resultado:real;
begin
for i:=1 to punto do
begin
cal:=1;
cal1:=1;
for j:=1 to punto do
if (j<>i) then
begin
cal:=cal*(valor-(lista1 [j]));
cal1:=cal1*(lista1 [i]-lista1 [j]);
end;
lista3 [i]:=cal/cal1;
end;
resultado:=0.0;
for i:=1 to punto do
resultado:=resultado+(lista3 [i]*lista2 [i]);
writeln ('EL RESULTADO ES: ',resultado);
end;
begin
writeln ('Introduce la cantidad de puntos:');
readln (punto);
writeln ('Introduce el valor donde quieres realizar el calculo:');
readln (valor);
introducir_datos (lista1,lista2,punto);
calcular (lista3,lista1,lista2,punto,valor);
end.
Para probar el funcionamiento del programa introduciremos los siguientes ejemplos logrando resultados satisfactorios:
EJEMPLO 1:
| i | 0 | 1 | 2 |
| xi | 2 | 2.5 | 3 |
| F(xi) = yi | 0.69315 | 0.91629 | 1.09861 |
Realizando el cálculo para: X = 2.3
RESULTADO = 0.8319324
EJEMPLO 2:
| i | 0 | 1 | 2 | 3 |
| xi | 0 | 0.1 | 0.3 | 0.6 |
| F(xi) = yi | 1.00000 | 1.10517 | 1.34986 | 1.82212 |
Realizando el cálculo para: X = 0.14
RESULTADO = 1.15025136
El intervalo [a,b] contiene todos los ordenados Xi ,además, la f(x) y todas sus derivadas hasta (n+1) son sus continuas. El error cometido al reemplazar f(x) por P(x) de grado n para cualquier valor X en [a,b].
|f(x) - Pn(x)| " (x-x0)(x-x1)... (x-xn)f(n+1)()/(n+1)!
Tomando como el caso más desfavorable. ( " [a,b] )
Siguiendo con el EJEMPLO 1 ,el calculo del error se realizaría del siguiente modo:
|lnx - P2(x)| = (x-2)(x-2.5)(x-3) f '''() / 3!
X = 2.3 ! |lnx - P2(x)| = (2.3-2)(2.3-2.5)(2.3-3) 2 / 3 3! =
= 0.00175
Teniendo en cuenta que el peor caso es : x0= 2 ( x " [a,b] )