Re: Fronte di salita di una matrice di Double.

Messaggioda apatriarca » 10/02/2012, 16:19

La mia idea era un po' diversa, vediamo comunque come semplificare le cose. Ti presento un po' di idee non necessariamente compatibili una con l'altra.

Calcolo media e varianza
È possibile mantenere aggiornata la media degli ultimi \(n\) elementi senza doverla ricalcolare ogni volta. In particolare, la media di \(k\) elementi di un qualche vettore \(X\) che partono da un indice \(s\) ha la forma:
\[ m_s = \frac{1}{k} \sum_{i = s}^{s + k - 1} X_i . \]
Supponiamo di voler a questo punto calcolare \( m_{s+1} \) a partire da \( m_s \). Per farlo è sufficiente osservare che nella sommatoria di \(m_s\) compare un solo addendo che non compare anche in quella di \(m_{s+1}\), cioè \( X_s/k \), e nella sommatoria di \(m_{s+1}\) compare un solo addendo che non compare anche in quella di \(m_s\), cioè \(X_{s+k}/k\). Da questa osservazione concludiamo che
\[ m_{s+1} = m_s + \frac{X_{s+k} - X_s}{k}. \]
A questo punto vorremmo stimare anche la differenza tra il massimo e il minimo in qualche modo. Credo che il modo migliore per ottenere un'informazione più o meno equivalente, considerando che abbiamo già la media, è quella di calcolare la varianza. Ricordando quindi le formule precedenti per la media dovremmo ottenere se non ho sbagliato i calcoli:
\[ v_{s+1} = v_s + \frac{X_{s+k} - X_s}{k}\left( (X_{s+k} + X_s) + 2\,m_s - \frac{X_{s+k} - X_s}{k}\right) \]

Verifica se la funzione è crescente
Per verificare se la funzione è globalmente crescente nel tuo blocco utilizzi la regressione lineare. Essendo una operazione abbastanza costosa (non eccessivamente ma se la calcoli \(60000 - k + 1\) volte inizia a pesare sulle performance), allora potrebbe valer la pena di saltare quanto possibile questo test. In particolare, se la soglia per la differenza tra massimo e minimo è stata settata sufficientemente ampia, allora per la maggior parte dei campioni questo test dovrebbe essere negativo. Per cui la prima cosa che farei è verificare se è davvero necessario verificare se la curva è crescente o meno. A questo punto utilizzerei però un metodo euristico più semplice. Stavo in particolare pensando di calcolare una media tra le differenze tra elementi consecutivi. Per quello che dobbiamo fare mi sembrerebbe sufficientemente accurato come metodo.

Ricerca meno fine
Se per un qualche blocco abbiamo una bassa varianza/differenza tra massimo e minimo allora anche il blocco shiftato di una posizione avrà probabilmente la stessa caratteristica. Viceversa, se ci fosse una grossa variazione di valori e abbiamo o meno trovato un picco, troveremmo lo stesso picco shiftando di poco. Si potrebbe quindi ad esempio shiftare ogni volta di un numero \(1 < d < k\) posizioni ignorando quindi alcuni casi. In questo modo potresti quindi per esempio avanzare ogni volta di ad esempio tre posizioni e considerare il blocco di cinque elementi.

Posizione picco
Se il blocco è sufficientemente piccolo, difficilmente si trovano più picchi nello stesso blocco e puoi forse scegliere come picco una posizione che sia facile da calcolare come il centro del blocco senza commettere un errore troppo grosso. Scegliendo la posizione in questo modo ti eviti molti calcoli e ottieni un errore massimo di \(0.15 mm\).
apatriarca
Moderatore
Moderatore
 
Messaggi: 2124
Iscritto il: 08/12/2008, 20:37
Località: Torino

Re: Fronte di salita di una matrice di Double.

Messaggioda Pirelli72 » 13/02/2012, 16:40

Ok ci siamo sono di nuovo operativo, scusami.
Dunque, l'algoritmo che utilizzo funziona alla meraviglia fino a che il gradino di tensione e netto o quasi: Quando il gradino di tensione non è proprio netto inizia ad avere qualche problema, ad esempio con questa curva:

Immagine

di cui riporto solo la parte finale:

Immagine

inizio ad avere problemi di analisi, in quanto lo slope delle mini matrici inizia a calare cosi come la diff. tra min e max.

Mi parlavi di come calcolare la differenza tra min e max nella prima ideea, ovvero di calcolo di media e varianza......come primo metodo alternativo....
Ultima modifica di Pirelli72 il 14/02/2012, 09:00, modificato 1 volta in totale.
Pirelli72
Starting Member
Starting Member
 
Messaggi: 8
Iscritto il: 07/02/2012, 14:00

Re: Fronte di salita di una matrice di Double.

Messaggioda apatriarca » 13/02/2012, 16:55

Non riesco a vedere le immagini, ma capisco quale possa essere il problema. In questo caso una possibile soluzione potrebbe essere quella di allargare la finestra di ricerca.
apatriarca
Moderatore
Moderatore
 
Messaggi: 2124
Iscritto il: 08/12/2008, 20:37
Località: Torino

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: valentina92 e 1 ospite