首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在15*8-2**x=x中求解x的公式求解器无法完成计算

在15*8-2**x=x中求解x的公式求解器无法完成计算
EN

Stack Overflow用户
提问于 2021-05-03 09:30:20
回答 1查看 60关注 0票数 1

所以我不知道问题的根源是什么(我不知道其他公式是否会发生这种情况),但是每当我输入15*8-2^x=x,并使用r = solve(leftside - rightside, user_choice)用我的公式求解器求解x时,程序就永远不会结束运行。我在函数中有一行pprint(r)代码,但是程序从来没有到过这一步。(-2**x=x对x的求解效果很好)

在我终止程序后,我收到大约20条错误消息,例如:

代码语言:javascript
复制
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设法解决它时,它从未完成或显示错误。那么,是什么导致了这种行为呢?

编辑:堆栈跟踪:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-03 10:54:03

看起来常数的大小造成了麻烦,因为较小的值很容易求解:

代码语言:javascript
复制
>>> from sympy.abc import x
>>> from sympy import *
>>> solve(1-2**x-x)
[0]
>>> solve(2-2**x-x)
[(-LambertW(log(16)) + log(4))/log(2)]
>>> solve(5-2**x-x)
[(-LambertW(log(4294967296)) + log(32))/log(2)]

但是,在本例中,精确值并不能帮助我们找到解决方案,因此我们可以用Symbol('120')替换120

代码语言:javascript
复制
>>> solve(Symbol('120')-2**x-x,x)
120 - LambertW(exp(120*log(2))*log(2))/log(2)

正如@oscar-本杰明指出的那样,设置simpliy=False将在相同的时间内给出答案,但您也会在结果中得到一个大整数:

代码语言:javascript
复制
[-LambertW(1329227995784915872903807060280344576*log(2))/log(2) + 120]

如果你只想要一个数值,你可以直接用nsolve和一个合理的猜测来解决这个问题:

代码语言:javascript
复制
>>> nsolve(120-2**x-x, 7)
6.82244407754025
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67362553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档