3 votes

Trouver un algorithme de séquence pour une liste d'expressions ?

Est-il possible d'utiliser sympy pour trouver l'algorithme d'une séquence d'expressions ?

Par exemple, si j'ai la liste suivante :

s = [ fraction(1/1), fraction(1/2), fraction(1/4), ... ]

Sympa peut-il extraire l'expression représentant cette liste d'expressions ?

>> fraction(1/(2**(x-1)))

3voto

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X