You are on page 1of 8

APROXIMACION POR POLINOMIOS

Tenemos una funcin y; dada por una expresin (por ejemplo y = sen(x) ) por una tabla de datos (x , y)
(Interpretada como dos vectores
{ } { } n i y y x x
i i
: ; ; 1
. Nos proponemos "acercarnos " con un
polinomio p = p(x) con el objeto de que la desviacin entre p e y sea mnima ( o sea d = y - p debe ser
"lo ms pequeo posible " ) donde y : funcin o vector a aproximar p : polinomio o vector aproximante.
Aproximacin de mnimos cuadrados de Gauss
Polinomios con la norma 2
m
m
i
m
i
m
i i i
a x a x a x a x p x z ....... ) ( ) ( + +
2
2
1
1 0
{ }
i i i
p p x p p ) (

definimos el error cuadrtico medio con la norma 2
) , , ( ) .......
,....... m m
m
i
m
i
m
i i
n
1 = i
i i
a a a a f a x a x a x a y ( ) p - y (
n
1 i=
p y d E
2 1 0
2 2
2
1
1 0
2
2 2




Una vez que se eligi el grado del polinomio, para una nube (x , y ) de puntos dados, la desviacin es slo
funcin de los coeficientes
i
a
. Debe ser
2
d E
mnimo, o sea:

E
a
=0
i
i = 0: m
m + 1 ecuaciones que permiten resolver el problema.
Caso particular para m = 1,
b x a p b x a p
i i
i
+ + .


2
) b x a y ( = E
i
i
n
1 = i


x
b) -
x
a - y ( = 0 =
a
E
i i
i
n
1 = i


1
i
x
i
y x b + a = x
n
1 = i
2
i
n
1 = i
i
n
1 = i

b) -
x
a - y ( = 0 =
b
E
i
i
n
1 = i


n b + x a. =
i
y
n
1 = i
i
n
1 = i


y
x y

b
a

n x
x x
n
i
i
n
i
i i
n
i
i
n
i
i
n
i
i
1
1
1
]
1

1
1
1
]
1

1
1
1
]
1

1
1
1
1 1
2
Ecuaciones normales
En general para un polinomio de grado m, llegamos a un sistema lineal de m+1 ecuaciones con m+1 incgnitas
(ecuaciones normales)
2
1
1
1
1
1
1
1
1
1
1
1
1
1
]
1

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
]
1

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
]
1

