Sunteți pe pagina 1din 13

Universidad de El Salvador

Introducción al análisis numérico para Ingeniería Química/Alimentos a través de


Matlab/Octave.

Capítulo 4: ajuste de curvas: regresiones e interpolación 


 
Tanto una regresión  como una interpolación, son en resumen, un modelo matematico que 
nos  permite  establecer  una  relación  entre  una  variable  independiente  (x)  y  una variable 
dependiente (y). Existen diferentes tipos de regresiones, así como interpolaciones. 
 
Un  punto  a  considerar, es  la importancia de  plotear(graficar)  los gráficos antes  de utilizar 
un  modelo  de  interpolación  o  regresion,  ya  que  esto  nos  ayudará  a  entender  mejor  su 
comportamiento,  es  allí   donde  se  puede  constatar  la  valiosa  utilidad  de  la  orientación a 
datos  de  los  lenguajes  matlab/octave   ya  que,  por  ejemplo,  un  gráfico  que  describa  un 
comportamiento como este: 
 
 
 
Podría  sugerir,  el  análisis  de  una 
forma  seccionada:  por  una  parte, 
los  puntos  comprendidos  en  el 
tiempo  de  0  a  0.6  pueden  ser 
perfectamente  descritos  por  una 
ecuación  lineal, pero el decremento 
de  0.6  a  1.4,  presentaría  un  error 
considerable  al  analizarse  como 
lineal. por  la  tendencia de la gráfica 
podríamos  sugerir   la  forma 
seccionada  de  e−ax .  Inclusive  bajo 
este  criterio, apreciamos  una  particularidad: la  seccion  no  corresponde  completamente al 
modelo  exponencial,  sino  a  parte  de  él  (sabemos  que  nunca  se  cortara  el  eje  de  las 
abcisas)  deben  aplicarse  por  tanto  las  condiciones  pertinentes  para  el  diseño  de  un 
sistema quimico. 
 
Ahora  bien,  existen  diferencias  sustanciales   entre  la  regresión  y  la  interpolación,  se 
pueden comprender dado el ejemplo siguiente: 
 
%datos experiementales 
x=0.5:0.5:3; 
y=[0.7,1.2,1.3,1.2,0.8,0.3]; 
hold on 
plot(x,y,'ro','markersize',4,'markerfacecolor','r') 
xx=linspace(0,3.1,100); 
 
%regresión 
p=polyfit(x,y,2); %polinomio de segundo grado 
yy=polyval(p,xx); 
plot(xx,yy,'b') 
 
%interpolación 
yy=spline(x,y,xx); 
plot(xx,yy,'g') 
 
hold off 
grid on 
legend('datos','regresion','interpolacion') 
xlabel('x') 
ylabel('y'); 
title('Interpolacion, regresion') 
 

 
­Regresiones 
La regresión es el ajuste de los datos experiementales a una función que describe el 
modelo particular. Sin embargo, no necesariamente el modelo comprende la totalidad de 
los puntos obtenidos experimentalmente. 
 
Existen diferentes métodos numéricos para regresiones, entre ellos podemos mencionar: 
 
Regresión por mínimos cuadrados 
Se realiza cuando los datos tienene errores sustanciales, ya que una regresión polinomial 
resultaría inadecuada (en su mayoría con datos experimentales). Un ejemplo de lo que 
queremos decir, puede observarse en el siguiente gráfico. 
 
Donde apreciamos una clara 
dispersión de los datos, pero 
que tambien denota una 
importante relación lineal entre 
los mismos. De hecho un 95% 
de los datos están dispersados 
entre las rectas paralelas 
cortadas. 
 
Regresión lineal 
Un modelo básico de regresión 
lineal, puede obtenerse de: 
 
 
Δy
m =   Δx  
Δy = Δx (m) =  y2 − y1  
Al tomar como referencia  x1 = 0  
y2 = mx2 + y1  que es lo mismo que decir:  y = ax + c  
Por tanto: 
y = ax + c = mx2 + y1  →   y = mx + c    
Al insertar la notacion del error, que conlleva el alejamiento de cada dato, se tiene: 
y = mx + c + ε  
El error puede expresarse entonces, como: 
ε = y − mx − c  
 
