Matlab - Encontrar ceros de una función

 
Vista:

Encontrar ceros de una función

Publicado por María (6 intervenciones) el 28/02/2018 18:48:14
Buenas!
Tengo un problema a la hora de encontrar los ceros de una función en matlab. Tengo la señal discreta en un archivo .mat y con ello genero una variable de tipo double (pe "datos" de 2000x1 double).
Mi idea es encontrar el cruce con el eje mirando el cambio de signo entre puntos contiguos de la señal, y guardar en una variable la posición de este valor en la variable "datos" algo como:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ceros=0;
for i=1:2000
    if datos(i)*datos(i+1)==0
        if datos(i)==0
            ceros=ceros+datos(i);
        else
            ceros=ceros+datos(i+1);
        end
    elseif datos(i)*datos(i+1)<0
        if abs(datos(i))<abs(datos(i+1))
            ceros=ceros+datos(i);
        else
            ceros=ceros+datos(i+1);
        end
    end
end

El problema está con el recorrido de la variable datos, que "no acepta" el término "i" e "i+1", ya que al ejecutar el código me devuelve este error:
"Index exceeds matrix dimensions." en relación con la variable "datos".

Alguna idea de cómo solucionar esto?

Muchas 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

Encontrar ceros de una función

Publicado por Maria (6 intervenciones) el 28/02/2018 20:06:54
Muchas gracias!!
Lo he cambiado y me ha inspirado para otros cambios jaja
De hecho he conseguido obtener las posiciones de los cruces por cero con exactitud. Adjunto el código por si a alguien le pueda servir de ayuda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ceros=[];
for i=1:(length(flujo3)-1)
    if (flujo3(i)*flujo3(i+1))==0
		if flujo3(i)==0
		    ceros=[ceros;i];
		else
		    ceros=[ceros;i+1];
		end
		elseif (flujo3(i)*flujo3(i+1))<0
		    if abs(flujo3(i))<abs(flujo3(i+1))
			    ceros=[ceros;i];
		else
		    ceros=[ceros;i+1];
		end
	end
end

Gracias de nuevo por la ayuda!
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