2015-01-16 5 views
3

Как я могу объединить или развернуть экспоненты в выражении в шалфе? Другими словами, как я могу заставить мудреца переписать выражение от (a**b)**c до a**(b*c) или наоборот?sage math: как объединить или развернуть экспоненты в символическом выражении?

Примеры:

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) 

Update:

simplify_exp (ответ codelion в) работает для преобразования (a**b)**c в a**(b*c), но не наоборот. Можно ли заставить шалфея также расширять экспоненты?

ответ

3
  1. Начиная с 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.

  2. Я не знаю, есть ли встроенная функция для преобразования 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 
    

    Обратите внимание, что если вы не указать шаг, он выиграл» t всегда выбирайте первый, который отображается.

    sage: power_step(2^(x*y)) 
    (2^y)^x 
    sage: power_step(x^(2*y)) 
    (x^2)^y 
    
2

Вы можете использовать функцию simplify_exp(). Так для примера сделайте следующее:

sage: a.simplify_exp() 
x^(2*y) 
+0

Это заботится о одном направлении, спасибо, но как расширить показатели? Как преобразовать b в a? – Oleg

 Смежные вопросы

  • Нет связанных вопросов^_^