Which is the correct vector calculus notation for the Hessian?

In vector calculus, the nabla symbol $$\nabla$$ is used to denote three different operations:

• the gradient of a scalar function $$f$$ is vector field: $$\mathrm{grad}(f)=\nabla f$$
• the divergence of a vector field $$\mathbf{F}$$ is the scalar function: $$\mathrm{div}(\mathbf{F})=\nabla\cdot\mathbf{F}$$

Furthermore,

• the Laplacian of a scalar function $$f$$ is a scalar function: $$\mathrm{lap}(f)=\mathrm{div}(\mathrm{grad}(f))=\nabla\cdot(\nabla f)=\nabla^2f=\Delta f$$
• the gradient of a vector field $$\mathbf{F}$$ is the 2nd order tensor field: $$\mathrm{grad}(\mathbf{F})=(\nabla\mathbf{F})^T=\mathbf{J}(\mathbf{F})$$, where $$\mathbf{J}(\mathbf{F})$$ is the Jacobian of $$\mathbf{F}$$.

These notations are taken from the Wikipedia article on vector calculus identities. Now, the Wikipedia article on the Hessian matrix states, that

• the Hessian $$\mathbf{H}(f)$$ of a scalar function is the Jacobian of its gradient, i.e. $$\mathbf{H}(f)=\mathbf{J}(\nabla f)$$

Therefore, the Hessian in vector calculus notation would be:

• $$\mathbf{H}(f)=(\nabla(\nabla f))^\top=\nabla(\nabla f)$$, since the Hessian is always symmetric (for continuous functions).

However, this is a bit inconsistent. All of the above identities could be derived with $$\nabla$$ being identified as a column vector of partial derivative operators. Thus, $$\nabla f$$ produces a column vector. However, then $$\nabla$$ can (for the sake of consistency) only be applied to a row vector field $$\mathbf{F}$$, giving matrices (a column vector times a row vector implies the outer product and thus produces a matrix). Therefore, one should write the Hessian as

• $$\mathbf{H}(f)=\nabla(\nabla f)^\top$$

Which of these alternatives is better/correct? Probably there is some freedom, since we can also define the gradient operator to act on a row vector, while it also produces row vectors for a scalar function. Yet, this is somewhat inelegant.

• As far as I can tell Wikipedia considers the vector field $\mathbf{F}$ to be a row vector to which $\nabla$ is applied componentwise to give (the transpose of) the Jacobian $(\nabla\mathbf{F})^\top=\mathbf{J(F)}$. So far so good. When you want to apply this notation to get the Hessian (which Wikipedia does not) then you must ensure that $\nabla f$ is a column vector. Otherwise, stuff like $\nabla\nabla f$ can be mistaken as the Laplacian. To make a long story short: better to denote the Hessian as $\partial_i\partial_j f$. Commented Oct 24, 2022 at 12:19
• ... The notation $\nabla((\nabla f)^\top)$ looks acceptable to me but clumsy. Commented Oct 24, 2022 at 12:21
• What might also work is $(\nabla\nabla^\top)f$ . Commented Oct 24, 2022 at 14:01

$$\mathbf{H}(f)=\nabla\otimes\nabla f$$
This avoids any ambiguity with the Laplacian as well as clumsy notations with the transpose and does not depend on $$\nabla f$$ being defined as a column vector.
In this case, the gradient of a vector field should everywhere be rewritten as $$\nabla\otimes\mathbf{F}$$.