Matlab - Hallar los puntos de cruce de una gráfica (interpolación)

 
Vista:
sin imagen de perfil

Hallar los puntos de cruce de una gráfica (interpolación)

Publicado por Luis (3 intervenciones) el 27/01/2015 18:04:29
Buenos días, espero que alguien me pueda ayudar con esta pregunta.

Lo que quiero hacer es, teniendo una gráfica cualquiera (X vs Y), y para un valor constante de Y, encontrar los valores de cruce con el eje X, espero que se entienda mejor con la imagen:


ejemplo

Es decir, en la figura tenemos un valor del eje Y de aproximadamente 4.7, lo que quiero encontrar es los valores correspondientes en el eje X que cruzan con esa linea (que serían aproximadamente, 0.9, 1.05 y 1.7).

Lo que hice fue ajustarle un polinomio a la gráfica de color verde, y luego resolver la ecuacion para el valor de Y requerido, sin embargo, logro obtener valores aproximados ya que el ajuste no es 100 por ciento exacto en gráficas tan irregulares. Me gustaría saber si alguno de ustedes conoce una mejor manera de hacerlo.

Muchas gracias.

Saludos
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

Hallar los puntos de cruce de una gráfica (interpolación)

Publicado por Daniel (264 intervenciones) el 27/01/2015 22:04:11
acá te pongo un ejemplo que hice para una función de puntos x e y.
Este código encuentra el cruce entre y(x) y la constante y0.
Las primeras tres lineas son las definiciones de x,y e y0

La cuarta linea "crea una función" que vale 1 si y es mayor o igual a y0 y vale 0 en caso contrario
La quinta linea busca los puntos en que la función cambia de signo
La sexta linea hace una interpolación lineal pesada para determinar el o los ceros
Las siguiente lineas son la representación gráfica de todo esto
1
2
3
4
5
6
7
8
9
10
11
x=linspace(-2.8,8,300);
y=.002*x.^5-x.^2+10;
y0=6;
ym=(y-y0)>=0;
dy=find(abs(diff(ym))==1);
ceros=(x(dy).*(y(dy+1)-y0)-x(dy+1).*(y(dy)-y0))./(y(dy+1)-y(dy));
 
plot(x,y,'b'),hold on
plot(x,y0*ones(size(x)),'r'),hold on
plot(ones(2,1)*ceros,y0+[-1,1]'*ones(1,size(ceros,2)),'k'),hold on
set(gca,'xtick',ceros)

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

Hallar los puntos de cruce de una gráfica (interpolación)

Publicado por Luis (3 intervenciones) el 27/01/2015 23:08:08
Muchas gracias por tu respuesta Daniel, sin embargo, se me paso comentar que mi gráfica esta compuesta solo por 17 puntos, por lo tanto tu solución no me serviría ya que en la mayoría de los casos no hay un punto que corresponda a un valor de Y dado, en realidad tengo que interpolar.
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