圣人数学:如何在符号表达式中组合或扩展指数?
sage math: how to combine or expand exponents in a symbolic expression?
如何在 sage 中组合或扩展表达式中的指数?换句话说,我如何让 sage 将表达式从 (a**b)**c
重写为 a**(b*c)
,反之亦然?
示例:
sage: var('x y')
(x, y)
sage: assume(x, 'rational')
sage: assume(y, 'rational')
sage: combine_exponents( (x^2)^y )
x^(2*y)
sage: assume(x > 0)
sage: expand_exponents( x^(1/3*y) )
(x^y)^(1/3)
我已经尝试过的:
sage: b = x^(2*y)
sage: a = (x^2)^y
sage: bool(a == b)
True
sage: a
(x^2)^y
sage: simplify(a)
(x^2)^y
sage: expand(a)
(x^2)^y
sage: b
x^(2*y)
sage: expand(b)
x^(2*y)
更新:
simplify_exp
(codelion 的回答)可以将 (a**b)**c
转换为 a**(b*c)
,但反之则不行。是否有可能让鼠尾草也扩展指数?
您可以使用simplify_exp()
功能。因此,对于您的示例,请执行以下操作:
sage: a.simplify_exp()
x^(2*y)
从Sage 6.5开始,将a
转化为b
,
使用方法 canonicalize_radical
.
sage: a.canonicalize_radical()
x^(2*y)
注意这四种方法simplify_exp
,exp_simplify
,
simplify_radical
、radical_simplify
,效果一样,
正在弃用 canonicalize_radical
。
见 Sage trac ticket #11912.
不知道有没有内置函数
将 b
转换为 a
.
您可以像这样定义自己的函数:
def power_step(expr, step=None):
a, b = SR.var('a'), SR.var('b')
if str(expr.operator()) == str((a^b).operator()):
aa, mm = expr.operands()
if step is None:
if str(mm.operator()) == str((a*b).operator()):
bb = mm.operands().pop()
return (aa^bb)^(mm/bb)
else:
return expr
return (aa^step)^(mm/step)
else:
if step is None: return expr
else: return (expr^step)^(1/step)
然后你可以将供电分解为步骤:
sage: x, y = var('x y')
sage: power_step(x^(2*y),y)
(x^y)^2
sage: power_step(x^(2*y),2)
(x^2)^y
请注意,如果您不指定步骤,它不会总是选择
第一个显示的。
sage: power_step(2^(x*y))
(2^y)^x
sage: power_step(x^(2*y))
(x^2)^y
如何在 sage 中组合或扩展表达式中的指数?换句话说,我如何让 sage 将表达式从 (a**b)**c
重写为 a**(b*c)
,反之亦然?
示例:
sage: var('x y')
(x, y)
sage: assume(x, 'rational')
sage: assume(y, 'rational')
sage: combine_exponents( (x^2)^y )
x^(2*y)
sage: assume(x > 0)
sage: expand_exponents( x^(1/3*y) )
(x^y)^(1/3)
我已经尝试过的:
sage: b = x^(2*y)
sage: a = (x^2)^y
sage: bool(a == b)
True
sage: a
(x^2)^y
sage: simplify(a)
(x^2)^y
sage: expand(a)
(x^2)^y
sage: b
x^(2*y)
sage: expand(b)
x^(2*y)
更新:
simplify_exp
(codelion 的回答)可以将 (a**b)**c
转换为 a**(b*c)
,但反之则不行。是否有可能让鼠尾草也扩展指数?
您可以使用simplify_exp()
功能。因此,对于您的示例,请执行以下操作:
sage: a.simplify_exp()
x^(2*y)
从Sage 6.5开始,将
a
转化为b
, 使用方法canonicalize_radical
.sage: a.canonicalize_radical() x^(2*y)
注意这四种方法
simplify_exp
,exp_simplify
,simplify_radical
、radical_simplify
,效果一样, 正在弃用canonicalize_radical
。 见 Sage trac ticket #11912.不知道有没有内置函数 将
b
转换为a
.您可以像这样定义自己的函数:
def power_step(expr, step=None): a, b = SR.var('a'), SR.var('b') if str(expr.operator()) == str((a^b).operator()): aa, mm = expr.operands() if step is None: if str(mm.operator()) == str((a*b).operator()): bb = mm.operands().pop() return (aa^bb)^(mm/bb) else: return expr return (aa^step)^(mm/step) else: if step is None: return expr else: return (expr^step)^(1/step)
然后你可以将供电分解为步骤:
sage: x, y = var('x y') sage: power_step(x^(2*y),y) (x^y)^2 sage: power_step(x^(2*y),2) (x^2)^y
请注意,如果您不指定步骤,它不会总是选择 第一个显示的。
sage: power_step(2^(x*y)) (2^y)^x sage: power_step(x^(2*y)) (x^2)^y