因此,我不知道根本问题是什么(我不知道它是否发生在任何其他公式中),但每当我键入15*8-2^x=x并使用r = solve(leftside - rightside, user_choice)
使用公式解算器求解x时,程序就永远无法完成运行。我在函数中有一个pprint(r)
行,但程序永远不会到达这一点。(-2**x=x求解x工程细tho)
终止程序后,我收到大约20条错误消息,例如:
File "/Users/myusername/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/solvers/solvers.py", line 1095, in solve
solution = _solve(f[0], *symbols, **flags)
我在Symbolab中尝试了15*8-2**x=x
,它很好地解决了这个问题:
https://www.symbolab.com/solver/step-by-step/solve%20for%20x%2C%2015%5Ccdot8-2%5E%7Bx%7D%3Dx
*我不是数学家,这些计算远远超出了我的理解,我只是觉得奇怪,当Symbolab设法解决它时,它从未完成或显示出错误。那么是什么导致了这种行为呢
编辑:堆栈跟踪:
Traceback (most recent call last):
File "/Users/torrinleonard/PycharmProjects/formula calculator/Complete_solver.py", line 38, in <module>
Rearrange_input()
File "/Users/torrinleonard/PycharmProjects/formula calculator/Complete_solver.py", line 29, in Rearrange_input
r = solve(l - r, user_choice)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/solvers/solvers.py", line 1095, in solve
solution = _solve(f[0], *symbols, **flags)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/solvers/solvers.py", line 1717, in _solve
result = list(map(simplify, result))
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/simplify/simplify.py", line 606, in simplify
expr = expr.replace(
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/basic.py", line 1497, in replace
rv = walk(self, rec_replace)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/basic.py", line 1471, in walk
newargs = tuple([walk(a, F) for a in args])
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/basic.py", line 1471, in <listcomp>
newargs = tuple([walk(a, F) for a in args])
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/basic.py", line 1471, in walk
newargs = tuple([walk(a, F) for a in args])
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/basic.py", line 1471, in <listcomp>
newargs = tuple([walk(a, F) for a in args])
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/basic.py", line 1481, in walk
rv = F(rv)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/basic.py", line 1490, in rec_replace
v = _value(expr, result)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/basic.py", line 1455, in <lambda>
_value = lambda expr, result: value(expr)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/simplify/simplify.py", line 614, in <lambda>
lambda x: x.func(*[simplify(i, **kwargs) for i in x.args]),
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/simplify/simplify.py", line 614, in <listcomp>
lambda x: x.func(*[simplify(i, **kwargs) for i in x.args]),
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/simplify/simplify.py", line 699, in simplify
expr = shorter(expand_log(expr, deep=True), logcombine(expr))
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/simplify/simplify.py", line 1119, in logcombine
return bottom_up(expr, f)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/simplify/simplify.py", line 1198, in bottom_up
rv = F(rv)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/simplify/simplify.py", line 1097, in f
log1[Mul(*k)] = log(logcombine(Mul(*[
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/simplify/simplify.py", line 1098, in <listcomp>
l.args[0]**Mul(*c) for c, l in log1.pop(k)]),
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/expr.py", line 239, in __pow__
return self._pow(other)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/decorators.py", line 266, in _func
return func(self, other)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/decorators.py", line 136, in binary_op_wrapper
return func(self, other)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/expr.py", line 235, in _pow
return Pow(self, other)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/cache.py", line 72, in wrapper
retval = cfunc(*args, **kwargs)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/power.py", line 336, in __new__
obj = b._eval_power(e)
File "/Users/torrinleonard/.conda/envs/formula calculator/lib/python3.8/site-packages/sympy/core/numbers.py", line 2347, in _eval_power
result = Integer(x**abs(expt.p))
KeyboardInterrupt
看起来常数的大小会带来麻烦,因为较小的值很容易解决:
但是,在这种情况下,精确的值无助于找到解决方案,因此我们可以将
120
替换为Symbol('120')
:正如@oscar benjamin指出的,设置
simpliy=False
将在相同的时间内给出答案,但结果中也会得到一个大整数:如果您只需要一个数值,您可以直接使用
nsolve
和对解决方案的合理猜测:相关问题 更多 >
编程相关推荐