/ / Специфичен алгоритъм на долните точки - Matlab - алгоритъм, MATLAB

Специфичен алгоритъм на долните точки - Matlab - алгоритъм, MATLAB

Разработих скрипт, който основно използвакуп твърди кодирани функции, за да намалим данните си и да измислям графики за различни променливи под формата на data_ # min, както е приложено в фигурата. Променливите се наименуват така и след това се променят за # мин.

Това, което искам да мога да направя, е да идентифицирам спадаточки на тези парцели, които посочвам със стрелка. Налице е огромно количество промяна между точките, например около -68% промяна от ред 50,018 на 50,019. Тези капки, които всички изглеждат в рамките на редове (49000: 51000) от 100 000 ред колона номер 6 (идентифицирани от синята графична линия) се появяват в рамките на данните 10 columns x 100000row масив. Те се настройват в променливи, например наречени data_10min.

Така че това, което бих искал да намеря, е конкретната точка, показана в

    data_10MIN(49000:51000,6)

data_10min е променливата, след което се показват параметрите за графиката.

Би било хубаво да имаш нещо твърд код aза да автоматизирате и просто да намерите тази точка с помощта на твърд код, единственият проблем е, че всяко изпробване се премества наляво и надясно и те не са съвместими, така че различните изпитвания спадат по различно време (номера на редове).

    findpeaks(data)

тази функция предлага локален минимален максно аз не мисля, че наистина работи за моя конкретен сценарий.Ако някой може да ми помогне да разбера този въпрос, и се опитайте да може да излезе с първата стъпка, че наистина ще ми помогне.Благодарности!

Снимка на data_10Min drop point

Отговори:

0 за отговор № 1

Ако тълкувам Вашето описание правилно, вие се интересувате от максимума на кривина на вашите данни.

За простота предполагам, че вашите данни са еднакви и y е параметризирана с x. След това определете

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")

и findpeaks(kappa) ще получите позициите на вектора на кривината, които съответстват на капките в участъка.