Find intersection of two guassian curves

1 visualizzazione (ultimi 30 giorni)
Trisha Kibaya
Trisha Kibaya il 11 Set 2018
Modificato: jonas il 12 Set 2018
Hi all these are my two curves:
y1 = p(1)*pdf(n1,xgrid); hold on; plot (xgrid, y1,'b'); % hold off
y2 = p(2)*pdf(n2,xgrid); hold on; plot (xgrid, y2,'r'); % hold off
I need to find the exact x coordinates where this two lines meet.
I tried using:
index_intersection = find(y1 == y2);
but it gives me index_intersection =
1×0 empty double row vector
I also tried:
idx = find (y1 - y2 < eps, 1);
but still didn't get the right coordinates.
Please, is there another alternative? I read online that I could use fzero, but I haven't understood how to use the syntax. Thanks in advance.
  3 Commenti
jonas
jonas il 11 Set 2018
Check out InterX on FEX
Trisha Kibaya
Trisha Kibaya il 11 Set 2018
numComponents=2;
paramEsts = fitgmdist(data(:),numComponents);
p = paramEsts.ComponentProportion;
and p has two values.
p =
0.3915 0.6085

Accedi per commentare.

Risposta accettata

jonas
jonas il 11 Set 2018
Modificato: jonas il 11 Set 2018
If you have only one intersection, then you can just find the minimum difference
[~,idx] = min(abs(y1 - y2))
This will however always output a value even when there is no intersection. Also, the accuracy depends on the resolution of your x-vector, where higher resolution yields better accuracy (this is true for most methods). I always recommend InterX from FEX for finding intersections. It interpolates your data per default for high accuracy.
  2 Commenti
Trisha Kibaya
Trisha Kibaya il 12 Set 2018
Please, pardon my ignorance but is FEX another MathWorks product? Cause i don't have that
jonas
jonas il 12 Set 2018
Modificato: jonas il 12 Set 2018
Sorry, FEX is short for fileexchange where you can find open source user-submitted functions. Follows the link in my answer, download and put it in your matlab search path

Accedi per commentare.

Più risposte (1)

KSSV
KSSV il 11 Set 2018
Modificato: KSSV il 11 Set 2018
tol = 10^-3 ; % Change this if required
idx = abs(y1-y2)<=tol ;
  3 Commenti
KSSV
KSSV il 11 Set 2018
To compare two flottant numbers it is suggested to subtract check for inequality with tolerance, rather then using ==.

Accedi per commentare.

Categorie

Scopri di più su Programming in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by