De esta forma, puede deducirse una expresión para un “mejor ajuste”, que se logrará 
cuando la suma del valor absoluto del error sea mínima. 
  
n n
∑ εi = ∑ (y − mx − c)  
i=1 i=1
Donde ‘n’ es el numero total de puntos. 
 
estadísticos ​
En base al análisis anteriormente expuesto, y haciendo uso de criterios ​ se 
puede obtener: 
ε2(c, m)  =  ∑ ( yi − mxi − c)2  
mínimos cuadrados​
La cual es la expresión del método de  ​ . 

 
Se tiene que: 
 
SxxSy−SxSy
c = NS xx−SxSx
   
 
NS −S S
m = NSxyxx−SxxSyx  
 
Determinamos ‘R’, el cual es muy importante en materia estadistica pues indica la 
representacion o inclusion optima de la mayoria de datos. 
 
N
NS xy − S x S y
r= con    Syy = ∑ yi2  
  ​
√NS yy − S y S y√NS xx − S x S x  i=1
  
Donde N=n (numero de incidencias o puntos del experimento) 
 
 Lo que se lograra con esto, es que si bien la recta no puede pasar por todos los puntos, 
el alejamiento o la distancia entre los mismos y la recta será mínimo, de esta forma se 
obtiene una línea óptima. 
 
Nota: no se incluye la cuantificacion del error (desviacin de m y c) 
 
Regresión polinomial 
Basicamente consiste en ajustar polinomios a los datos de trabajo. Se construye en base 
al metodo de minimos cuadrados, que puede extender su ajuste facilmente a polinomios 
de grado superior. 
 
De esta forma, un polinomio del tipo:  y  =  a 0  +  a1x  +  a2 x2  +  ε  
 
Sr  = ∑ (yi −  a0 −  a1xi  −  a2 x  2 )2  
i
 
Con esto, al diferencer la ecuacion respecto a cada uno de los coeficientes se tiene: 
 
Que forman un conjunto de relaciones lineales que pueden ser solucianadas, para asi 
solve ​
determinar el valor de  a0,  a1,  a2 mediante ​ simultaneo ​
o ​ (como el visto en el ejemplo 
de balance en un reactor). Se deduce que por lo tanto, que para un polinomio de grado ‘n’ 
se tendra un numero de ecuaciones  n + 1  que podra ser solucionado. 
 
Es interesante notar, que este tipo de analisis tiene una implicacion importante: cuando 
nosotros derivamos parcialmente a la funcion respecto a los coeficientes, estamos 
haciendo un cambio de variables, donde la nuevas variables seran los coeficientes de la 
expresion, y, que al derivar reducimos su grado a  n − 1  que para una ecuacion cuadratica 
equivaldria a hacer rectas tangentes a la curva, y asi sucesivamente. 
 
 
Linealizacion para la regresion exponencial 
Como se ha mencionado, los metodos numericos tienen su fundamento en el analisis 
combinado de algebra, geometria analitica y algunas veces el calculo. Tal es el caso 
presente, donde aplicamos una regla algebraica simple. supongamos una relacion 
exponencial del tipo: 
y = aecx  
El analisis algebraico indica que aplicando Log a ambos lados (base ​ e​
) tendremos: 
 
Loge(y) = cx + Loge(a)  
 
Obteniendo asi una recta con una 
pendiente ‘c’ y con un intercepto 
Log(a) 
 
Nota:​  Este tipo de analisis, puede 
ser aplicado a otras funciones no 
lineales. Pueden consultarse otro 
tipo de relaciones exponenciales en 
un libro de texto de matematicas. 
para aplicar este tipo de arreglo a los 
datos, se pueden plotear, y luego, 
con diferentes modelos de  tratar de 
acoplar el array a la forma lineal, y 
aplicar minimos cuadrados. 
 
