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