对于周期性功能,我如何告诉sympy
我想要某个域上的所有解决方案?
示例:
import sympy
import sympy.parsing.sympy_parser
SympyExpression = sympy.parsing.sympy_parser.parse_expr( 'sin(pi* x)*sin(pi*y)' )
Variables = [sympy.Symbol('x'),sympy.Symbol('y') ]
Zeros = sympy.solve( f = SympyExpression, symbols = Variables )
print Zeros
输出:
>>>> [{x: 0}, {x: 1}, {y: 0}, {y: 1}]
显然,解决方案是正确的但不完整。
如果我想要真实域名中的所有零,该怎么办?
-2 < x < 2
-2 < y < 2
以某种方式获得该域上的所有解决方案会很好:
x = k -> k in [-2,-1,0,1,2]
OR
y = j -> j in [-2,-1,0,1,2]
为了说明,我提供了link to Wolfram Alpha来绘制这个2D表面的图形。
答案 0 :(得分:0)
我不认为可以直接完成,但有一个解决方法(至少对于您发布的这个特定功能):
import sympy
x = sympy.Symbol('x')
y = sympy.Symbol('y')
n = sympy.Symbol('n')
sol = sympy.solve('sin(pi*(x + n))*sin(pi*(y+n))', [x, y])
给出:
[{x: -n}, {x: -n + 1}, {y: -n}, {y: -n + 1}]
因此,显然,对于n = 0
,您获得了标准解决方案。现在,您可以简单地遍历解决方案以获取n
的某些值,并过滤所需范围内的值。例如。
[sol2[0][x].subs(n, vali) for vali in range(-30, 40) if sol2[0][x].subs(n, vali) >= -2 and sol2[0][x].subs(n, vali) <= 2]
为您提供所需的输出:
[2, 1, 0, -1, -2]
当然,您需要分别合并为x
和y
获得的不同解决方案,但这样可以让您走上正确的轨道。