Вы можете получить хорошее начало, просто проанализировав первую производную. Считайте процесс устойчивым, если первая производная близка к нулю. Но, пожалуйста, обратите внимание, что это не решение типа «серебряной пули», а несколько неприятных угловых случаев.
В любом случае, исходя из вышеизложенного, следует простая демонстрация:
import numpy as np
# create first some artificial observations
obs= np.array([[0, 1, 1.5, 3.5, 4, 4.5, 7, 9.2, 10.5, 15],
[1, 2, 6, 6.01, 5.5, 4, 4.7, 3.3, 3.7, 3.65]])
x= np.linspace(obs[0][0], obs[0][-1], 1e2)
y= np.interp(x, obs[0], obs[1])
# and add some noise to it
y+= 1e-3* np.random.randn(y.shape[0])
# now find steady state based on first derivative< abs(trh), but
# smooth the signal first by convolving it with suitable kernel
y_s= np.convolve(y, [.2, .6, .2])
d, trh= np.diff(y_s), .015
stable= (np.abs(d)< trh)[:-1]
# and inspect visually
from pylab import grid, plot, show
plot(x, y), plot(x, y_s[1: -1])
plot(x[stable], np.ones(stable.sum()), 's')
grid(True), show()
С выводом наподобие (где красные точки указывают на предполагаемый процесс устойчивого состояния):