Możesz wypróbować ListConvolve
z jądrem Gaussa, aby wygładzić dane. Jedną z miłych cech jest to, że pochodna z splotu z jądrem Gaussa jest równoważna splatanie z pochodnego jądra Gaussa.
Oto dane próbki:
data = Table[Sin[x] + .5 RandomReal[{-1, 1}], {x, 0, 6 \[Pi], .05}];
ListLinePlot[data]
Jest to prosty splot z jądrem Gaussa:
data2 =
Block[{\[Sigma] = 2},
ListConvolve[
Table[1/(Sqrt[2 \[Pi]] \[Sigma]) E^(-x^2/(2 \[Sigma])),
{x, -2 , 2, 1/10}
], data, {11, 11}
]
];
ListLinePlot[data2]
Splot z pierwszej pochodnej a Gaussian:
data3 =
Block[{\[Sigma] = 1},
ListConvolve[
Table[-((E^(-(x^2/(2 \[Sigma]))) x)/(Sqrt[2 \[Pi]] \[Sigma]^2)),
{x, -2 \[Sigma],2 \[Sigma], \[Sigma]/10}
], data, {11, 11}
]
];
ListLinePlot[data3]
Możesz grać z parametru sigma, aby zobaczyć, co dostaje optymalne wyniki w danym przypadku.
Cała teoria nazywa się Scale Space. Zauważ, że powyższe stwierdzenie o splotach dotyczy przestrzeni ciągłej. For a discrete implementation, the kernel could be chosen somewhat better.
Pamiętaj, że podobnie jak MovingAverage, splot może przenosić cechy twoich danych.
Prawdziwym pytaniem jest tutaj, jak oszacować pochodną, gdy dane są głośne. Kiedy mamy już taką metodę, możemy pomyśleć o jej wdrożeniu w Mathematica. Google pojawia się np. to: http://math.lanl.gov/Research/Highlights/PDF/tvdiff.pdf – Szabolcs
http://math.lanl.gov/Research/Publications/Docs/chartrand-2007-numerical.pdf – Szabolcs
@Szabolcs, dzięki za linki. – rcollyer