Where can one find the source code of the Mathematica function Curl? Alternatively, how can one define a function the argument of which is restricted to be a 3D vector function of three variables named x, y, z?
Asked
Active
Viewed 195 times
0
1 Answers
2
I would define
curl[u_?(VectorQ[#] && Length[#] == 3 &)] := {D[u[[3]], y] -
D[u[[2]], z], D[u[[1]], z] - D[u[[3]], x],
D[u[[2]], x] - D[u[[1]], y]}
EDIT
This function is intended to deal specifically with lists of length 3. It can handle symbolic inputs, but these must be explicitly defined as having 3 components.
curl[{fx[x, y, z], fy[x, y, z], fz[x, y, z]}]
{-Derivative[0, 0, 1][fy][x, y, z] + Derivative[0, 1, 0][fz][x, y, z], Derivative[0, 0, 1][fx][x, y, z] - Derivative[1, 0, 0][fz][x, y, z], -Derivative[0, 1, 0][fx][x, y, z] + Derivative[1, 0, 0][fy][x, y, z]}
This is certainly not the only way (and may not be the best way) of defining curl, but matched the OP's request for an implementation that applied to 3-vectors. (I assumed that the originator was aware of the built-in Curl and wanted something different).
mikado
- 16,741
- 2
- 20
- 54
-
Thank you, I see now how to specify u, thanks to the use of #. – André Bellaïche Aug 26 '16 at 21:15
-
Is it possible to modify this definition in order curl works like
D? I mean: With D, you may do some formal calculus. TryD[f[x], x]orD[f[x, y, z], {{x, y, z}, 1}]orD[2 f[x], x] - 2 D[f[x], x]. But if you entercurl[2 f[x]] - 2 curl[f(x]], you don't get 0. Even if you use Expand, Simplify, etc. you are stuck with your input. – André Bellaïche Aug 26 '16 at 22:47 -
@AndréBellaïche you would have to start expanding the program by adding definitions for
curl. – QuantumDot Aug 27 '16 at 18:31
narguments. See here: http://mathematica.stackexchange.com/a/85812/2079. – george2079 Aug 26 '16 at 20:23