123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- """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()
|