2016-11-10 1 views
1

J'ai le code ci-dessous pour un test simple de sympy.solve:Python `sympy` équation du module résolution multiplication dans l'expression

#!/usr/bin/python 

from sympy import * 

x = Symbol('x', real=True) 
#expr = sympify('exp(1 - 10*x) - 15') 

expr = exp(1 - x) - 15 
print "Expressiong:", expr 
out = solve(expr) 
for item in out: 
    print "Answer:", item 

expr = exp(1 - 10*x) - 15 
print expr 
out = solve(expr) 
for item in out: 
    print "Answer:", item 

sortie est la suivante:

Expressiong: exp(-x + 1) - 15 
Answer: -log(15) + 1 
exp(-10*x + 1) - 15 
Answer: log(15**(9/10)*exp(1/10)/15) 

L'équation exp(1 - x) = 15 est résolu correctement (x = -15log(15) + 1). Mais lorsque je change x en 10*x, le résultat est bizarre.

  1. Pourquoi y aurait-il beaucoup de réponses complexes si j'initialiser le symbole x sans real=True? Même avec real=True lors de l'initialisation du symbole x, la réponse n'est toujours pas correcte. En comparant avec la première équation, le résultat devrait être -3/2*log(15) + 1/10. Ai-je mal écrit l'équation?

Merci d'avance.

Répondre

1

Je peux également confirmer que la sortie solve pour l'équation exp(1 - 10*x) - 15 == 0 apparaît compliquée. Je suggère pour les équations univariées d'abord considérer sympy.solveset. Pour cet exemple, il donne les solutions bien formatées suivantes.

import sympy as sp 
sp.init_printing(pretty_print=True) 

x = sp.symbols('x') 

sp.solveset(sp.exp(1 - 10*x) - 15,x) 

enter image description here

Notez qu'il ya des racines complexes en raison de la fonction exponentielle étant à valeurs multiples (dans le domaine complexe). Si vous souhaitez limiter le domaine de la solution à des réels, solveset a l'option pratique domain à cet effet.

sp.solveset(sp.exp(1 - 10*x) - 15,x, domain = sp.S.Reals) 

enter image description here