.
...
...
...
.
.
...
...
...
...
.
... ... ... ...
... ... ... ... ... ...
... ... .. ... ...
... ... ... ...
... ... ...
...
n
i
i
m
i
n
i
i
m
i
n
i
i
m
m
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
y
x y
x y
a
a
a
a
n x
x
x x
x x x
x x x x x
1
1
1
1
1
1
0
1
1
3 2
1
3 2
1
2 2
1
3 2
1
2 2
1
1 2
1 1
3
1
2
1
1 2
1
2
En MatLab esto lo resuelve el comando polyfit , el cual permite calcular el polinomio de ajuste de la nube de
datos, dados en forma de vectores.
p=polyfit( x, y, m); ( donde m es el grado del polinomio )
z =polyval ( p, x); ( evaluamos el polinomio p en los puntos x
i
dados )
Error = norm( z-y); ( calculamos el Error cometido al aproximar )
xx = min(x) : .1: max(x) ; (representa la variable continua)
zz=polyval ( p, xx); ( evaluamos el polinomio p en la variable continua xx)
plot( x, y, 'o', xx, zz ) ( graficamos la nube de puntos y la curva de ajuste)
INTERPOLACION
A medida que m aumenta disminuye el error, cuando m = n-1, el error es cero y el ajuste pasa a ser
interpolacin
p=polyfit( x , y, length(n-1) )
3
Verifico con y = polyval ( p , x ) la igualdad entre z e y
Ejemplo1:
Interpolar linealmente entre los puntos (1,4) y (2,1) para x = 1.4
Solucin: x =[1 2]; y=[4 1]; p = polyfit( x, y, 1); yi = polyval ( p, 1.4)
yi=3.4
Ejemplo 2: Interpolar linealmente x = 0:.1:pi; y = sin(x) para xi = 0.57
Solucin
>> x=0:.1: pi; y=sin(x);
>>xi = 0.57; ii = length( find( x<xi) ); % indice del x anterior a xi
xx =[x(ii) x(ii+1)]; yy =[y(ii) y(ii+1)]; p = polyfit(xx, yy, 1); yi = polyval(p,xi)
APROXIMACION CON UNA FUNCION CUALQUIERA
Tenemos una funcin
) (x y y
; dada por una expresin ( por ejemplo
) ( x sen y
) por una
tabla de datos
) , ( y x
(Interpretada como dos vectores
{ } { } n i y y x x
i i
: ; ; 1
)
Nos proponemos "acercarnos" con una funcin
) ( x z z
con el objeto de que la desviacin entre z e y
sea mnima (o sea d = z - y debe ser "lo ms pequeo posible " )
y : funcin o vector a aproximar
z : funcin o vector aproximante, elegido segn las caractersticas de los datos. Esta funcin tiene parmetros
i
C

que permiten adaptarlas a los datos lo mejor posible, es decir:

) , .......... , (
m
p p
C C C f z y d
2 1

Debe ser mnimo.
Dada una nube de puntos
) , ( y x
los pasos para aproximar son
1. Elegimos una funcin z = f ( x ) con " m " parmetros
m
C C C , .......... ,
2 1
, que aproxima a y
(x)
2. Elegimos la norma " p " que define el error de aproximacin

) ..... ,
2
,
1
( ) , (
m
C C C f p z y norm Desvio
p
z - y
Construimos una funcin desvo o error

) , ( p z y norm
donde se define la funcin z de aproximacin (ajuste) y la norma elegida. (ver funmin
)
4
3. Aplicamos un algoritmo para minimizar la norma con respecto a los parmetros
i
C

estos
algoritmos (fminsearch) iterativos precisan de un valor de partida.
4. Hallados los
i
C

se representa grficamente los datos y su ajuste.
Repaso de Norma
Recordemos la funcin norma(v), que "mide" el tamao de un vector v = { v
i
}
v = )
v
(
p
p
p
i
n
1 = i
/ 1

con notacin MatLab norm( v , p )


Casos particulares importantes
p = 2 Norma Euclidea
v
= v
2
i
n
1 i=

2
norm(v, 2 ) norm(v )
p = 1
|
v
| v
i
n : 1 i=

1
norm ( v , 1 )
p = |
v
| mximo v
i
n i : 1

norm( v , inf )
Algoritmo Simplex de Nelder - Mead
Este algoritmo sirve para minimizar una funcin f de m variables, viene implementado en MatLab con el
comando fminsearch.
Funciones mas usuales
a) polinomios: Onduladas, sin asntotas. Interceptada por una recta lo cortan en un nmero de puntos
igual a lo sumo al grado del polinomio.
Con norma 2 se usa c = polyfit ( x, y, m) que ajusta con un polinomio de grado m con norma 2.
Con otra norma (uno o infinito) se usa polyfit ( x, y, m) para generar los valores iniciales se puede usar
b) Racionales
5

'

+
+
c
a
y horizontal asntota Con
c
d
x vertical asntota Con
d x c
b x a
= y
c) Exponenciales : Ejemplo 1 :
3 1
2
C + e C = y
x C

