Matlab - Duda con un código

 
Vista:
sin imagen de perfil

Duda con un código

Publicado por lele (6 intervenciones) el 06/06/2016 21:12:22
Hola a todos,
estoy haciendo un código que consiste en un bucle for y un bucle if anidado,
Lo que quiero conseguir es hacer un filtrado de una variable, de forma que comparo cada valor de la variable con el valor anterior de la serie para eliminar aquellos valores que tengan una variación mayor del 20% con
respecto al anterior, es decir que si es menos del 0.8 del valor anterior o mayor de 1.2 se eliminará. Lo que he hecho es convertir en cero esos valores y luego buscar, con la función find los valores distintos de cero.

1
2
3
4
5
6
7
i=1; %defino el intervalo
for i=2:length(a);
    if (a(i)<0.8*a(i-1) && a(i)>1.2*a(i-1));
        a(i)=0;
    end
end
b=find(a~=0); %busco los valores distintos de cero

Tiene que tener algún fallo que no localizo porque no me hace lo que quiero, me almacena los valores del contador y no me elimina ningún valor
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
sin imagen de perfil

Duda con un código

Publicado por crs (13 intervenciones) el 07/06/2016 09:11:19
Hola,

Creo que el problema es que en el if exiges que se cumplan las dos condiciones a la vez. Prueba cambiando el and (&&) por or (||) para que entre si se cumple una u otra condición.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Duda con un código

Publicado por lele (6 intervenciones) el 07/06/2016 14:50:23
Hola, tienes razón, usé mal el operador lógico pero al cambiarlo por la sentencia or que me comentas sigue sin funcionar, me almacena una vector de datos que debe ser el contador porque son número consecutivos que no se corresponden con los valores esperados, la verdad es que por mas que lo miro no se qué ocurre
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

Duda con un código

Publicado por crs (13 intervenciones) el 07/06/2016 15:53:05
Imagino que lo que te devuelve son los índices de las posiciones de a en las que es distinto de cero. Prueba a cambiar la última línea por lo siguiente:

1
b = a(a~=0);

Espero que esto te solucione el problema.

Un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Duda con un código

Publicado por lele (6 intervenciones) el 07/06/2016 18:32:21
Ahora si, muchísimas gracias
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