# Creating the Nabla operator (also known as Del operator) as an operator

How can I define the nabla operator (also known as Del operator) as a an operator, acting on everything to the right of the operator! Also taking \[Del]^2 would give the second derivivates.

I wish to be able to write \[Del]f[x,y,z] and then evaluate it according to the nabla operator.

What I have now, is just a simple expression:

Del = {D[#, x], D[#, y], D[#, z]} &


But it would be nice to be able to use the actual \[Del] for notation.

I've looked at different examples including: http://reference.wolfram.com/language/ref/NonCommutativeMultiply.html

But I really don't understand any of what's going on there.

• I wonder if it is possible to use Del for the divergence and curl operators. The direct substitution of dot and cross products do not work. Feb 4 '15 at 15:54
• Your definition of the square is not consistent with conventional practice, where it would give the laplacian instead of just a vector of second derivatives. I don't think it's a good idea to overload Times and Power with these interpretations. Better use clearly distinct notation to make code easier to understand.
– Jens
Mar 5 '15 at 17:24
• If you are using v10, please check details sections of Grad and Laplacian, and related Div and Curl. These symbols have new input forms quite close to what you're asking for. Mar 5 '15 at 19:51
• closely related: Having the derivative be an operator
– Kuba
Mar 9 '17 at 13:30
• Yes, that is done automatically. Try HoldForm[Curl[v, {x, y, z}]] and see how it formats. This is different from interpreting that form when you enter it. Traditional notation is ambiguous. When you are talking to a computer you want to be clear and unambiguous. Mar 9 '17 at 14:08

Well, over-pursuing similarity of Mathematica code and traditional math notation does more harm than good, still, it's possible to create a nabla operator in Mathematica, here's my approach:

(*$$PrePrint=.*)$$PrePrint = # /.
Derivative[id__][f_][args__] :>
HoldForm@D[f[args], ##] &[
Sequence @@ (DeleteCases[Transpose[{{args}, {id}}], {_, 0}] /. {x_, 1} :> x)]] &;

Clear[$$independentVariable, ▽, Δ]$$independentVariable = {x, y, z};
▽ /: ▽ f_ := Grad[f, $$independentVariable] ▽·f_ := Div[f,$$independentVariable]
▽ /: ▽\[Cross]f_ := Curl[f, $$independentVariable] ▽·▽ := Δ ▽ /: ▽^2 := Δ Δ /: Δ f_ := Laplacian[f,$$independentVariable]
CenterDot /: (v_·▽) f_ := Grad[f, $$independentVariable].v CenterDot /: (m_?MatrixQ·▽)\[Cross]f_ := TensorContract[LeviCivitaTensor.D[f, {$$independentVariable}].m\[Transpose], {2, 3}]


Usage:

▽ f[x, y, z] ▽·{f[x, y, z], g[x, y, z], h[x, y, z]} ▽\[Cross]{f[x, y, z], g[x, y, z], h[x, y, z]} ▽·▽ f[x, y, z]
▽^2 f[x, y, z]
Δ f[x, y, z] ({Subscript[v, x], Subscript[v, y], Subscript[v, z]}·▽) f[x, y, z] ({Subscript[v, x], Subscript[v, y], Subscript[v, z]}·▽){f[x, y, z], g[x, y, z],h[x, y, z]} Alst = Array[Subscript[A, ##] &, {3, 3}];
vector = #[x, y, z] & /@ {u, v, w};
test1 = (Alst·▽)\[Cross]vector Notice the · is \[CenterDot], and ▽ is \[EmptyDownTriangle] rather than \[Del].

To type ▽ easier, try the technique in this and this post.

Not sure if the solution will fail in more complicated cases.

BTW the $PrePrint function is modified from the code here. • I have merged these questions moving your answer in the process, as requested. Mar 12 '17 at 6:33 Does it not work as written? Del = {D[#, x], D[#, y], D[#, z]} &; ∇f[x, y, z] $\left\{f^{(1,0,0)}(x,y,z),f^{(0,1,0)}(x,y,z),f^{(0,0,1)}(x,y,z)\right\}$To extend this in the way that I believe you want you can use the Notation Package. First: Needs["Notation"];  Then paste and evaluate: Cell[BoxData[ RowBox[{"Notation", "[", RowBox[{ TemplateBox[{RowBox[{ SuperscriptBox["\[Del]", "n_"], "expr_"}]}, "NotationTemplateTag"], " ", "\[DoubleLongRightArrow]", " ", TemplateBox[{RowBox[{ RowBox[{"del", "[", "n_", "]"}], "[", "expr_", "]"}]}, "NotationTemplateTag"]}], "]"}]], "Input"]  Which should look like this in the Notebook: (Or enter the equivalent using the Notation Palette.) Then add these definitions: Del = del; del[n_Integer?Positive][expr_] := D[expr, {#, n}] & /@ {x, y, z}  Finally: $\left\{f^{(1,0,0)}(x,y,z),f^{(0,1,0)}(x,y,z),f^{(0,0,1)}(x,y,z)\right\}\left\{f^{(2,0,0)}(x,y,z),f^{(0,2,0)}(x,y,z),f^{(0,0,2)}(x,y,z)\right\}\left\{f^{(3,0,0)}(x,y,z),f^{(0,3,0)}(x,y,z),f^{(0,0,3)}(x,y,z)\right\}\$

• It does seem to Work for just \[del], But do you also know if there is any way to make mathematica interpret the \[Del]^2f[x,y,z] as the second derivatives of the function f[x,y,z]? Feb 3 '15 at 9:48
• @TehHO Possibly so, but my first attempt failed. I'll work on it. Feb 3 '15 at 9:58
• Well, as far as I can tell, \[Del]^2 represent Laplacian and there is no definition for \[Del]^3, see the corresponding wiki page for more details. Mar 12 '17 at 4:44

Try

grad[f_] := {D[f, x], D[f, y], D[f, z]}


then

grad[x + y]


returns

{1, 1, 0}
`