/ / Specyficzny algorytm Drop Point - Matlab - algorytm, matlab

Specyficzny algorytm punktowy - Matlab - algorytm, matlab

Opracowałem skrypt, który w zasadzie wykorzystujekilka zakodowanych na stałe funkcji w celu zmniejszenia moich danych i wymyślenia wykresów dla różnych zmiennych w postaci danych_ # min, jak załączono na rysunku. Zmienne są nazywane w ten sposób, a następnie zmieniane na liczbę minut, w których trwała próba.

To, co chcę zrobić, to zidentyfikować spadekpunkty tych działek, na które wskazuję strzałką. Na przykład istnieje ogromna ilość zmian między punktami, około -68% zmiany z rzędu 50,018 na 50,019. Te krople, które wydają się występować w wierszach (49000: 51000) 100 000 kolumn wiersza numer 6 (identyfikowanych przez niebieską linię wykreśloną) występują w tablicy danych 10columns x 100000row. Są one konfigurowane w zmiennych, na przykład o nazwie data_10min.

Tak więc chciałbym znaleźć konkretny punkt kropli pokazany w

    data_10MIN(49000:51000,6)

data_10min jest zmienną, a następnie wyświetlane są parametry wykresu.

Byłoby fajnie mieć coś twardego kodufunkcja automatyzacji i po prostu łatwo znaleźć ten punkt za pomocą twardego kodu, jedyny problem polega na tym, że każda próba przesuwa się w lewo i prawo i nie są one spójne, więc różne próby spadają w różnych momentach (numery wierszy).

    findpeaks(data)

ta funkcja oferuje lokalny typ min maxanaliza, ale nie sądzę, żeby naprawdę działała na mój konkretny scenariusz. Jeśli ktoś może mi pomóc w rozwiązaniu tego problemu i spróbuje wymyślić pierwszy krok, naprawdę mi pomoże.

Obraz punktu upuszczania data_10Min

Odpowiedzi:

0 dla odpowiedzi № 1

Jeśli poprawnie zinterpretuję twój opis, interesują cię maksima krzywizna twoich danych.

Dla uproszczenia zakładam, że twoje dane są jednakowo odległe, a y jest parametryzowane przez x. Następnie zdefiniuj

x=data_10MIN(49000:51000,1);
y=data_10MIN(49000:51000,6);

dx = diff(x);
dydx = diff(y)./dx;
ddyddx = diff(dydx)./dx(1:end-1);
kappa = ddyddx./(1+dydx(1:end-1).^2).^1.5;
[~,locs] = findpeaks(kappa);
locs = locs+1; % index shifted because of diff

plot(x,y,".-")
plot(x(locs),y(locs),"ro")

i findpeaks(kappa) otrzymasz pozycje na wektorze krzywizny, które odpowiadają kroplom na wykresie.