Generuję dwa histogramy za pomocą histogram z Matlaba, które są znormalizowane przy użyciu argumentu probability.

Jednak po wygenerowaniu dwóch histogramów, jak pokazano poniżej, chciałbym móc znaleźć dokładny punkt, w którym histogramy przecinałyby ścieżki, zakładając, że histogramy zostały narysowane za pomocą linii zamiast słupków. Niestety ta forma histogramu nie uwzględnia linii, ma tylko paski. Istnieje funkcja hist, którą można manipulować w Matlabie, aby narysować histogram jako linie zamiast słupków, jednak nie jest łatwo normalizować.

Dlatego najlepiej byłoby użyć histogram() do wykreślenia 2 histogramów i znalezienia miejsca ich przecięcia. Zobacz obrazek poniżej:

enter image description here

Oto przykład tworzenia wykresów:

x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h2.Normalization = 'probability';
h2.BinWidth = 0.25;

Teraz chcę znaleźć punkt, w którym ścieżki dwóch histogramów przecinają się. Uwaga, wartość przecięcia to przecięcie (w sensie matematycznym). Nie tego szukam. Szukam współrzędnej x miejsca, w którym dwa histogramy przecinają się na ich zewnętrznych granicach. Na przykład na załączonym obrazku odpowiedź brzmiałaby ~2,5.

2
Jonathan 21 listopad 2018, 11:41

1 odpowiedź

Najlepsza odpowiedź

Z przykładowych danych, z prostą modyfikacją:

x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h1.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];

h2.Normalization = 'probability';
h2.BinWidth = 0.25;
h2.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];


data1=h1.Values;
data2=h2.Values;
intersection_value=find(data2>data1,1); % this is the index, bad variable name
1
Ander Biguri 22 listopad 2018, 14:10