3

To extend this Q&A beyond one that is "easily found in the documentation," where some basic facts about "ParametricCaching" are given, I'll add some undocumented suboptions to Method -> {"ParametricCaching" -> {Automatic, ...opts...}}: sol = ParametricNDSolveValue[{x''[t] + a x[t] == 0, x[0] == b, x'[0] == 0}, x, {...


1

Here's one approach that seems to work reasonably well: cleaned = DeleteDuplicates@SortBy[First]@pts; curves = {}; (pt \[Function] Module[ {best}, best = MinimalBy[#[[2]] &]@MapIndexed[{#2[[1]], VectorAngle[(#[[-1]] - pt), Subtract @@ #[[-2 ;;]]], EuclideanDistance[pt, #[[-1]]]} &]@curves; If[best === {} || best[[1, 3]] > 1, ...


1

Edit: Just noticed @Rom38 essentially mentioned the same approach in the comments above, credit goes to them. This can be solved as two separate questions: namely separating the points into 'curves' and then down-sampling a list of points. For the first question, I use FindShortestTour to find a single continuous curve, and then split it up according to ...


1

Here is a way to downsample based on the distance between points. I use Manipulate to adjust the threshold that reduces the number of points. As the $x$ and $y$ axes are on different scales it is probably better to scale before taking euclidean distances, as is done in the second example. SeedRandom[0]; data = Flatten[{Table[{x, Sin[x^2/15]}, {x, 0, 20, 0.01}...


1

A bit late in the game, If you want a more 'purist' approach, you could also use HistogramList to extract the points and then fit using an arbitrary function. SampleData = RandomVariate[RayleighDistribution[3], 5000]; binSize = #[[1, 2]] - #[[1, 1]] &@HistogramList[SampleData]; SampleDataP = {#[[1, 2 ;;]] - 0.5 binSize, #[[2]]}\[Transpose] &@ ...


Only top voted, non community-wiki answers of a minimum length are eligible