2016-08-16 4 views
1

Я хочу определить правило для символа, например «a», например: $ a^3 = b a^2 + c a + d $ и заставить клен, чтобы скрыть все мои выражения, содержащие $ a $, к выражению, содержащему степени $ a $, только до квадрата. Я попробовал «applyrule», но даже для $ a^4 $ клен, похоже, не в состоянии это сделать. Есть ли способ заставить такое правило упрощения?Правила упрощения для клена

ответ

0
simplify(a^4, {a^3 = b*a^2+c*a+d}); 

Это называется "упрощать с боковыми отношений." Коричневые фигурные скобки вокруг второго аргумента важны.

1

Вы можете выполнить это с помощью упрощения с боковыми отношениями, что означает использование команды simplify с правилом, появляющимся в определенной форме необязательного аргумента.

Например,

restart; 

rule:=a^3=b*a^2+c*a+d: 

simplify(a^2, {rule}); 

              2 
              a 

simplify(a^3, {rule}); 

            2 
            a b + a c + d 

simplify(a^4, {rule}); 

           2  2 
          (b + c) a + (b c + d) a + b d 

Мы можем продемонстрировать правильность предыдущего результата, используя algsubs. Обратите внимание, что algsubs может применяться несколько раз, чтобы выполнить это.

algsubs(rule, a^4); 

            3  2 
            a b + a c + a d 

algsubs(rule, %); 

           2  2 
          (b + c) a + (b c + d) a + b d 

ans1 := simplify(a^7, {rule}): 

ans2 := algsubs(rule, algsubs(rule, algsubs(rule, algsubs(rule, a^7)))): 

normal(ans1 - ans2); 

              0 

Обратите внимание, что упрощение с побочными отношениями может также работать для выражений, которые не только многочлены (в этом случае было бы еще труднее использовать algsubs, чтобы получить тот же эффект).

expr := sin(a^4) + a^3 + sqrt(a^7); 

             4  3  7 1/2 
          expr := sin(a) + a + (a) 

simplify(expr, {rule}): 

lprint(%); 

       b*a^2+c*a+d+sin((b^2+c)*a^2+(b*c+d)*a+b*d)+ 
       ((b^5+4*b^3*c+3*b^2*d+3*b*c^2+2*c*d)*a^2+ 
       (b^4*c+b^3*d+3*b^2*c^2+4*b*c*d+c^3+d^2)* 
       a+d*(b^4+3*b^2*c+2*b*d+c^2))^(1/2) 
Смежные вопросы