0
$\begingroup$

Suppose my code outputs the expression

$$\frac{f^{(0,2)}(r,\phi )+r \left(f^{(1,0)}(r,\phi )+r f^{(2,0)}(r,\phi )\right)}{r^2}$$

This is simply the Laplacian $\nabla^2f(r, \phi)$. Is there a way for Mathematica to recognize and simplify this?

New contributor
Histoscienology is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
$\endgroup$
  • $\begingroup$ I do not know how this will work. How is Mathematica going to know that $\nabla^2(r,\phi)$ is Laplacian in polar coordinates vs. $\nabla^2(x,y)$ in cartesian coordinates? i.e. if you managed to convert it to that form, how will you use it? When you tell M now to give you the Laplacian, you have to tell it the coordinates system. if you just want this for typestting and not for code, use Latex. That is what I do. $\endgroup$ – Nasser Jan 12 at 18:23
  • $\begingroup$ @Nasser You can specify the coordinates for the Laplacian. This problem arises when my output is four lines of algebra and I'd like it to reduce to something that is more recognizable $\endgroup$ – Histoscienology Jan 12 at 18:40
  • 1
    $\begingroup$ People here generally like users to post code as Mathematica code instead of just images or TeX, so they can copy-paste it. It makes it convenient for them and more likely you will get someone to help you. You may find this this meta Q&A helpful $\endgroup$ – Michael E2 Jan 12 at 19:13
3
$\begingroup$

You'd have to write the result with an inactive Laplacian[], or it will expand.

Example:

expr = Laplacian[r f[r, θ], {r, θ}, "Polar"]
(*
  2*Derivative[1, 0][f][r, θ] + 
    (f[r, θ] + Derivative[0, 2][f][r, θ] + r*Derivative[1, 0][f][r, θ])/r + 
    r*Derivative[2, 0][f][r, θ]
*)

Transformation functions:

xfLaplacian[{f_, h_}, v_List, chart_] := 
  Function[e, 
    e /. First@
      Solve[Laplacian[f, v, chart] == Inactive[Laplacian][f, v, chart], 
       D[h @@ v, {First@v, 2}]]] /. 
   HoldPattern[s_Solve] :> With[{sol = s}, sol /; True];
xfLaplacian[f_, v_List, chart_] := 
  Function[e, 
    e /. First@
      Solve[Laplacian[f, v, chart] == Inactive[Laplacian][f, v, chart], 
       D[f, {First@v, 2}]]] /. 
   HoldPattern[s_Solve] :> With[{sol = s}, sol /; True];

Tests:

Simplify[expr, 
 TransformationFunctions -> {Automatic, xfLaplacian[f[r, θ], {r, θ}, "Polar"]}]
(*  f[r, θ]/r + r*Inactive[Laplacian][f[r, θ], {r, θ}, "Polar"] +
      2*Derivative[1, 0][f][r, θ]  *)

Simplify[expr, 
 TransformationFunctions -> {Automatic, xfLaplacian[{r f[r, θ], f}, {r, θ}, "Polar"]}]
(*  Inactive[Laplacian][r f[r, θ], {r, θ}, "Polar"]  *)

For Solve to work in xfLaplacian[], the derivative has to be a fairly simple expression, which is why the head f needs to be specified in this last example.

$\endgroup$

Your Answer

Histoscienology is a new contributor. Be nice, and check out our Code of Conduct.

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.