Пакет Physics

 

Версия для печати

Угловой момент

и

Задача 11.1

Рассмотрим операторы углового момента , , и в квантовой механике.

Проверим, что коммутатор 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) );

Задача 11.2

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

Для этого зададим размерность пространства = 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);