我对SymPy和solveset
还不熟悉。我在寻找一个表达式的奇点,为此我求解分母。之后,我想用这些结果进行进一步的计算,生成一个处理奇点情况的代码
不同方程之间的“解集”潜水员的返回。就我而言,到目前为止:
sets.FiniteSet
sets.Union
虽然FiniteSet
可以直接与for循环一起使用,但Union
不能
例如:
sol = Union(ImageSet(Lambda(_n, 2*_n*pi + pi/2), Integers), ImageSet(Lambda(_n, 2*_n*pi + 3*pi/2), Integers))
如果我把它放入一个循环(for s in sol:
),这个循环将永远不会结束。所以这没用。sol.is_interval
结果是False
,而我期望的是True
观察以下检测不允许输入的示例:
def fun(x):
if (x+pi/2)%pi == 0:
print('Detect a not allowed input.')
其中if
-条件必须从上面的解sol
导出
Union
的元素数是有限的还是无限的李>这张图表解释了我想做什么:
左边的深蓝色部分是右边的浅蓝色部分的代码生成器,它可以是一种不同的编程语言,不能处理无穷大或被零除之类的事情。我要实现的深蓝色部分
目前我停留在“一代
奇点处理”,因为Set
和Union
对于打印很好,但是对于进一步的处理来说很困难,如果不是无用的话
我试图涉及solveset
,因为at SymPy's documentation语句,即“solveset迟早会在内部或外部接管solve”。关于我的申请,我希望这不会发生。也许我没有完全理解sets
的机制
旁注:
Union
中只提取一个ImageSet
hold。我想我能把它打包,但没想到会拆箱。但从我的观点来看,这对计算是必不可少的李>
你的具体问题1和2都是很好的问题,我认为SymPy还没有答案
不过,我会尽量回答另一部分。如果我理解正确的话,您的函数
fun
将拒绝解决方案x
,其中(x+pi/2)%pi == 0
。另一种方法是,要排除整数n
的形式x = n*pi + pi/2
的解决方案。我们可以将其表示为一个集合,然后将其从solveset的结果中排除:不幸的是,在这一点上,SymPy并没有真正简化事情(而且
simplify
也没有帮助)。理想情况下,sol
首先会简化为exclude
,这样减去这两个就得到了空集,但我想这还没有实现相关问题 更多 >
编程相关推荐