Matlab - Cuando la curva de tendencia no es una función

 
Vista:
sin imagen de perfil
Val: 13
Ha disminuido su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Cuando la curva de tendencia no es una función

Publicado por Héctor (9 intervenciones) el 02/11/2016 17:32:18
Buen día,

Tengo una duda con las curvas de tendencia en Matlab. El caso es que tengo una serie de datos estadísticos que al graficarlos tienen la siguiente forma
untitled

Quiero suavizar mas esta curva, para que se note mejor el rizo que se forma. Pero no encuentro una manera para hacer esto.

Saludos y gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Cuando la curva de tendencia no es una función

Publicado por Daniel (264 intervenciones) el 02/11/2016 23:18:34
Tenes dos vectores x0 e y0 ( de la misma dimension) y estas representando y0 vs x0

La idea general para hacer esto es la siguiente:

Lo que decís de que no es una función mas correctamente podemos indicarlo como que existe una variable mas (que podríamos llamar el tiempo) que liga cronológicamente los valores sucesivos de x0 (idem para y0).

Desde el punto de vista funcional en realidad estas teniendo una vista de una curva en tres dimensiones (x,y,t)

las funciones individuales x(t) e y(t) siempre son 'suavizables' porque el eje temporal es siempre creciente (a direfencia de x (y) o y(x))

Con lo cual lo que puedes hacer es 'suavizar' x(t) e y(t) separadamente y luego representar y_suave vs x_suave


Hay además varias formas de suavizar una serie de puntos. En el código de abajo te represento dos de ellas (Smooth y Spline), además de un promedio de las mismas, ya que a mi entender es la que conserva mejor las formas....


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
clc
clear all
set(0,'defaultlinelinewidth',2);
 
x0=[0 1 2 3 2 4 5 6];
y0=[0 .5 2 1 1 2.5 3 1];
 
t0=linspace(0,1,numel(x0));
 
k=100;
tn=linspace(0,1,k*numel(x0));
 
% Spline
x1=interp1(t0,x0,tn,'spline');
y1=interp1(t0,y0,tn,'spline');
 
% Smooth
x2=smooth(interp1(t0,x0,tn),k)';
y2=smooth(interp1(t0,y0,tn),k)';
 
% Promedio entre Smooth y Spline
x3=(x1+x2)/2;
y3=(y1+y2)/2;
 
subplot(2,2,1),plot(x0,y0,'k')
title('Curva Original')
 
subplot(2,2,2),plot(t0,x0,'k',tn,x1,'r',tn,x2,'b',tn,x3,'g')
legend('Original','1) Spline','2) Smooth','3) Promedio','location','SouthEast')
title('x(t)')
 
subplot(2,2,3),plot(t0,y0,'k',tn,y1,'r',tn,y2,'b',tn,y3,'g')
legend('Original','1) Spline','2) Smooth','3) Promedio','location','SouthEast')
title('y(t)')
 
subplot(2,2,4),plot(x0,y0,'k',x1,y1,'r',x2,y2,'b',x3,y3,'g')
legend('Original','1) Spline','2) Smooth','3) Promedio','location','SouthEast')
title('y(x)')


Comentanos como te fue

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 13
Ha disminuido su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Cuando la curva de tendencia no es una función

Publicado por Héctor (9 intervenciones) el 04/11/2016 18:15:36
¡Muchas gracias!

Era justo lo que necesitaba. Aunque todavía no entiendo muy bien la diferencia entre Smooth y Spline, y cuál usar en qué casos, pero me sirvió de mucho.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar