我有一个方程可以解决。该等式可以描述为上面的公式。 N和S是常数,例如N = 201和S = 0.5。我在python中使用sympy来解决它。 python脚本如下:
from sympy import *
x=Symbol('x')
print solve( (((1-x)/200) **(1-x))* x**x - 2**(-0.5), x)
但是, RuntimeError:__instancecheck __
超出了最大递归深度我也试过使用Mathematica,它可以输出0.963的结果
http://www.wolframalpha.com/input/?i=(((1-x)%2F200)+(1-x))*+xx+-+2**(-0.5)+%3D+0
欢迎任何建议。谢谢。
答案 0 :(得分:3)
假设您不想要符号解决方案,只需要一个可以使用的值(如WA的0.964),就可以使用mpmath
。我不确定它是否真的可以用激进来表达解决方案 - 西澳确实没有尝试过。您应该已将其安装为SymPy
Requires: mpmath
具体来说,mpmath.findroot
似乎可以做你想要的。它需要一个实际可调用的Python对象,它是查找根的函数,以及x的起始值。它还接受一些更多参数,例如最小错误tol
和你可以使用的解算器,尽管它们似乎并不是真的有必要。你可以像这样简单地使用它:
import mpmath
f = lambda x: (((1-x)/200) **(1-x))* x**x - 2**(-0.5)
print mpmath.findroot(f, 1)
我只是用1作为起始值 - 你可能会想到一个更好的。根据图形的形状来判断,只有一个根可以找到,它可以很容易地接近,而不需要花哨的求解器,所以这应该足够了。另外,考虑到“mpmath是一个用于任意精度浮点运算的Python库”,如果你愿意的话,你应该能够得到一个非常高精度的答案。它有
的输出(0.963904761592753 + 0.0j)
这实际上是一个mpmath复合体或mpc
对象,
mpc(real='0.96390476159275343', imag='0.0')
如果您知道它的虚数值为0,则可以使用以下任一方法:
In [6]: abs(mpmath.mpc(23, 0))
Out[6]: mpf('23.0')
In [7]: mpmath.mpc(23, 0).real
Out[7]: mpf('23.0')
以mpf
的格式“提取”单个浮点数。