Telle qu'elle est décrite, cette tâche n'est pas bien définie. La formule 1/(1+x*(x-1)/2)
correspond également aux données données. Plus généralement, pour tout ensemble fini de points de données, il existe une infinité de formules qui correspondent exactement à tous les points ; laquelle doit être renvoyée comme réponse ?
SymPy dispose de routines d'interpolation interpolate
y rational_interpolate
; le premier renvoie un polynôme et le second une fonction rationnelle passant par les points donnés. ( Référence .) L'interpolation polynomiale peut être utilisée dans votre exemple si vous savez qu'une fonction exponentielle devrait convenir, et vous prenez donc le logarithme des données, comme suit :
s = [Rational(1, 1), Rational(1, 2), Rational(1, 4)]
x = Symbol('x', real=True)
result = exp(interpolate([log(y) for y in s], x)).simplify()
print(result)
Cette impression 2**(-x + 1)
. L'idée est que la prise du logarithme transforme la fonction exponentielle en une fonction linéaire, qui peut être construite avec interpolate
.
Mais en général, les problèmes d'ajustement d'une courbe d'une certaine forme à des données données sont résolus numériquement avec des logiciels tels que scikit-learn.