/ / Algoritmo de ponto de gota específico - Matlab - algoritmo, matlab

Algoritmo de Ponto de Gota Específico - Matlab - algorithm, matlab

Eu desenvolvi um script que basicamente utilizaum monte de funções codificadas para reduzir meus dados e gerar gráficos para diferentes variáveis ​​na forma de data_ # min como anexado na figura. As variáveis ​​são nomeadas assim e depois alteradas durante o número de minutos que durou a tentativa.

O que eu quero fazer é identificar a quedapontos desses gráficos para os quais aponto por meio de uma flecha. Há uma grande mudança entre os pontos, por exemplo, uma mudança de -68% da linha 50.018 para 50.019. Essas quedas, que parecem todas ocorrer dentro das linhas (49000: 51000) de uma coluna de 100.000 linhas, número 6 (identificado pela linha traçada em azul), ocorrem dentro da matriz de dados 10columns x 100000row. Eles são configurados em variáveis, por exemplo, chamadas de data_10min.

Então, o que eu gostaria de encontrar é o ponto de queda específico mostrado em

    data_10MIN(49000:51000,6)

data_10min é a variável e, em seguida, os parâmetros de como o gráfico é traçado são mostrados.

Seria legal ter algo em código umfunção para automatizar e encontrar facilmente esse ponto usando código rígido, o único problema é que cada tentativa muda para a esquerda e para a direita e eles não são consistentes, então diferentes tentativas caem em momentos diferentes (números de linha).

    findpeaks(data)

esta função oferece um tipo local mínimo máximo deanálise, mas eu não acho que realmente tem funcionado para meu cenário específico. Se alguém puder me ajudar a descobrir esse problema e tentar talvez dar um primeiro passo, isso realmente me ajudaria. Obrigado!

Imagem de data_10Min drop point

Respostas:

0 para resposta № 1

Se eu interpretar sua descrição corretamente, você está interessado no máximo do curvatura dos seus dados.

Para simplificar, suponho que seus dados sejam equidistantes ey é parametrizado por x. Então defina

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

e findpeaks(kappa) obterá as posições no vetor de curvatura que correspondem às quedas no gráfico.