Sto usando VB.NET.
Non riesco a snellire piu di così.
Alla ricapitoliamo: ho una matrice di circa 60000 elementi. Il primo fronte sicuramente c'è l'ho dopo il 20.000° indice, per cui la mia variabile
start mi indica quale sia l'indice di partenza (è parametrizzato per poterlo spostare, se necessario) e diciamo che ora è 20.000. L'altra variabile
mmStartEnd indica dove fermarsi perchè per me è inutile proseguire la ricerca del fronte oltre questo indice e diciamo che questa variabile è impostata a 24.000.
Per cui semplificando ho:
- Codice: Seleziona tutto
max = Double.MinValue
min = Double.MaxValue
For idx As Integer = 20000 To 24000
For u As Integer = idx To id2
valoriY(idc) = sx_tl(u)
valoriX(idc) = idc
If sx_tl(u) > max Then max = sx_tl(u)
If sx_tl(u) < min Then min = sx_tl(u)
idc += 1
Next
idc = 0
slopeTemp = Nothing
intercept = Nothing
mse = Nothing
trendLineTemp = Nothing
myAnalisysStat.LinFit(valoriX, valoriY, trendLineTemp, slopeTemp, intercept, mse)
If CDbl(slopeTemp) > 0.1 AndAlso max - min > soglia_min_fronte Then
start = idx
Dim media As Single = CSng(myAnalisysStat.Mean(valoriY))
For xx As Integer = start To start + punti_matrice_tl
If sx_tl(xx) >= media Then
_indice1 = xx
_indice1_h = sx_tl(_indice1 - ((1000 / unita_ing_tl) * 5))
Exit For
End If
Next
Exit For
End If
id2 += 1
Next
...popolo la mia mini matrice
valoriY di 5 elementi shiftando l'indice di 1 ogni volta in questo modo:
Se la mia matrice
sx_tl ad esempio è così composta: {1,2,1,3,2,4,5,8,9,11,8,9,8......}
le mie mini matrici saranno così composte:
{1,2,1,3,2}
{2,1,3,2,4}
{1,3,2,4,5}
{3,2,4,5,8}
di ogni mini matrice calcolo lo slope e il massimo e il minimo.
Se lo slope è positivo e la differenza tra Max e Min è superiore a un certo valore allora sono di fronte ad un picco positivo.
Ora ho la mini matrice che soddisfa le mie condizioni ma a me interessa sapere qual'è l'indice preciso in cui la curva inizia a salire. Per cui mi sono inventato di calcolarmi la media della mini matrice, fare un confronto, il primo valore che supera la media è l'indice che mi interessa.