Interpolación 
De manera simple, la interpolación permite predecir oprecisar la localización de un punto 
no conocido comprendido entre el rango de valores experimentales conocidos, aunque 
tambien en ingeniería es frecuente disponer de un cierto número de puntos obtenidos por 
muestreo y pretender construir una función que los ajuste.En la interpolación, a diferencia 
de la regresión, la función pasa por todos los puntos. 
 
Interpolaciones 
Interpolación lineal 
Es un caso particular del metodo de interpolacion general de Newton. Se expresa asi: 

 
Donde a y b, equivalen a puntos cuales quiera de la linea. Por conveccion se usa b>a 
 
Notese que la regresion anterior solo logra unir con lineas rectas dos puntos. La 
aproximacion resulta mas preceisa cuando el intervalo entre los datos es pequeño, o lo 
que es lo mismo, pertenece a un diferencial de segmento, una cantidad infinitesimal. 
 

 
 
polinomios de interpolación de Newton 
En la formula general de interpolación de Newton, se considera que para evaluar un 
polinomio de ‘n’ grados se requieren  n + 1 puntos.La forma general será: 
f n(x) = b0 + b1(x − x0) + ... + bn(x − x0)(x − x1)...(x − xn−1)  
donde: 
b0 = f (x0)  
b1 = f [x1, x0]  
b2 = f [x2, x1, x0] … 
bn = f [xn, xn−1, ...,  x1, x0]  
Donde, las evaluaciones entre corchete significa diferencias divididas finitas: 
f(xi)−f(xj) 
f [xi, xj] = xi−xj  
f[x ,x ]−f[x ,x ]
f [xi, xj, xk] = i xj −x j k  
i k
El analisis del siguiente recuadro nos dara una idea mas clara al respecto: 

 
Nota: el estudio de error presente en este método excede los alcances de este curso. se 
recomienda referenciarse un poco al respecto. 
 
Polinomios de interpolación de Lagrange 
Es una mejora al método de interpolación de Newton, se representa como: 
n
f n(x) = ∑ Li(x)f(xi)  
i=0
Donde: 
n x−x
Li(x) = Π j=0, j ≠i ( x j )     
i−xj

Al ser expandido se tiene: 

 
donde el signo pi, denota el producto de las fracciones. Para el caso de n=1 tendriamos 

 
Y asi sucesivamente para polinomios de mayor grado. 
 
Regresiones en Matlab/Octave 
p = polyfit (x, y, n) 
polifyt es una mezcla del análisis de regresión e interpolación, pues si bien cubre la 
mayoria de puntos, su algoritmo identifica aquellos valores atipicos o demasiado alejados 
para ser ignorados dentro de la interpolación. Pruebe el algortimo siguiente: 
 
 
x = [1 3 6 10 20]; 
y = [2.5 7.5 15.5 24 45]; 
p = polyfit(x, y, 1); %el tercer argumento indica el grado del polinomio 
Observaremos la impresion en pantalla de un vector con dos elementos, que 
corresponden a los parametros que polyfit() retorna. Parar un formato de salida más claro, 
hacemos: 
 
polyout(p, "x"); 
%el comando polyval lee un vector y construye una funcion a partir de él 
plot(x, y, "*", x, polyval(p, x), "­"); 
xlabel("x"); 
ylabel("y"); 
legend("puntos", "ajuste") 
text(0.5,45,polyout(p, "x"))  %uso: text (x,y,mensaje) 
grid() 
 
 
 
NOTA: pruebe el comando con las opciones de 2do y 3er grado. puede obtener la 
desviacion usando: 
desviacion = sqrt(mean((y ­ polyval(p, x)).^2)) 

 
 
