在Python中解决一个简单的符号方程

4

我正在使用sympy来对一个非常简单的方程进行符号求解,但是我得到的变量解是一个空矩阵!以下是代码:

from sympy import *

x = Symbol('x')
l_x = Symbol('l_x')

x_min = -6
x_max = 6

precision_x = 10**8 

solve(((x_max-x_min)/((2**l_x)-1))/precision_x, l_x)

print(l_x)

我尝试了一些其他简单的方程,比如:

solve(x**2 = 4, x)

后者完美地工作了;我只是不明白为什么前者不起作用!

2个回答

6

给定的表达式假定右侧为 0,而没有任何一个 l_x 的值能够满足此条件。可以尝试使用以下方法代替:

from sympy import *
q, r, s, t = symbols("q r s t")
eq = (q-r)/(2**s-1)/t
solve(eq-1,s)

输出结果为:
[log((q - r + t)/t)/log(2)]

如果要显式创建一个具有非零rhs的方程对象,可以这样做:

solve(Eq(eq,1),s)

4
很简单:你的方程没有解。
该方程是12/((2**l_x)-1))/1e8 = 0,它没有解。
看看y = 12/((2**x)-1))/1e8长什么样子(从wolframalpha复制):copied from wolframalphay = 12/((2**x)-1))/1e8 相比之下,试着解决12/((2**l_x)-1))/1e8 = 1
>>> solve(((x_max-x_min)/((2**l_x)-1))/precision_x - 1, l_x)
[(-log(25000000) + log(25000003))/log(2)]

运作得非常好!

@Prateek 我所写的是从Python控制台中复制/粘贴的。它可以不使用print来打印输出。我认为这很明显,因为有典型的 >>> 提示符,但我猜并不是每个人都像我一样喜欢控制台 :) - zvone
是的,我的错。我以为需要括号,但后来意识到BODMAS对你的表达式也适用。我的结果和你的结果是一样的 (f(x))-1f(x)-1。我本来想问你 (f(x))-1 的意思。 - Morse
@zvone 只有一个快速的问题; 你有什么想法为什么在 'spyder' IDE 中使用 'sympy' 和它的命令(即解决和符号)会给我一个警告?对于 'from sympy import *',它说:"'from sympy import *' used; unable to detect undefined names"! 对于 'symbol' 和 'solve',它说:"'symbol' may be undefined, or defined from star imports: sympy"。代码仍然可以工作,但我想知道为什么我会收到警告,是否有一种方法可以摆脱这些警告? - RezAm
1
@Antonio 我不使用Spyder,但我猜你可以通过将from sympy import *替换为from sympy import solve, Symbol来解决问题。通常最好避免使用*导入,所以Spyder可能会对此发出警告。 - zvone
@zvone,你太棒了,谢谢!我按照你说的做了,现在没有警告了 :) - RezAm
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接