首页 > 解决方案 > 如何在 SymPy 中使用 nonlinsolve 返回有限(浮点)值?

问题描述

我对编程很陌生,不得不在学校项目中使用 sympy。

我想我知道使用 nonlinsolve 返回一个角度会给出一个角度 + 2n*pi 的 ImageSet。但是我希望它只返回角度的值(在区间 [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 是如何工作的(如何操作 ImageSets)

标签: pythonsympyequation-solving

解决方案


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

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

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

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

编辑:我认为你需要像这样使用 imageset 的 intersect 方法(注意 intersect 返回所有的交叉点,这里我只选择了第一个):

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)

推荐阅读