如何在 SymPy 中使用 nonlinsolve return 有限(浮点)值?

How to return a finite (float) value with nonlinsolve in SymPy?

我是编程的新手,不得不将 sympy 用于学校项目。

我想我得到了使用 nonlinsolve 到 return 一个角度给出一个角度为 + 2n*pi 的 ImageSet。但是我希望它 return 只是角度的值(在区间 [0,pi/2] 中),并且作为一个值而不是区间。

from sympy import nonlinsolve, symbols,cos
x=symbols('x')
print(nonlinsolve([cos(x)-1],[x]).args[0][0])

我希望结果是 0 而不是 2*n*pi.

澄清:我知道结果是正确的,但我只想要一个可以代数使用的值,而且我不知道 Sympy 是如何工作的(如何操作 ImageSet)

所以我可能是错的,因为我不使用 sympy,但是求解器 return 的解决方案对我来说似乎是正确的。

ImageSet(Lambda(_n, 2*_n*pi), Integers)

据我了解求解器 returned lambda 函数。 Cosinus 是一个循环函数,这意味着它每 2PI 重复一次它的值。所以求解器说第一个解 (_n = 0) 是 0,第二个 (_n = 1) 是 2pi 等等。

查看函数图,希望它有意义: Wolfram Alpha - (cos(x) - 1)

编辑:我认为你需要像这样使用图像集的相交方法(注意相交 returns 所有的交点,这里我只选择了第一个):

from sympy import nonlinsolve, symbols,cos, Interval
import math

x = symbols('x')
f = nonlinsolve([cos(x)-1], [x]).args[0][0]
sol = f.intersect(Interval(0, math.pi/2)).args[0]
print(sol)