J'essaie de résoudre une équation en python à l'aide de sympty. J'ai une équation générée (quelque chose comme Merci de la lecture. P> P> fonction = y (8.0- (y ** 3.0)) code> que j'utilise avec symbole pour créer une nouvelle équation comme ceci:
eq = symby.eq ( fonction, 2) code> qui sortira
y (8.0- (y ** 3.0)) == 2 code>. Mais
sympty.solve (eq) code> ne semble pas travailler.
5 Réponses :
Ceci est une équation non linéaire. Ce que vous devez rechercher est un algorithme de recherche de racine à Scipy. P>
Le vôtre est une équation non linéaire ... vous pouvez donc utiliser optimiser.fsolve code> pour cela. Pour plus de détails, recherchez la fonction de ce tutoriel Sciped P>
La méthode fsolve code> est, dans ce cas, Overkill i>. Il est vrai que l'équation de la question est non linéaire, mais polynôme b>, néanmoins (comme @garykerr a dit dans sa réponse, nous exprimons
3.0 code> comme entier
3 < / code>). Pour cette raison, je préférerais la solution avec
Solve code> du module
symboly code>, car cette méthode est spécifiquement adaptée aux équations polynomiales (voir Référence de symbole ), tandis que la méthode
fsolve code> est une méthode totalement générique basée sur le algorithme hybride
(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. Les œuvres suivantes pour moi à l'aide de SYMPSY 0.6 .7. P> y ** 3.0 code> modifié en
y ** 3 code>). p>
from sympy import Eq, Symbol, solve
y = Symbol('y')
eqn = Eq(y*(8.0 - y**3), 8.0)
print solve(eqn)
Pour les équations non linéaires, vous devez utiliser Par exemple, le script suivant devrait produire 1.2667664310254. P> 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 >).
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,))
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).