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

时间:2015-08-02 20:46:21

标签: 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'中没有奇点。

1 个答案:

答案 0 :(得分:2)

奇点的存在不是符号简化的障碍。 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 

嗯......根据documentation,这是a的大值的正确结果,这是预期的行为。如果你希望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,这是一个。

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