Угловой момент
и
Рассмотрим операторы углового момента ,
,
и
в квантовой механике.
Проверим, что коммутатор Commutator с любой из компонент
равен нулю. Для этого с помощью пакета Vectors (vectorpostfix identifier – это '_') сконструируем 3D-представление вектора – квантового оператора
– и положим, что
,
,
,
тоже являются квантовыми операторами, как
,
и их компоненты:
- restart;
with(Physics);
with(Physics:-Vectors);
Setup(math = true);
Чтобы задать компоненты и
как квантовые операторы, достаточно положить
и
такими:
- Setup(quantumoperators={L_, L, r_, x,y,z, p_, p});
Тогда для и для самого
, записанного через векторые операторы
и
, имеем:
- LL := L_ . L_;
- L_ := r_ &x p_;
,
где
- r_ := x*_i + y*_j + z*_k;
- p_ := p[x]*_i + p[y]*_j + p[z]*_k;
Правила коммутации (Commutator) для компонент есть следствие правил коммутации Commutator для компонент
и
. Эти правила можно установить с помощью Setup, вводя все коммутаторы между любыми двумя компонентами из набора
, например в:
- Setup(algebrarules = %Commutator(x, p[x]) = I,
%Commutator(x, p[y]) = 0, %Commutator(x, y) = 0, ... )
Удобный выход в подобной этой ситуации, когда надо ввести много коммутаторов, – работать с индексными (тензорными) обозначениями (см. задачу 2 ниже) или создавать процедуру индексации для Matrix, например:
- algebra := (i,j) -> (
%Commutator(Component(r_, i), Component(p_, j)) = I*KroneckerDelta[i,j],
%Commutator(Component(r_, i), Component(r_, j)) = 0,
%Commutator(Component(p_, i), Component(p_, j)) = 0);
После этого коммутаторы генерируются конструктором Matrix и полную матрицу Matrix можно передать в Setup:
- Matrix(3, 3, algebra);
- Setup(%);
Компоненты :
- L[x] := Component(L_, 1);
- L[y] := Component(L_, 2);
- L[z] := Component(L_, 3);
Для проверки коммутации с каждой из
,
,
недостаточно применить expansion для Commutator:
- %Commutator(LL, L[x]);# инертное представление для Commutator (LL,Lx)
- value(%); # активирует инертное вычисление
- zero := expand(%);
Для проверки того, что это выражение равно 0, следует учесть правила коммутации:
- Setup(alg);
Для этого используем Simplify:
- Simplify(zero);
- %Commutator(LL, Ly);
- Simplify( % );
- Simplify( Commutator(LL, Lz) );
Используя тензорные обозначения для представления компонент квантового оператора , покажите, что
.
Для этого зададим размерность пространства = 3 и вид – евклидово, тогда тензоры будут настоящими 3D-тензорами. В Setup зададим индексы тензора как lowercaselatin (строчные латинские буквы):
- Setup(dimension = 3, signature = `+`, spacetimeindices = lowercaselatin, quiet);
Для задания правил коммутации Commutator для r и p используем тензорные обозначения и применим Simplify для получения результата умножения с учетом правил суммирования по повторяющимся индексам. Определим (Define) r, p как тензоры этого 3D-евклидова пространства:
- Define(r, p);
Установим правила коммутации (Commutator) для алгебры тензорных обозначений. Для этого сотрем предыдущие установки правил алгебры квантовых операторов (опция redo в Setup; хотя в данном примере это не обязательно, но бывает нужно):
- Setup(redo, quantumoperators = '{L, L_, r, p}',
algebrarules = {%Commutator(r[i],p[j]) = I*kd_[i,j],
%Commutator(r[i], r[j]) = 0, %Commutator(p[i], p[j]) = 0});
При записи тензорных обозначений учтем сказанное в компактных правилах алгебры: есть только три вместо 15 правил коммутации. Проверим их работу:
- %Commutator(r[m], p[n]); # инертное представление
- value(%); # активирует инертное представление
- Commutator(r[m], r[n]);
- Commutator(p[m], p[n]);
Теперь введем и для членов
в терминах
и
. Псевдотензор Леви–Чивиты обозначим сокращением ep_
- rule:= %Commutator(L[i], L[j]) = I*'ep_[i,j,k]'*L[k];
- L[i] := ep_[i,m,n] * r[m] * p[n];
- L[j] := subs(i=j, L[i]);
- L[k] := subs(i=k, L[i]);
В этом месте задается .
- rule;
Чтобы увидеть истинное значение, это правило раскладывается на компоненты, а затем его Simplify:
- expand(rule);
- Simplify(%);
Или можно применить команду Simplify к этому правилу без разложения:
- Simplify(rule);