Начнем с того, что работает:
restart:
with(Physics):
Setup(noncommutativeprefix = {A, B}):
expand((A+B)^2);
дает
A^2+A*B+B*A+B^2
Maple понимает, что A и B не ходят на работу. Теперь давайте расширим их сумму в ряд Тейлора и расширим его:
restart:
with(Physics):
Setup(noncommutativeprefix = {A, B}):
S := convert(taylor(exp((A+B)*delta), delta = 0, 3), polynom);
дает
1 2 2
S := 1 + (A + B) delta + - (A + B) delta
2
а потом
expand(S);
дает
1 2 2 2 1 2 2
1 + delta A + delta B + - A delta + A B delta + - B delta
2 2
Maple больше не понимает, что A и B не ходят на работу. Ясно (?) Я не знаю, как правильно использовать клен. Как мне заставить клен распознавать, что A и B не ходят на работу в этом контексте? это обсуждение обсуждается здесь: http://www.mapleprimes.com/questions/95808-Noncommutative-Operators, в справке по клену и в других местах, я уверен ...
Я должен добавить (очевидно), что следующее работает, но становится некрасиво. должен быть лучший способ:
restart;
unassign(`&*`); define(`&*`, multilinear, zero = 0, identity = 1, flat);
constants := constants, lambda;
No := 3;
S := convert(taylor(exp((A+B)*delta), delta = 0, No), polynom);
1 2 2
S := 1 + (A + B) delta + - (A + B) delta
2
S := subs((A+B)^2 = `&*`(A+B, A+B), (A+B)^3 = `&*`(`&*`(A+B, A+B), A+B), (A+B)^4 = `&*`(`&*`(`&*`(A+B, A+B), A+B), A+B), S);
S := 1 + (A + B) delta
1 2
+ - (A &* A + A &* B + B &* A + B &* B) delta
2
simplify(S);
1 2 1 2
1 + delta A + delta B + - delta (A &* A) + - delta (A &* B)
2 2
1 2 1 2
+ - delta (B &* A) + - delta (B &* B)
2 2
definemore(`&*`, `&*`(A, A) = A^2, `&*`(B, B) = B^2, `&*`(A, B) = AB, `&*`(B, A) = BA);
simplify(S);
1 2 2 1 2 2 1 2
1 + delta A + delta B + - A delta + - B delta + - AB delta
2 2 2
1 2
+ - BA delta
2
Сейчас использую клен 17.
Изменить: вот продолжение вышеупомянутого вопроса, теперь с обратной связью Эдгардо:
Я пытаюсь выполнить следующий расчет, используя Gtaylor:
with(Physics);
Setup(noncommutativeprefix = {A, B});
exp3 := convert(Gtaylor(exp((a-I*b))*delta*B), delta = 0, No), polynom);
exp5 := convert(Gtaylor(exp((a-I*b))*delta*A), delta = 0, No), polynom);
expansion := coeff(simplify(subs(delta = lambda, exp1*exp2*exp1*exp3*exp5*exp3)), lambda, No-1);
не весь код включен. exp5 и 3 - это примеры того, как выглядят все остальные exp. Нет установлено на 5, а b - дроби. Этот код работает (не подтвержден независимым кодом, но предположим, что работает), но занимает очень много времени. Есть ли способ ускорить это?