Find "intersection" of data array

Hello everybody,
I would like to find the "intersections" of different data arrays. The arrays look similar this:
x=[0 1.2 2.5 3.4 4.6 5.4 6.8 7.3 8.6 9.8 7.1 8.5 9.9 10.1 11.4]
y=[100 90 80 70 65 60 55 50 45 40 40 42 44 52 62]
I would like to cut off the part under the intersection and redefine the data set. So it would be enough to find the two connection points (in this example (8.6;45) and (9.9;44)). Any ideas, how to do this? I have ran out of ideas and really need new ideas/inspiration from you guys!
Cheers, Christian

6 comentarios

Not sure what you mean. I don't see how there is any intersection going on at 8.6 and 9.9.
x=[0 1.2 2.5 3.4 4.6 5.4 6.8 7.3 8.6 9.8 7.1 8.5 9.9 10.1 11.4]
y=[100 90 80 70 65 60 55 50 45 40 40 42 44 52 62]
plot(x, y, 'bo-', 'LineWidth', 3)
grid on;
xticks(0:0.5:12)
hold on;
for k = 1 : length(x)
str = sprintf(' %d', k);
text(x(k), y(k), str, 'FontSize', 25, 'FontWeight', 'bold', 'Color', 'r');
end
xlabel('X', 'FontSize', 25);
ylabel('Y', 'FontSize', 25);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0, 0.04, 1, 0.96]);
What does "cut off the part under the intersection" really mean? In the plot above, which points do you want to delete or do something else with???
Christian
Christian el 3 de Sept. de 2018
Hello Image Analyst, sorry for my imprecise question. I would like to delete points 10, 11 and 12 so that there would be a line between 9 and 13. So the data set would look like this:
x_new=[0 1.2 2.5 3.4 4.6 5.4 6.8 7.3 8.6 9.9 10.1 11.4]
y_new=[100 90 80 70 65 60 55 50 45 44 52 62]
I have to do this for a lot of different arrays which all look pretty similar to the given example. Therefore I would like to write a piece of code which does that automatically so that I don't have to look for (e.g.) Points 9 and 13 manually in the plot every time. Thank you for your effort, Cheers Christian!
Selby
Selby el 3 de Sept. de 2018
you could possibly write a script that removes any points with a lesser x value than the last. However that would mean that you would have 9->10->13
Christian
Christian el 4 de Sept. de 2018
@Selby,
That's what I already did. But as you have mentioned, it's not 100% the solution I'm looking for.
It's pretty weird, because you can find intersections of functions since middle school, but I'm really struggeling right now, to do something similar on a data-sets.
What would be the expected result for a case such as
9
13
10
11 12
where the data "doubles back" but does not intersect itself?
Christian
Christian el 4 de Sept. de 2018
@Walter Roberson
all of my data-sets intersect, so I won't face a case as you have described. But thanks to "Stephen Cobeldick" I found a perfect solution for my Problem -> check the answer below!

Iniciar sesión para comentar.

 Respuesta aceptada

Stephen23
Stephen23 el 4 de Sept. de 2018
Editada: Stephen23 el 4 de Sept. de 2018
Download and use selfintersect:
I tried it on your example values:
>> x = [0,1.2,2.5,3.4,4.6,5.4,6.8,7.3,8.6,9.8,7.1,8.5,9.9,10.1,11.4];
>> y = [100,90,80,70,65,60,55,50,45,40,40,42,44,52,62];
>> [~,~,s] = selfintersect(x,y)
s =
9 12
>> xnew = x([1:s(1),1+s(2):end])
xnew =
0.00000 1.20000 2.50000 3.40000 4.60000 5.40000 6.80000 7.30000 8.60000 9.90000 10.10000 11.40000
>> ynew = y([1:s(1),1+s(2):end])
ynew =
100 90 80 70 65 60 55 50 45 44 52 62
>> plot(x,y,'-*',xnew,ynew,'-*')
If you have multiple intersects you will have to use a loop (or some alternative) to process each row of the output matrix s.

3 comentarios

Christian
Christian el 4 de Sept. de 2018
This function is absolutely perfect! It does exactely what I was looking for! Thank you Stephen :)
Stephen23
Stephen23 el 4 de Sept. de 2018
@Christian: I hope that it helps. If you find selfintersects useful, then please also go and give it a rating at the page where you downloaded it from. I am sure that its author will appreciate that.
Christian
Christian el 5 de Sept. de 2018
Done! :)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 3 de Sept. de 2018

Comentada:

el 5 de Sept. de 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by