123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- """ This module contains the Mathieu functions.
- """
- from sympy.core.function import Function, ArgumentIndexError
- from sympy.functions.elementary.miscellaneous import sqrt
- from sympy.functions.elementary.trigonometric import sin, cos
- class MathieuBase(Function):
- """
- Abstract base class for Mathieu functions.
- This class is meant to reduce code duplication.
- """
- unbranched = True
- def _eval_conjugate(self):
- a, q, z = self.args
- return self.func(a.conjugate(), q.conjugate(), z.conjugate())
- class mathieus(MathieuBase):
- r"""
- The Mathieu Sine function $S(a,q,z)$.
- Explanation
- ===========
- This function is one solution of the Mathieu differential equation:
- .. math ::
- y(x)^{\prime\prime} + (a - 2 q \cos(2 x)) y(x) = 0
- The other solution is the Mathieu Cosine function.
- Examples
- ========
- >>> from sympy import diff, mathieus
- >>> from sympy.abc import a, q, z
- >>> mathieus(a, q, z)
- mathieus(a, q, z)
- >>> mathieus(a, 0, z)
- sin(sqrt(a)*z)
- >>> diff(mathieus(a, q, z), z)
- mathieusprime(a, q, z)
- See Also
- ========
- mathieuc: Mathieu cosine function.
- mathieusprime: Derivative of Mathieu sine function.
- mathieucprime: Derivative of Mathieu cosine function.
- References
- ==========
- .. [1] https://en.wikipedia.org/wiki/Mathieu_function
- .. [2] https://dlmf.nist.gov/28
- .. [3] https://mathworld.wolfram.com/MathieuFunction.html
- .. [4] https://functions.wolfram.com/MathieuandSpheroidalFunctions/MathieuS/
- """
- def fdiff(self, argindex=1):
- if argindex == 3:
- a, q, z = self.args
- return mathieusprime(a, q, z)
- else:
- raise ArgumentIndexError(self, argindex)
- @classmethod
- def eval(cls, a, q, z):
- if q.is_Number and q.is_zero:
- return sin(sqrt(a)*z)
- # Try to pull out factors of -1
- if z.could_extract_minus_sign():
- return -cls(a, q, -z)
- class mathieuc(MathieuBase):
- r"""
- The Mathieu Cosine function $C(a,q,z)$.
- Explanation
- ===========
- This function is one solution of the Mathieu differential equation:
- .. math ::
- y(x)^{\prime\prime} + (a - 2 q \cos(2 x)) y(x) = 0
- The other solution is the Mathieu Sine function.
- Examples
- ========
- >>> from sympy import diff, mathieuc
- >>> from sympy.abc import a, q, z
- >>> mathieuc(a, q, z)
- mathieuc(a, q, z)
- >>> mathieuc(a, 0, z)
- cos(sqrt(a)*z)
- >>> diff(mathieuc(a, q, z), z)
- mathieucprime(a, q, z)
- See Also
- ========
- mathieus: Mathieu sine function
- mathieusprime: Derivative of Mathieu sine function
- mathieucprime: Derivative of Mathieu cosine function
- References
- ==========
- .. [1] https://en.wikipedia.org/wiki/Mathieu_function
- .. [2] https://dlmf.nist.gov/28
- .. [3] https://mathworld.wolfram.com/MathieuFunction.html
- .. [4] https://functions.wolfram.com/MathieuandSpheroidalFunctions/MathieuC/
- """
- def fdiff(self, argindex=1):
- if argindex == 3:
- a, q, z = self.args
- return mathieucprime(a, q, z)
- else:
- raise ArgumentIndexError(self, argindex)
- @classmethod
- def eval(cls, a, q, z):
- if q.is_Number and q.is_zero:
- return cos(sqrt(a)*z)
- # Try to pull out factors of -1
- if z.could_extract_minus_sign():
- return cls(a, q, -z)
- class mathieusprime(MathieuBase):
- r"""
- The derivative $S^{\prime}(a,q,z)$ of the Mathieu Sine function.
- Explanation
- ===========
- This function is one solution of the Mathieu differential equation:
- .. math ::
- y(x)^{\prime\prime} + (a - 2 q \cos(2 x)) y(x) = 0
- The other solution is the Mathieu Cosine function.
- Examples
- ========
- >>> from sympy import diff, mathieusprime
- >>> from sympy.abc import a, q, z
- >>> mathieusprime(a, q, z)
- mathieusprime(a, q, z)
- >>> mathieusprime(a, 0, z)
- sqrt(a)*cos(sqrt(a)*z)
- >>> diff(mathieusprime(a, q, z), z)
- (-a + 2*q*cos(2*z))*mathieus(a, q, z)
- See Also
- ========
- mathieus: Mathieu sine function
- mathieuc: Mathieu cosine function
- mathieucprime: Derivative of Mathieu cosine function
- References
- ==========
- .. [1] https://en.wikipedia.org/wiki/Mathieu_function
- .. [2] https://dlmf.nist.gov/28
- .. [3] https://mathworld.wolfram.com/MathieuFunction.html
- .. [4] https://functions.wolfram.com/MathieuandSpheroidalFunctions/MathieuSPrime/
- """
- def fdiff(self, argindex=1):
- if argindex == 3:
- a, q, z = self.args
- return (2*q*cos(2*z) - a)*mathieus(a, q, z)
- else:
- raise ArgumentIndexError(self, argindex)
- @classmethod
- def eval(cls, a, q, z):
- if q.is_Number and q.is_zero:
- return sqrt(a)*cos(sqrt(a)*z)
- # Try to pull out factors of -1
- if z.could_extract_minus_sign():
- return cls(a, q, -z)
- class mathieucprime(MathieuBase):
- r"""
- The derivative $C^{\prime}(a,q,z)$ of the Mathieu Cosine function.
- Explanation
- ===========
- This function is one solution of the Mathieu differential equation:
- .. math ::
- y(x)^{\prime\prime} + (a - 2 q \cos(2 x)) y(x) = 0
- The other solution is the Mathieu Sine function.
- Examples
- ========
- >>> from sympy import diff, mathieucprime
- >>> from sympy.abc import a, q, z
- >>> mathieucprime(a, q, z)
- mathieucprime(a, q, z)
- >>> mathieucprime(a, 0, z)
- -sqrt(a)*sin(sqrt(a)*z)
- >>> diff(mathieucprime(a, q, z), z)
- (-a + 2*q*cos(2*z))*mathieuc(a, q, z)
- See Also
- ========
- mathieus: Mathieu sine function
- mathieuc: Mathieu cosine function
- mathieusprime: Derivative of Mathieu sine function
- References
- ==========
- .. [1] https://en.wikipedia.org/wiki/Mathieu_function
- .. [2] https://dlmf.nist.gov/28
- .. [3] https://mathworld.wolfram.com/MathieuFunction.html
- .. [4] https://functions.wolfram.com/MathieuandSpheroidalFunctions/MathieuCPrime/
- """
- def fdiff(self, argindex=1):
- if argindex == 3:
- a, q, z = self.args
- return (2*q*cos(2*z) - a)*mathieuc(a, q, z)
- else:
- raise ArgumentIndexError(self, argindex)
- @classmethod
- def eval(cls, a, q, z):
- if q.is_Number and q.is_zero:
- return -sqrt(a)*sin(sqrt(a)*z)
- # Try to pull out factors of -1
- if z.could_extract_minus_sign():
- return -cls(a, q, -z)
|