Could someone please explain me this code?
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Anitha Limann
le 17 Oct 2021
Commenté : Star Strider
le 17 Oct 2021
x = linspace(min([x1,x2],[],2), max([x1,x2],[],2))
y1 = interp1(x1, y1, x, 'pchip','extrap')
y2 = interp1(x2, y2, x, 'pchip','extrap')
index = find(diff(sign(y1-y2)))
for k = 1:numel(index)
indexrange = max(1,index(k)-2) : min(numel(x),index(k)+2);
xi(k) = interp1(y1(indexrange)-y2(indexrange), x(indexrange), 0);
yi(k) = interp1(x(indexrange), y1(indexrange), xi(k));
end
Xc = [xi; yi]
Could you please explain me all the steps of this code?
0 commentaires
Réponse acceptée
Star Strider
le 17 Oct 2021
That looks like something I wrote!
It would be helpful to know the context (I don’t remember where I posted it), however it appears that ‘x1’ and ‘x2’ are vectors spanning different ranges. The ‘x’ assignment produces a vector that spans both ranges, The ‘y1’ and ‘y2’ assignments interpolate and extrapolate the original ‘y1’ and ‘y2’ to the new ‘x’, and the ‘index’ assignment returns the approximate intersection indices of ‘y1’ and ‘y2’. The loop then interpolates first to find the accurate ‘x’ value of the intersection (as ‘xi’), and then uses that value to interpolate the accurate ‘y’ value of the intersection (as ‘yi’). The ‘indexrange’ vector are the indices of both vectors for the interpolation, and is constructed so that the first value is never less than 1 and the last value is never greater than the length of the vector. The ‘Xc’ matrix concatenates them so that ‘xi’ is the first row and ‘yi’ is the second row. This simply makes it easier to view the result of the loop.
I usually comment-document my code, so my apologies if I forgot to in that instance.
.
0 commentaires
Plus de réponses (1)
Voir également
Catégories
En savoir plus sur Multirate Signal Processing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!