3
1
2
3 1
0
3
3
1
C
C
y
C
x para C C x y C x y
x x
+ +

) ( ) (
lim lim
d) Circulares
4 3 2 1
) ( C C x C sen C z + +

Con (x
o
, y
o
) origen trasladado, de amplitud A y periodo T
Donde
1
C
= A
4
C
= y
o

T
C
2
2


o
x C C
2 3

Las variables usadas en un archivo .m son de alcance local , para introducir datos desde fuera del archivo debo
declararlos a x y como variables globales
Ejercicios: Dado x = 0: 8, y = [60 51 42 36 30 26 24 22 21] ajustar con una z = f ( x)
Solucin:
>> global x y %debe declararse antes de darle valor a las variables.
>> x = 0: 8; y = [60 51 42 36 30 26 24 22 21];
>> plot (x , y, o ) % del dibujo elegimos
c
+
c
e
c
= z
3
x
1
2

Debo crear una function,m llamada funmin


function d=funmin(c)
% d=funmin(c)
global x y
x=x(:);y=y(:);p=1;
z=c(1)*exp(-c(2)*x)+c(3);
d=norm(y-z,p);
>> c=[40 .3 20] %valores iniciales
>>c=fminsearch('funmin',c)
Resulta c= [45.9607 0.2641 14.7089]
6
Dibujo de Datos y ajuste
>>xx=min(x)-1:0.1:max(x)+1;z=c(1)*exp(-c(2)*xx)+c(3);
>> plot(x,y,'o',xx,z)
-1 0 1 2 3 4 5 6 7 8 9
10
20
30
40
50
60
70
80
La aproximacin con norma es muy sensible a los valores discordantes (outliers)
Por ello si no hay seguridad de buenos datos es preferible trabajar con norma 1
La aproximacin de mnimos cuadrados (norma 2), tiene caractersticas intermedias, pero su popularidad
se debe a razones histricas y al ms fcil manejo de los clculos.
Con el uso de la computadora, es conveniente explorar otros mtodos.
El mtodo de la norma infinito es conveniente cuando los datos son muy buenos. (Por ejemplo datos
generados por funciones que se las quiere aproximar)
Resumen AJUSTE
1) Dados una serie de puntos se elige un tipo de curva que se adecue a este tipo de distribucin de datos, por
ejemplo:
z=c(1)*(1-exp(-c(2)*x))+c(3);
z=c(1)*x+c(2);
z=c(1)*sqrt(x+c(2));
z=c(1)*x.^2+c(2)*x+c(3);
z=c(1)*exp(-c(2)*x)+c(3);
z=c(1)*x.^3+c(2)*x.^2+c(3)*x+c(4);
z=c(1)*x.*exp(-c(2)*x)+c(3);
z=(c(1)*x+c(2)).*exp(-c(3)*x.*x)+c(4);
z=100*exp(-c(1)*x)+c(2)*x;
z=c(1)*sen(x)+c(2);
z=c(1)./(x-c(2));
2) Elegir el tipo de Norma: (Norma=medida de un vector=(Sum(v
i
^
p
)^(1/p)))
Norma 1 para datos experimentales
Norma 2 para datos corrientes (la ms usada)
7
Norma 3 para datos matemticos (no usar cuando aparecen datos discordantes)
Ejemplo: >>p=2
3) Se obtienen se estiman y se introducen las constantes c(i)
>>c=[... ... ... ]
4) Minimizar c con un programa .m llamado por ejemplo funmin:
function d=funmin(c):
>>global x y p %introduce los datos a los vectores
>>x=x(:);y=y(:); %ordena los vectores en forma de columna
>>z=c(1)*x.^2+c(2)*x+c(3); %se introduce la ecuacin.
>>d=norm(z-y,p); %Hace la diferencia entre la funcin elegida y el valor dado.
Se llama al programa desde la linea de comandos:
>>c=fminsearch(funmin,c) %obtiene las constantes de la ecuacin.
5) Graficar:
xx=min(x):.1:max(x); z=c(1)*xx.^2+c(2)*xx+c(3);plot(x,y,'o',xx,z)
Graficar la funcin que ajusta a los puntos.
Para el caso de polinomios se puede utilizar directamente la funcin polyfit:
>>p=polyfit (x,y,n) %donde n es el grado del polinomio
>>z=polyval(p,x) %evalua p en x.
8

You might also like