177 lines
3.7 KiB
Python
177 lines
3.7 KiB
Python
|
"""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 using the convention (+,-,-,-) used in the Quantum Field
|
||
|
#Theory
|
||
|
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()
|