Matlab - Construir rangos de un vector hasta donde hay NAN`s

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por cristina (9 intervenciones) el 12/02/2019 18:48:43
Hola soy nueva en matlab y no tengo muy claro como hacer el siguiente bucle:
Necesito obtener el área bajo la curva de una serie de datos que tienen NAn´s

Lo primero que hice es identificar donde tengo los NaN´s

1
iax = find(isnan(ax)==1);

Después construir rangos, este sería el primer rango

1
2
3
4
5
6
7
8
9
10
11
12
ax1=ax(1:iax(1));
TIiax1= TI(1:iax(1));
 
lx=ax1;
ti=x(1); % valor incial en el tiempo cero
nx=fix(lx/60480); % Cada cuantos datos obtedré el área bajo la curva 
 
% Calcular el área 
for i = 1:nx
    v(i)= trapz(ax1(1:ti+60480), TIiax1(1:ti+60480));
    ti = ti+60480
end


Pero este proceso solo es para el primer rango de datos ax1
Alguna sugerencia ?
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
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por Cristina (9 intervenciones) el 12/02/2019 19:30:15
ax es aceleración

ti=x(1); % perdón aquí era ax

TI es tiempo

Al obtener la primera integral o área bajo la curva de la aceleración tengo como resultado la velocidad que es mi objetivo final
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
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por Cristina (9 intervenciones) el 12/02/2019 19:34:57
ax = valores de -1 a +1 % cada 10 segundos
TI = datenum(yy,mm,dd,hh,min,seg); % fechas con horas, minutos y segundos
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 12/02/2019 20:12:31
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
clear
ax=[1,2,3 NaN 5,8,12 NaN,17 19,NaN,20 22 26 48]
iax = find(isnan(ax)==1)
TI=sin(ax)
plot(ax,TI)
grid on
 
for k=1:length(iax)
    k
    if k==1
         ax1=ax(1:iax(k)-1)
         TI(1:iax(k)-1)
           v(k)= trapz(ax1, TI(1:iax(k)-1) ) % Calcular el área 
    else
         ax1=ax(iax(k-1)+1:iax(k)-1)
         TI(iax(k-1)+1:iax(k)-1)
          v(k)= trapz(ax1, TI(iax(k-1)+1:iax(k)-1) )% Calcular el área 
    end
end
    k+1
         ax1=ax(iax(k)+1:end)
         TI(iax(k)+1:end)
          v(k+1)= trapz(ax1, TI(iax(k)+1:end))% Calcular el área 
 
          area=sum(v)


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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
>> area_bajo_curva
ax =
     1     2     3   NaN     5     8    12   NaN    17    19   NaN    20    22    26    48
 
iax =
     4     8    11
 
 
TI =
    0.8415    0.9093    0.1411       NaN   -0.9589    0.9894   -0.5366       NaN   -0.9614    0.1499       NaN    0.9129   -0.0089    0.7626   -0.7683
k =
     1
 
 
ax1 =
     1     2     3
 
 
ans =
    0.8415    0.9093    0.1411
 
 
v =
    1.4006
 
 
k =
     2
 
ax1 =
     5     8    12
 
 
ans =
   -0.9589    0.9894   -0.5366
 
 
v =
    1.4006    0.9512
 
k =
     3
 
 
ax1 =
    17    19
 
 
ans =
 
   -0.9614    0.1499
 
 
v =
 
    1.4006    0.9512   -0.8115
 
ans =
     4
 
 
ax1 =
    20    22    26    48
 
ans =
    0.9129   -0.0089    0.7626   -0.7683
 
 
v =
    1.4006    0.9512   -0.8115    2.3488
 
 
area =
    3.8891
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: 17
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por cristina (9 intervenciones) el 12/02/2019 20:58:30
Muchas Gracias !!
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
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por cristina (9 intervenciones) el 13/02/2019 21:50:14
Después de obtener rangos de datos cortados por NAN´s, como puedo hacer para calcular el área bajo la curva varias veces en un mismo rango
Es decir, supongamos que tengo un primer rango de 500 datos separados por el primer NAN (este rango varia de # de datos ), pero a mi me interesa conocer el área bajo la curva cada 200 datos entonces dentro de esos 500 datos obtendría dos datos de áreas bajo la curva.
Esto ya lo pude hacer para el primer rango de datos separados por NAN´s de la siguiente manera

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
ax=[1,2,3 NaN 5,8,12 NaN,17 19,NaN,20 22 26 48.........]
iax = find(isnan(ax)==1)
I=sin(ax)
lx= iax(k)-1; % 121960 Numero total de datos 
ti=ax1(1); % valor inicial en el tiempo cero. Recordar que ax1=ax(1:iax(k)-1)
nt=fix(iax(k)-1)/200; % Cada cuanto quiero obtener la información
 
 for i=1:nt
 
           v(i)= trapz(Iax1(ti:ti+200),ax1(ti:ti+200))
           ti = ti + 200
 
            end
 
%%% Esto intente introducirlo en el código anterior de la siguiente forma
 
for k=1:length(iax)
 
    k
 
    if k==1
 
         ax1=ax(1:iax(k)-1); % 
 
         Iax1= I(1:iax(k)-1);
 
         nt=fix(iax(k)-1)/200;
 
            for i=1:nt
 
           v(i)= trapz(Iax1(ti:ti+200),ax1(ti:ti+200)) % Calcular el área 
           ti = ti + 200
 
            end
 
    else                 %%%%% Pero en esta parte me he perdido 
 
         ax1=ax(iax(k-1)+1:iax(k)-1);
 
         I(iax(k-1)+1:iax(k)-1);
 
          v(k)= trapz(I(iax(k-1)+1:iax(k)-1),ax1 )% Calcular el área 
 
    end
 
end
 
    k+1
 
         ax1=ax(iax(k)+1:end);
 
         I(iax(k)+1:end);
 
          v(k+1)= trapz(I(iax(k)+1:end), ax1)% Calcular el área
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 13/02/2019 22:01:23
Podría subir sus datos que menciona, para tener una idea mas clara de lo que desea hacer. Su pregunta no es clara.
Desea rango de 200 a 200, pero pueda que antes de 200 datos tenga NaN. Entonces habría problema.
Podría subir un ejemplo resuelto en forma analítica sin el uso de matlab con pocos datos para poder entender mejor su pregunta.
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
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por cristina (9 intervenciones) el 13/02/2019 23:00:33
Hola José y gracias por tu pronta respuesta
Espero que con este ejemplo se entienda mejor mi duda

ax = [0.046, 0.105, 0.062,0.14,0.167,0.214,0.202,NaN,0.249,0.179,0.07,0.183,0.175,0.152,0.148,NaN,0.425,-0.011,0.128,0.226,
0.195,0.097,0.078,0.089,0.039,0.07,0.175,0.078,0.023,0.074,0.054,0.074,0.011,0.019,0.031,-0.003,0.07,0.039,0.058,NaN,0.023,
-0.003,0.14,0.042,0.046,0.015,0.109,0.054,0.07,0.257,0.222,0.152,0.093,0.058,0.011,0.062,NaN,0.039,0.031,0.062] % = a 60 datos

I = [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,39,40,41,42,43,44,45,46,47,48,
49,50,51,52,53,54,55,56,57,58,59,60]

iax= find(isnan(ax)==1)

iax = 8 16 40 57 % en total 4 NaN´s y sus respectivas posiciones


% rangos formados a partir de la presencia de un NaN
Primer rango ax[1:7,]
Segundo rango ax[10:15,]
Tercer rango ax[17:39,]
Cuarto rango ax[41:56,]
Quinto rango ax[58:60]

% Quiero obtener área bajo la curva cada 5 datos
Entonces:

Primer rango solo obtendría un valor de área bajo la curva
segundo rango obtendría un solo valor de área bajo la curva
tercer rango obtendría 4 áreas bajo la curva
cuarto rango obtendría 3 áreas
quinto rango sin ni un área

Al final obtendría un vector que almacena 9 datos de áreas bajo la curva en total
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 14/02/2019 00:22:48
que valores debe en el eje 'X' y que valores deben ir en el 'Y'?. ¿ax está en el eje X o el eje Y?
Primer rango ax[1:7,] como aca hay 7 elementos, si deseo 5 datos, ¿que datos debo tomar para hallar el area?
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
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Construir rangos de un vector hasta donde hay NAN`s

Publicado por cristina (9 intervenciones) el 14/02/2019 00:39:55
que valores debe en el eje 'X' y que valores deben ir en el 'Y'?. ¿ax está en el eje X o el eje Y?


ax (aceleración ) deben ir en el eje Y e I (tiempo) en el eje x



Primer rango ax[1:7,] como aca hay 7 elementos, si deseo 5 datos, ¿que datos debo tomar para hallar el area?

Los primeros 5 datos
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