leasqr() 
El uso del comando, es como sigue:  
[f, p, cvg, iter] = leasqr(x, y, pin, F​

 
Donde: 
x​ : vector o matriz de variables independientes 
y​ : vector o matriz de variables dependientes 
pin​ : vector de parametros iniciales para ser ajustado con leasqr() 
F​ : Funcion a tratar 
f​: set de y ajustados. f = F(x,p) 
p​ : vector con parametros finales de la solucion 
cvg​ : escalar=1 si hay convergencia, 0 de cualquier otra forma 
iter​ : numero de iteraciones usadas 
 
Aclaracion​ : para aquellos comandos que devuelven un vector F(x), el proceso para 
obtener una función es bastante simple: primero conseguimos hacer una regresión a la 
disperción de datos a través del vector que estos devuelven. luego podemos usar el 
comando polyfit(), para obtener una ecuación. El uso de dicho comando se mencionará 
adelante. 
 
 
Ejemplo: 
%creamos un set de datos x 
x=linspace(0, 5); 
%creamos un set de ‘y’ al azar a partir de x y visualizamos 
y = 1./(1 + 1.2*x.^1.8) + randn(1,100)*0.03; 
plot(x,y,"g o") 
%creamos una funcion llamada ‘ffun’ dada la tendencia de la funcion 
function y = ffun(x, p) 
y = 1./(1+p(1)*x.^p(2)); 
endfunction 
 
p = [0.5 0.0]; 
[yfit pfit cvg iter] = leasqr(x, y, p, "ffun"); 
cvg, iter 
pfit  
plot(x,y,"o",x,yfit,"r") 
 
Interpolaciones en Matlab/Octave 
spline() 
Ejemplo aplicado spline() 
x = 0:10; 
y = sin(x); 
xx = 0:.25:10; 
yy = spline(x,y,xx); 
plot(x,y,"o",xx,yy) 
Sin embargo, el uso de spline, puede presentar tambien ciertos inconvenientes para 
cuando el set de datos es significativamente mas grande: 
 
x =10*pi^2* rand(1,25); 
y = sin(x) ­rand(1,25)+rand(1,25); 
xx = 0:.25:80; 
yy = spline(x,y,xx); 
plot(x,y,"o",xx,yy) 
 
Puede observarse que la curva llega hasta los valores definidos para xx, y que toma todos 
y cada uno de los puntos de la dispersion.  
 
yi =​
 interp1 ​
(x, y, xi,”tipo”) 
Es un método bastante práctico, ya que el algoritmo de la función interp1 nos permite 
especificar el tipo de interpolación deseada (linear, cuadrática, cúbica, etc). Para resumir 
su uso crearemos un set de datos: 
xp = [0:10]; 
yp = sin (2*pi*xp/5); 
Procedemos a construit un nuevo par de vectores, esto debido a que ademas de valores 
de “xp”, precisamos de un nuevo vector “xf” con la mayor cantidad de puntos posibles, en 
el rango de las “xp” dadas. Para conocer el rango de x podemos usar range(): 
xf = [0:0.05:range(xp)]; 
yf = sin (2*pi*xf/5); 
 
Supongamos una interpolación lineal 
lin = interp1 (xp, yp, xf); 
 
para una función del tipo cúbica 
cub = interp1 (xp, yp, xf, "cubic"); 
 
Para una interpolación polinomial 
pln = interp1 (xp, yp, xf, "spline"); 
 
Al plotear en conjunto: 
plot (xf, yf, "r", xf, lin, "g", xf, pln, "b", xf, cub, "c", xp, yp, "r*"); 
grid() 
legend ("original", "linear", "polinomial", "cubica"); 
 
Como hemos podido obserbar, entodos los casos interp1() lo que nos devuelve es de 
hecho un vector “y” en base a la relación que hemos ordenado al comando. es decir: el 
interprete diseña una fórmula general y forza a los datos a “entrar” a esa ecuación.   
 
NOTA: “x” debe de estar igualmente espaciada. 
 
Sii deseamos conocer la ecuación que genera la curva de datos, debemos a recurrir a 
polyfit(), y obtener así la ecuación mediante el uso combinado de comandos. 
 
Preguntas: 

­¿Qué hacer si deseamos una regresion de un set de datos que evidencia una tendencia 

exponencial? 

­¿Cuál es el problema que representa el uso de spline cuando hay dispersión de datos? 

Ejemplo aplicado: torre de secado 
La figura de introducción a este capítulo muestra un proceso de secado, donde se grafica 
masa total vs tiempo. Los datos de masa (m) en kg y tiempo (t) en horas, son 
respectivamente: 
m=[40,32.9,25.8,18.7,16.4,14.3,13.4,13,13] 
t=[0,0.2,.4,.6,.7,.9,1.1,1.3,1.4] 
 
Suponga que, a fin de poder analizar estos datos, se requiere una función que describa el 
proceso de masa evaporada, respecto al tiempo. Encuentre por tanto una expresión que 
nos permita describir cuanta masa se habrá evaporado luego de 0.3 y 1.1 horas.  
 
sugerencia: Debido al comportamiento de la gráfica podría ser útil seccionarla y obtener 
dos expresiones que describan las dos regiones. 
 
Ejemplo demostrativo: interpolación de datos termodinámicos 
 
Un problema usual en la lectura de tablas de vapor es la dificultad para leer datos cercanos al 
punto crítico. Esto también sucede en  algoritmos de datos termodinámicos programados en 
calculadoras portátiles las cuales son dispositivos menos potentes que una computadora, por 
tanto, como un truco de programación, se recurre a usar menos puntos o menos datos 
termodinámicos que los que se usarían en una Computadora Personal; a fin de no saturar la 
memoria volátil del dispositivo portátil. A continuación se demuestra en base a la interpolación, 
porque pueden presentarse esta serie de dificultades en los puntos cercanos al punto crítico. 
 
Supongamos primeramente que el diagrama PV de una sustancia (la sustancia ‘x’) está 
representado mediante la ecuación  V = P Cos(P )  para una presión que va desde los 5 a 8 MPa. 
 
Generamos un set de datos con 100 elementos y los ploteamos 
x=linspace(5,8,100); 
y=x.^cos(x); 
plot(x,y,'b') 
hold('on') 
title('diagrama PV') 
xlabel('P') 
ylabel('V') 
 
Ahora suponga que, deseamos programar dichos datos en una calculadora portátil, para tales 
efectos asumimos que desconocemos la relación V=f(P) con la cual hemos modelado los datos; y 
en su lugar tenemos un set de 100 datos de V y P respectivamente.  
 
Para poder representar el comportamiento extraemos un nuevo vector en base a los conocidos: 
 
a=x(1:10:100); 
b=y(1:10:100); 
 
Ploteamos los datos que recopilamos de los vectores originales, sobre el gráfico original 
plot(a,b,'­r o') 
grid('on') 
legend('datos originales','interpolacion lineal') 
 
Observe la región superior del domo: 
­¿Cómo explicaría esto la problemática de leer datos de tablas de vapor cercanos al punto crítico? 

 
 
Haga scroll sobre el área crítica y observe la “región de incertidumbre”.  
­¿Qué sugeriría para minimizar este error?  
 
referencias y recursos 
 
http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/numerico/datos/interpolacion.h
tml 
 
http://www.unioviedo.es/compnum/laboratorios_web/laborat05_Interpol_y_aprox/laborat05
_Interpolacion.html 
 
http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/numerico/datos/datos.html 
 
https://www.scribd.com/doc/106671667/Linealizacion­de­Funciones­No­Lineales 
 
http://sysplay.in/blog/tag/polynomial­curve­fitting/ 
 
http://www.krizka.net/2010/11/01/non­linear­fitting­using­gnuoctave­and­leasqr/ 
 
http://www.mathworks.com/help/matlab/ref/spline.html 
 
https://www.packtpub.com/books/content/gnu­octave­data­analysis­examples 
 
http://octave.sourceforge.net/octave/function/splinefit.html 
 
http://www.uv.es/ceaces/base/regresion/exponenci.htm 

S-ar putea să vă placă și