Spaces:
Sleeping
Sleeping
from sympy.core import Basic | |
from sympy.vector.operators import gradient, divergence, curl | |
class Del(Basic): | |
""" | |
Represents the vector differential operator, usually represented in | |
mathematical expressions as the 'nabla' symbol. | |
""" | |
def __new__(cls): | |
obj = super().__new__(cls) | |
obj._name = "delop" | |
return obj | |
def gradient(self, scalar_field, doit=False): | |
""" | |
Returns the gradient of the given scalar field, as a | |
Vector instance. | |
Parameters | |
========== | |
scalar_field : SymPy expression | |
The scalar field to calculate the gradient of. | |
doit : bool | |
If True, the result is returned after calling .doit() on | |
each component. Else, the returned expression contains | |
Derivative instances | |
Examples | |
======== | |
>>> from sympy.vector import CoordSys3D, Del | |
>>> C = CoordSys3D('C') | |
>>> delop = Del() | |
>>> delop.gradient(9) | |
0 | |
>>> delop(C.x*C.y*C.z).doit() | |
C.y*C.z*C.i + C.x*C.z*C.j + C.x*C.y*C.k | |
""" | |
return gradient(scalar_field, doit=doit) | |
__call__ = gradient | |
__call__.__doc__ = gradient.__doc__ | |
def dot(self, vect, doit=False): | |
""" | |
Represents the dot product between this operator and a given | |
vector - equal to the divergence of the vector field. | |
Parameters | |
========== | |
vect : Vector | |
The vector whose divergence is to be calculated. | |
doit : bool | |
If True, the result is returned after calling .doit() on | |
each component. Else, the returned expression contains | |
Derivative instances | |
Examples | |
======== | |
>>> from sympy.vector import CoordSys3D, Del | |
>>> delop = Del() | |
>>> C = CoordSys3D('C') | |
>>> delop.dot(C.x*C.i) | |
Derivative(C.x, C.x) | |
>>> v = C.x*C.y*C.z * (C.i + C.j + C.k) | |
>>> (delop & v).doit() | |
C.x*C.y + C.x*C.z + C.y*C.z | |
""" | |
return divergence(vect, doit=doit) | |
__and__ = dot | |
__and__.__doc__ = dot.__doc__ | |
def cross(self, vect, doit=False): | |
""" | |
Represents the cross product between this operator and a given | |
vector - equal to the curl of the vector field. | |
Parameters | |
========== | |
vect : Vector | |
The vector whose curl is to be calculated. | |
doit : bool | |
If True, the result is returned after calling .doit() on | |
each component. Else, the returned expression contains | |
Derivative instances | |
Examples | |
======== | |
>>> from sympy.vector import CoordSys3D, Del | |
>>> C = CoordSys3D('C') | |
>>> delop = Del() | |
>>> v = C.x*C.y*C.z * (C.i + C.j + C.k) | |
>>> delop.cross(v, doit = True) | |
(-C.x*C.y + C.x*C.z)*C.i + (C.x*C.y - C.y*C.z)*C.j + | |
(-C.x*C.z + C.y*C.z)*C.k | |
>>> (delop ^ C.i).doit() | |
0 | |
""" | |
return curl(vect, doit=doit) | |
__xor__ = cross | |
__xor__.__doc__ = cross.__doc__ | |
def _sympystr(self, printer): | |
return self._name | |