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

如何解决在 15*8-2**x=x 中求解 x 的公式求解器未完成计算

所以我不知道根本问题是什么(我不知道它是否发生在任何其他公式中),但是每当我输入 15*8-2^x=x 并用我的公式求解 x求解器使用 r = solve(leftside - rightside,user_choice) 程序永远不会完成运行。我在函数中有 pprint(r) 行,但程序永远不会到达那个点。 (-2**x=x 求解 x 效果很好)

在我终止程序后,我收到二十条错误消息,例如:

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",**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",in <listcomp>
    newargs = tuple([walk(a,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",in <listcomp>
    lambda x: x.func(*[simplify(i,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

解决方法

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

>>> 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)]

但是,在这种情况下,确切的值无助于找到解决方案,因此我们可以将 120 替换为 Symbol('120')

>>> solve(Symbol('120')-2**x-x,x)
120 - LambertW(exp(120*log(2))*log(2))/log(2)

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

[-LambertW(1329227995784915872903807060280344576*log(2))/log(2) + 120]

如果您只想要一个数值,您可以直接使用 nsolve 和对解决方案的合理猜测:

>>> nsolve(120-2**x-x,7)
6.82244407754025

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?