So a priori che la mia domanda non è prettamente legata al linguaggio VB.NET ma forse di più legata ad un algoritmo matematico, ma la pongo comunque.
Ho una matrice molto lunga contenente n elementi, popolata da un'acquisizione di un segnale analogico. Diciamo che ad un certo punto nella matrice i valori iniziano a salire rapidamente e io vorrei stabilire con precisione il punto in cui la curva inizia a salire.
A digiuno di algoritmi matematici efficienti mi è venuto in mete questo:
[code]
Dim matrix(10000) As Double
Dim matrixTemp(4) As Double
Dim indexStart As Integer
Dim start As Integer
Dim [end] As Integer = 4
'Popolo la mtrice matrix
For x As Integer = 0 To matrix.GetUpperBound(0)
Dim i As Integer
For c As Integer = start To [end]
matrixTemp(i) = matrix(x)
i += 1
Next
'slope è una funzione che mi restituisce il coefficiente angolare della retta.
If slope(matrixTemp) >= 0.2 Then
indexStart = x
Exit For
End If
start += 1
[end] += 1
Next
[/code)
In pratica scompongo la matrice originale in sub matrici da 5 elementi, calcolo tramite la regressione lineare della mini matrice l'inclinazione della retta risultante e la confronto poi con un valore. Se l'inclinazione della retta supera un certo valore allora significa che in quel punto la curva è in salita.
Ma tutto ciò non mi convince, qualcosa di più efficiente ?
Grazie