2016-11-10 137 views
1

我具有低于代码的sympy.solve一个简单的测试:的Python`sympy`模块方程求解乘法中表达

#!/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 

输出如下:

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

方程式exp(1 - x) = 15被正确地解决( x = -15log(15) + 1)。

但是当我将x更改为10*x时,结果很奇怪。

  1. 为什么会有很多复杂的答案,如果我初始化符号x没有real=True

  2. 即使在real=True初始化符号x时,答案仍然不正确。与第一个方程相比,结果应该是-3/2*log(15) + 1/10。我写错了吗?

在此先感谢。

回答

1

我也可以确认方程exp(1 - 10*x) - 15 == 0solve输出显得非常复杂。我建议单变量方程首先考虑sympy.solveset。对于这个例子,它给出了以下很好格式化的解决方案。

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

注意,有由于指数函数是多值复根(在复杂的结构域)。如果您想将解决方案的域名限制为实际值,则solveset为此具有方便的选项domain

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

enter image description here