-- -- 2D Polar Laplacian using chain rule -- declare symbol r, θ : MathExpr def x : MathExpr := r * cos θ def y : MathExpr := r * sin θ def u := function (x, y) def uR : MathExpr := ∂/∂ u r assert "∂u/∂r" (show uR = "u|1 (r * 'cos θ) (r * 'sin θ) * 'cos θ + u|2 (r * 'cos θ) (r * 'sin θ) * 'sin θ") def uRR : MathExpr := ∂/∂ (∂/∂ u r) r def uΘ : MathExpr := ∂/∂ u θ def uΘΘ : MathExpr := ∂/∂ (∂/∂ u θ) θ -- Laplacian in polar coordinates: ∂²u/∂r² + (1/r)∂u/∂r + (1/r²)∂²u/∂θ² -- Full Laplacian should simplify to u|1|1 + u|2|2 assert "Full Laplacian in polar coordinates" (show (uRR + 1 / r * uR + 1 / r ^ 2 * uΘΘ) = "u|2|2 (r * 'cos θ) (r * 'sin θ) + u|1|1 (r * 'cos θ) (r * 'sin θ)")