如何限制 Sage 中的符号变量范围

How to restrict symbolic variable range in Sage

我正在尝试简化包含奇点的实数表达式。有没有办法限制变量范围以排除奇异性,从而允许符号简化?例如,

var('a b c')
b = a / (1 - a^2)
c = 2*b / (1 + sqrt(1+4*b^2) )
c

如果 'a' 限制为 -1 < a < 1,则 'b' 中没有奇点。

奇点的存在并不妨碍符号的简化。 Sage 可以很好地简化有理函数(通常具有奇点)。

我怀疑您尝试过 c.simplify() 但对结果感到失望。作为 documentation says,这不是您想要的命令。 c.simplify_full()是一个更好的通用简化例程:

c.simplify_full()

-2*a/(a^2 + (a^2 - 1)*sqrt((a^4 + 2*a^2 + 1)/(a^4 - 2*a^2 + 1)) - 1)

但要完成更多工作,您必须具体说明要简化的内容。这里是偏旁表达式,我们试试

c.canonicalize_radical() 

-1/a 

嗯...这是大 a 值的正确结果,根据 documentation,这是预期的行为。如果你想让 Sage 在 a 很小的时候选择正确的分支,让 a= 1/x。然后 Sage 将采用大 x 的分支,因此采用小 a 的分支。

var('a b c x')
a = 1/x
b = a / (1 - a^2)
c = 2*b / (1 + sqrt(1+4*b^2) )
c.canonicalize_radical()

输出:1/x,即a.


直接回答您关于限制的问题:assume(a>-1, a<1) 在一定程度上做到了这一点。但是,并非所有命令都使用来自 assume 的信息;特别是 canonicalize_radical 没有。