1
Я пытаюсь использовать Дирак Бра и кет в Maxima, используя код здесь http://raoul.koalatux.ch/sites/ladderoperator/ladder_operator.htmlправило Облегчение не применяется должным образом
declare(bra, nonscalar);
declare(ket, nonscalar);
dotscrules:true;
matchdeclare(m,lambda([t],featurep(t,integer)));
matchdeclare(n,lambda([t],featurep(t,integer)));
tellsimp(bra(m).ket(n), kron_delta(m,n));
Для большинства выражений работает:
bra(0) . ket(0);
ket(1) . bra(0) . ket(0);
bra(1) . ket(1) . bra(0) . ket(0);
упрощают правильно, но
bra(1) . ket(1) . bra(0);
не может быть упрощен до бюстгальтера (0). Как я могу заставить Maxima упростить этот случай?
Отлично, что работает, но почему мне нужно переопределить ассоциативность '.'? – cwitte
Я думаю, '.' не является ассоциативным. Рассмотрим этот пример '[a, b]: [[1, 0], [0, 1]]; a. (b. b); (a. B). b; ' – slitvinov
Из руководства: Опционная переменная: dotassoc Значение по умолчанию: true Когда dotassoc истинно, выражение (A.B) .C упрощается до A. (B.C). – cwitte