I have a set of data points that correspond to roots of a transcendental equation with respect to a parameter (the abscissa) which, by the properties of the system, define continuous curves (might be open or closed). There are many roots and some are very close from one another. Here is the actual data set.

A ListPlot shows the data set and some of the branches can be seen: Roots of transcendental equation

In order to extract some of the branches, I've used FindCurvePath to my dataSet in the following way:

tmpIdx = Sort[FindCurvePath[dataSet], Length[#1] > Length[#2] &];
ordCrv = Table[dataSet[[tmpIdx[[j]]]], {j, Length@tmpIdx}];

which is, at some measurement, very unsuccessful: Data after FindCurvePath

Sorting tmpIdx has the purpose to put the largest sets of data at the front of it; then I can construct some of the curves FindCuvePath is able to find, eliminate those points from dataSet and try again. Of course this works, but it is a lot of hard, manual work and very time consuming, which I wouldn't mind if this were the only data set I had to process.

To help FindCurvePath, I've been applying it not only to dataSet, but also to {f[#1], g[#2]} &@@@ dataSet, where f and g are top of my head chosen (continuous) functions. Again, this works to some extent. The obvious problem is that it involves a lot of manual processing and is not only specific to the data set, but also to the branch in question.

I know there is no universal solution, and at some point manual intervention will be in order, but I was wondering if someone knows or has a better strategy to attack the problem.

Hope I made myself clear. Any comments or suggestions are very welcome.


With some lack of judgement, I've just realized that I excluded some data from my analysis, which can be very useful to do the job. What I have is not a 2d list, but a 3d list. Here it can be found.

One can clearly see the separation between curves enter image description here

enter image description here

Sorry for the omission, it's something I just realized.


Maybe there is some way to relax the conditions on FindCurvePath so it looks for a piecewise linear curve? By taking a closer look to the smaller curves constructed by the function, it seems that its very unsuccessful whenever there are "return" points. I wish the function documentation were more complete.

  • 1
    $\begingroup$ Related: (29294), (29464) $\endgroup$
    – Mr.Wizard
    Apr 20, 2014 at 1:08
  • 6
    $\begingroup$ This is one of those questions that's only hard to answer because there seems to be no documentation available about how FindCurvePath actually works. Can anyone give some idea of what the underlying algorithm is? The documentation is incredibly unhelpful. $\endgroup$
    – user484
    Apr 23, 2014 at 2:30


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.