Язык Wolfram Language

Операции с временными рядами

Примерная производная от сигнала

Воспользуемся функцией MovingMap для аппроксимации производной от сигнала, поступающего от нерегулярного непрерывного временного ряда.

In[1]:=
Click for copyable input
ts = TimeSeries[ Table[{t, EllipticTheta[1, t, 0.3]}, {t, Join[{0.}, RandomReal[{0, 2 Pi}, 254], {2. Pi}]}]]
Out[1]=
In[2]:=
Click for copyable input
RegularlySampledQ[ts]
Out[2]=
In[3]:=
Click for copyable input
ListPlot[ts, PlotTheme -> "Detailed"]
Out[3]=

Воспользуемся значениями и временными точками на границах каждого скользящего окна для вычисления разности факторизаций.

In[4]:=
Click for copyable input
quotient[values_, times_] := First[Differences[values]/Differences[times]]
In[5]:=
Click for copyable input
mm = MovingMap[quotient[#BoundaryValues, #BoundaryTimes] &, ts, {.01, Right}]
Out[5]=

Сравним полученный результат с теоретической производной.

In[6]:=
Click for copyable input
prime = D[EllipticTheta[1, t, 0.3], t]
Out[6]=
In[7]:=
Click for copyable input
Show[Plot[prime, {t, 0, 2 \[Pi]}, PlotStyle -> Thick, PlotTheme -> "Detailed", PlotLegends -> None], ListPlot[mm, PlotStyle -> Red]]
Out[7]=

Воспользуемся функцией MovingMap со спецификацией Line, чтобы создать участок секущих, аппроксимирующих исходный временной ряд.

In[8]:=
Click for copyable input
line[yvals_, xvals_] := Line[Transpose[{xvals, yvals}]];
In[9]:=
Click for copyable input
lines = MovingMap[ line[#BoundaryValues, #BoundaryTimes] &, ts, {1.3, Right, {0, 2. \[Pi], .1}}];
In[10]:=
Click for copyable input
Graphics[{Black, lines["Values"]}]
Out[10]=

Родственные примеры

de en es fr ja ko pt-br zh