gusucode.com > qit_matlab_0.10.0工具箱源码程序 > qit/utils/angular_momentum.m

    function J = angular_momentum(n)
% ANGULAR_MOMENTUM  Angular momentum matrices.
%  J = {Jx, Jy, Jz} = angular_momentum(d)
%
%  Returns the angular momentum matrices \vec(J)/\hbar
%  for the d-dimensional subspace defined by the
%  quantum number j == (d-1)/2, as a cell vector.

% Ville Bergholm 2009-2010


global qit;

if (n < 1)
  error('Dimension must be one or greater.')
end

% check cache first
if (length(qit.angular_momentum) >= n && length(qit.angular_momentum{n}) > 0)
  J = qit.angular_momentum{n};
  return;
end

j = (n-1)/2; % angular momentum quantum number, n == 2*j + 1

% raising operator in subspace J^2 = j*(j+1)
m = j;
Jplus = sparse(n,n);
for k=1:n-1
  m = m - 1;
  Jplus(k, k+1) = sqrt(j*(j+1) -m*(m+1));
end

% lowering operator
Jminus = Jplus';

% Jplus  = Jx + i*Jy
% Jminus = Jx - i*Jy

J = cell(1,3);
J{1} = 0.5*(Jplus + Jminus);
J{2} = 0.5*i*(Jminus - Jplus);
J{3} = spdiags([j:-1:-j].', 0, n, n);


% store them in the cache
qit.angular_momentum{n} = J;