7
votes

Python résolvant l'équation d'une variable

J'essaie de résoudre une équation en python à l'aide de sympty. J'ai une équation générée (quelque chose comme fonction = y (8.0- (y ** 3.0)) que j'utilise avec symbole pour créer une nouvelle équation comme ceci: eq = symby.eq ( fonction, 2) qui sortira y (8.0- (y ** 3.0)) == 2 . Mais sympty.solve (eq) ne semble pas travailler. XXX

Merci de la lecture.


0 commentaires

5 Réponses :


0
votes

Ceci est une équation non linéaire. Ce que vous devez rechercher est un algorithme de recherche de racine à Scipy.


0 commentaires

9
votes

Le vôtre est une équation non linéaire ... vous pouvez donc utiliser optimiser.fsolve pour cela. Pour plus de détails, recherchez la fonction de ce tutoriel Sciped


1 commentaires

La méthode fsolve est, dans ce cas, Overkill . Il est vrai que l'équation de la question est non linéaire, mais polynôme , néanmoins (comme @garykerr a dit dans sa réponse, nous exprimons 3.0 comme entier 3 < / code>). Pour cette raison, je préférerais la solution avec Solve du module symboly , car cette méthode est spécifiquement adaptée aux équations polynomiales (voir Référence de symbole ), tandis que la méthode fsolve est une méthode totalement générique basée sur le algorithme hybride



9
votes

(Je ne sais pas pourquoi vous avez mentionné Scipy dans votre question lorsque vous utilisez symboly dans votre code. Je suppose que vous utilisez SYMPY.)

sympty peut résoudre cette équation si vous spécifiez une puissance entière pour y code> (c.-à-d. y ** 3.0 code> modifié en y ** 3 code>). p>

Les œuvres suivantes pour moi à l'aide de SYMPSY 0.6 .7. P>

from sympy import Eq, Symbol, solve

y = Symbol('y')
eqn = Eq(y*(8.0 - y**3), 8.0)

print solve(eqn)


0 commentaires

2
votes

Pour les équations non linéaires, vous devez utiliser sydy.solvers.nsolve code> pour le résoudre numériquement, à l'exception de certains cas particuliers où un solveur plus spécifique et approprié peut exister (par exemple, Tsolve code >).

Par exemple, le script suivant devrait produire 1.2667664310254. P>

from sympy import Symbol
from sympy.solvers import nsolve
from sympy import sin, tan

theta = Symbol('theta')
print nsolve(tan(theta)/(1+1*sin(theta)) - 4.0**2/9.81, theta, (1.2,))


0 commentaires

3
votes

En supposant que vous signiez que vous essayiez d'utiliser symboly, par opposition à Scipy, vous pouvez être sympa (fonctionne avec V0.7.2 +) pour le résoudre en effectuant un petit ajustement à votre équation - vous devez juste avoir besoin de Mettez un opérateur de multiplication (*) entre le premier «Y» et le '('. Il ne semble pas compter que vous spécifiez le pouvoir comme un flotteur ou non (mais il est possible que cela soit nécessaire dans 0,6.7). xxx


0 commentaires