|
"""Known matrices related to physics""" |
|
|
|
from sympy.core.numbers import I |
|
from sympy.matrices.dense import MutableDenseMatrix as Matrix |
|
from sympy.utilities.decorator import deprecated |
|
|
|
|
|
def msigma(i): |
|
r"""Returns a Pauli matrix `\sigma_i` with `i=1,2,3`. |
|
|
|
References |
|
========== |
|
|
|
.. [1] https://en.wikipedia.org/wiki/Pauli_matrices |
|
|
|
Examples |
|
======== |
|
|
|
>>> from sympy.physics.matrices import msigma |
|
>>> msigma(1) |
|
Matrix([ |
|
[0, 1], |
|
[1, 0]]) |
|
""" |
|
if i == 1: |
|
mat = ( |
|
(0, 1), |
|
(1, 0) |
|
) |
|
elif i == 2: |
|
mat = ( |
|
(0, -I), |
|
(I, 0) |
|
) |
|
elif i == 3: |
|
mat = ( |
|
(1, 0), |
|
(0, -1) |
|
) |
|
else: |
|
raise IndexError("Invalid Pauli index") |
|
return Matrix(mat) |
|
|
|
|
|
def pat_matrix(m, dx, dy, dz): |
|
"""Returns the Parallel Axis Theorem matrix to translate the inertia |
|
matrix a distance of `(dx, dy, dz)` for a body of mass m. |
|
|
|
Examples |
|
======== |
|
|
|
To translate a body having a mass of 2 units a distance of 1 unit along |
|
the `x`-axis we get: |
|
|
|
>>> from sympy.physics.matrices import pat_matrix |
|
>>> pat_matrix(2, 1, 0, 0) |
|
Matrix([ |
|
[0, 0, 0], |
|
[0, 2, 0], |
|
[0, 0, 2]]) |
|
|
|
""" |
|
dxdy = -dx*dy |
|
dydz = -dy*dz |
|
dzdx = -dz*dx |
|
dxdx = dx**2 |
|
dydy = dy**2 |
|
dzdz = dz**2 |
|
mat = ((dydy + dzdz, dxdy, dzdx), |
|
(dxdy, dxdx + dzdz, dydz), |
|
(dzdx, dydz, dydy + dxdx)) |
|
return m*Matrix(mat) |
|
|
|
|
|
def mgamma(mu, lower=False): |
|
r"""Returns a Dirac gamma matrix `\gamma^\mu` in the standard |
|
(Dirac) representation. |
|
|
|
Explanation |
|
=========== |
|
|
|
If you want `\gamma_\mu`, use ``gamma(mu, True)``. |
|
|
|
We use a convention: |
|
|
|
`\gamma^5 = i \cdot \gamma^0 \cdot \gamma^1 \cdot \gamma^2 \cdot \gamma^3` |
|
|
|
`\gamma_5 = i \cdot \gamma_0 \cdot \gamma_1 \cdot \gamma_2 \cdot \gamma_3 = - \gamma^5` |
|
|
|
References |
|
========== |
|
|
|
.. [1] https://en.wikipedia.org/wiki/Gamma_matrices |
|
|
|
Examples |
|
======== |
|
|
|
>>> from sympy.physics.matrices import mgamma |
|
>>> mgamma(1) |
|
Matrix([ |
|
[ 0, 0, 0, 1], |
|
[ 0, 0, 1, 0], |
|
[ 0, -1, 0, 0], |
|
[-1, 0, 0, 0]]) |
|
""" |
|
if mu not in (0, 1, 2, 3, 5): |
|
raise IndexError("Invalid Dirac index") |
|
if mu == 0: |
|
mat = ( |
|
(1, 0, 0, 0), |
|
(0, 1, 0, 0), |
|
(0, 0, -1, 0), |
|
(0, 0, 0, -1) |
|
) |
|
elif mu == 1: |
|
mat = ( |
|
(0, 0, 0, 1), |
|
(0, 0, 1, 0), |
|
(0, -1, 0, 0), |
|
(-1, 0, 0, 0) |
|
) |
|
elif mu == 2: |
|
mat = ( |
|
(0, 0, 0, -I), |
|
(0, 0, I, 0), |
|
(0, I, 0, 0), |
|
(-I, 0, 0, 0) |
|
) |
|
elif mu == 3: |
|
mat = ( |
|
(0, 0, 1, 0), |
|
(0, 0, 0, -1), |
|
(-1, 0, 0, 0), |
|
(0, 1, 0, 0) |
|
) |
|
elif mu == 5: |
|
mat = ( |
|
(0, 0, 1, 0), |
|
(0, 0, 0, 1), |
|
(1, 0, 0, 0), |
|
(0, 1, 0, 0) |
|
) |
|
m = Matrix(mat) |
|
if lower: |
|
if mu in (1, 2, 3, 5): |
|
m = -m |
|
return m |
|
|
|
|
|
|
|
minkowski_tensor = Matrix( ( |
|
(1, 0, 0, 0), |
|
(0, -1, 0, 0), |
|
(0, 0, -1, 0), |
|
(0, 0, 0, -1) |
|
)) |
|
|
|
|
|
@deprecated( |
|
""" |
|
The sympy.physics.matrices.mdft method is deprecated. Use |
|
sympy.DFT(n).as_explicit() instead. |
|
""", |
|
deprecated_since_version="1.9", |
|
active_deprecations_target="deprecated-physics-mdft", |
|
) |
|
def mdft(n): |
|
r""" |
|
.. deprecated:: 1.9 |
|
|
|
Use DFT from sympy.matrices.expressions.fourier instead. |
|
|
|
To get identical behavior to ``mdft(n)``, use ``DFT(n).as_explicit()``. |
|
""" |
|
from sympy.matrices.expressions.fourier import DFT |
|
return DFT(n).as_mutable() |
|
|