我正在尝试简化包含奇点的真实表达式。有没有办法限制变量范围以排除奇点,从而允许符号简化?例如,
var('a b c')
b = a / (1 - a^2)
c = 2*b / (1 + sqrt(1+4*b^2) )
c
被'a'限制为-1< a< 1,'b'中没有奇点。
答案 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
没有。