Find Diverging point of two arrays
Afficher commentaires plus anciens
Hi, I want to find the diverging point of two arrays. Please see the figure. In this figure the point may be around 44-48, where the arrays diverges fast. I am not able to do.

1 commentaire
dpb
le 18 Oct 2015
Attach your data file for convenience; could generate some but why make the folks you're asking for help do more work than needed?
I gotta' run, but I think I'd probably start by fitting a trend line to each, remove that trend and compare residuals...
Réponse acceptée
Plus de réponses (3)
You can compute the difference between both lines and find the point of divergence when the difference exceeds some threshold.
threshold = 6; % sample threshold
find(abs(y1 - y2) > threshold, 1, 'first')
5 commentaires
chetan sharma
le 20 Oct 2015
dpb
le 20 Oct 2015
- Have you tried either of the above suggestions?
- Again suggest attaching a sample data file instead of expecting volunteers here to make up data on their own...
chetan sharma
le 24 Oct 2015
Sorry about that but the browser here can't manage to download the link when it's not text (not your fault, it's Firefox). Can you attach a text file, perhaps after trimming its size some but retaining the key features? Apologize for the inconvenience but this seems an issue with how these links are interpreted that can't manage to actually download the file itself but copies it as text instead.
I do think, however, that for a characteristic curve such as you've shown, that finding that knee will be at least a first step in identifying the point of interest. I'll reiterate again, however ( :) ) that you've still not really provided a definition of what the definition of this point is except as some general description of "I'll know it when I see it", but that's not an implementable algorithm; there's needs to be some quantitative criterion/criteria.
ADDENDUM Or, I am contactable via the "Contributors" page; I can't promise when but I'd try to take a look at the data if you were to send it directly. I'd suggest attaching the files to your original question via "EDIT" rather as an Answer to the question you posed as it really isn't...
chetan sharma
le 24 Oct 2015
chetan sharma
le 24 Oct 2015
0 votes
I loaded your data and found that if y is the data of the higher curve, you can find the diverging point using
dp = find([1; diff(y)] < 0, 1, 'last');
The diverging point is determined by the upper curve only, the lower curves are pretty smooth. After diverging, the curve is monotonically increasing. The code finds the last point where the upper curve decreases.
2 commentaires
chetan sharma
le 17 Nov 2015
diff takes the difference of adjacent elements. After diverging of curves, the upper curve is monotonically increasing, that is, diff is always > 0. The last position where diff is negative, i.e., where the curve decreases, is marked as the starting point. The 1; is used to shift this position by one to the right, because the divergence should start at the position of the lower number.
Catégories
En savoir plus sur Interpolation dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!