Python 如何避免sympy提供无用的分段解决方案

Python 如何避免sympy提供无用的分段解决方案,python,sympy,Python,Sympy,从 我得到了分段解 from sympy import * t,r = symbols('t r', real=True, nonnegative=True) c_x,c_y,a1,a2 = symbols('c_x c_y a1 a2', real=True) integrate(-r*(a1 - a2)*(c_x*cos(-a1*t + a1 + a2*t) + c_y*sin(-a1*t + a1 + a2*t) + r)/2,(t,0,1)) 它不需要分段,因为如果a1=a2两个表达

我得到了分段解

from sympy import *
t,r = symbols('t r', real=True, nonnegative=True)
c_x,c_y,a1,a2 = symbols('c_x c_y a1 a2', real=True)
integrate(-r*(a1 - a2)*(c_x*cos(-a1*t + a1 + a2*t) + c_y*sin(-a1*t + a1 + a2*t) + r)/2,(t,0,1))

它不需要分段,因为如果
a1
=
a2
两个表达式都是0,那么第二个表达式实际上是一个全局非分段解

所以我的第一个问题是:我能让sympy给我非分段解吗?(通过设置某些选项或任何其他内容)

不管上述可能性如何,既然我可以接受
a1
不等于
a2
(这是一个没有兴趣的极限情况),有没有办法告诉sympy这种假设?(同样是为了得到非分段解)

提前感谢一位sympy新手


对于同一个问题,Maxima直接给出了非分段的解决方案。

有一个默认为“分段”的关键字conds。它也可以设置为“单独”或“无”。但是,由于它是一个定积分,您也可以尝试使用关键字manual=True

如果将关键字设置为
conds='separate'
,它将返回一个带有收敛条件的不同元组。我试过了,只给出了一个解决方案。我还不知道为什么这种行为不像预期的那样。
conds='none'
关键字不应返回收敛条件,而应返回解决方案。我想这就是你要找的


另一个仅在定积分上下文中有效的选项是另一个关键字
manual=True
。这类似于手动积分,方便地“忘记”检查收敛条件。

有一个关键字
conds
,默认为“分段”。它也可以设置为“单独”或“无”。后者可能是正确的方向。但是,由于它是一个定积分,您可能也可以尝试使用关键字
manual=True
。@Uvar谢谢,在这种情况下,所有3个选项都可以工作,尽管我不清楚它们到底做什么,文档也帮不了什么忙。例如,选项
conds='separate'
应该以元组而不是分段的形式给出解决方案,但给出了唯一(但正确)的解决方案。移动到答案,因为它似乎已经完成了这项任务。不过,我和你一样对
conds='separate'
感到困惑
Piecewise((-a1*c_x*r*cos(a2)/2 - a1*c_y*r*sin(a2)/2 - a1*r**2/2 + a2*c_x*r*cos(a2)/2 + a2*c_y*r*sin(a2)/2 + a2*r**2/2, Eq(a1, a2)), (-a1*r**2/2 + a2*r**2/2 - c_x*r*sin(a1)/2 + c_x*r*sin(a2)/2 + c_y*r*cos(a1)/2 - c_y*r*cos(a2)/2, True))