Matlab - encontrar cambio de signo

 
Vista:

encontrar cambio de signo

Publicado por paz (15 intervenciones) el 16/04/2007 19:13:53
Tengo una serie de datos, con valores positivos y negativos, necesito encontrar los cambios de signo, es decir, el elemento en el que pasa de + a - y viceversa.

podeis ayudarme? gracias
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

RE:encontrar cambio de signo

Publicado por Juan Carlos (22 intervenciones) el 16/04/2007 22:48:01
Una posible solucion es:

Imagina nuestro vector:
a=[1 4 -1 2 -2 -2 1 1 4 6 3 -6 4 -2];

definimos los siguientes vectores como:

b=zeros(size(a));
b(1:end-1)=a(2:end);

ss=[0 sign(a)-sign(b)];

Y simplemente haciendo:

salida = logical(ss(1:end-1));

tenemos la solucion que sería:

entrada = 1 4 -1 2 -2 -2 1 1 4 6 3 -6 4 -2
salida = 0 0 1 1 1 0 1 0 0 0 0 1 1 1

Si te das cuenta se puede hacer en una linea:

salida = logical ( [0 sign (a (1 : end - 1) ) - sign (a (2 : end ) ) ] );

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
0
Comentar

RE:encontrar cambio de signo

Publicado por paz (15 intervenciones) el 17/04/2007 22:38:05
Gracias por tu respuesta Juan Carlos. Al final estuve comiendome la cabeza, y lo hice así:

% zpd es una matriz columna con los datos%
% la matriz a será aquella que incluya los elementos de cambio de signo de + a -%
%la matriz b será aquella que incluya los elementos de cambio de signo de - a +%

a=[];
b=[];
ta=0;
tb=0;

for i=2:length(zpd)
if zpd(i-1)>0&zpd(i)<0
ta=ta+1;
a(ta,1)=i-1;
a(ta,2)=i;
else if zpd(i-1)<0 & zpd(i)>0
tb=tb+1;
b(tb,1)=i-1;
b(tb,2)=i;
else
end
end
end
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

RE:encontrar cambio de signo

Publicado por Juan Carlos (22 intervenciones) el 18/04/2007 12:41:00
Nada, para eso estamos.
Un consejo: evita usar "for" siempre que puedas porque es muy lento. Recuerda que Matlab es un lenguaje pensado para trabajar con matrices así que aprovecha esa ventaja.
Además tienes un else vacio que no hace falta que lo pongas.
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
0
Comentar