Continuing on from mylast post concerning optimisation and Lagrange multipliers, I came across a neat little paper on the arXiv here , which asks and answers the question: what shape should a planet be to maximise the gravitational force at a given position? This is a fun problem, solved using an extension of the techniques from the last post, namely the use of Lagrange multipliers to optimise a function given some constraint.
Let’s set some things down before we begin. Assume in the diagram below that we are stood at the pole of an arbitrarily-shaped planet, marked with the red dot. By symmetry, the planet will be cylindrically symmetric, but may have a varying profile. We should then use a cylindrical coordinate system to describe the surface of the planet – call this radius as a function of depth below our feet :
We want to calculate the total gravitational force caused by a planet of this shape at our position. To do this, let’s split up the planet into a series of disks. Suppose the disk at a distance has a radius . Also suppose it has density and thickness , which we assume is very small. Referring to the diagram below, we can calculate the gravitational force caused by the small mass element coloured in red. The gravitational force exerted on us is depicted by the red line. Due to symmetry, only the component along the -direction will matter, the other components will cancel out when we add the rest of the disk. Once we find the force due to this small component, we can integrate over the rest of the disk.
or equivalently the acceleration
Now we’ve defined in our co-ordinate system that we’re standing at the origin, so the planet must begin at . However we haven’t defined yet the endpoint of the planet – it could continue on indefinitely. We need to add a constraint then, otherwise we could keep making the planet bigger and bigger to increase the gravitational force. The constraint we need is that of constant mass – we are only interested in the relative shape of the planet. This is a constraint on the function through the definition of the mass of the planet (assuming cylindrical symmetry):
Now this looks familiar – if we want to optimise something subject to a constraint, we should aim to optimise some linear combination of the quantity of interest and the constraint. In this case we should be optimising
Now in the above I’ve been notating these objects with square brackets to distinguish them from functions. Functions take a number and return another number. These things are functionals, which take a function and return a number. We are now trying to find a function which minimises a functional.
From the Euler-Lagrange equation we know that in order to find an extremum of this functional, the required function solves the equation:
We can rearrange this expression to get our planet’s shape:
We can then substitute everything into our equation for the mass of the planet:
Finally, we have a complete solution, which is plotted below along with a spherical planet of the same mass.
We have fixed the mass and density of our planet, and we may notice that we have implicitly defined a lengthscale . Move to dimensionless coordinates then, where we scale by this lengthscale , and we end up with
In this co-ordinate system the equation of a perfect sphere would be
Lets draw this planet a little more intuitively, in these normalised coordinates:
Here I’ve written a Python script for Blender to create and light the correct geometry. The -coordinate is now vertical (confusingly!), and the radial coordinate transverse. The top of this orb represents .
I’d like to be able to generalise this model to explore different planetary shapes. A simple thing to do is to see what happens when we change the way gravity spreads out. The current model for gravity suggests an inverse-square law, so the force exerted by a mass scales with radius like . There are some theories which predict a departure from this scaling at small or large scales though, so let’s play around a bit. Assume the force of gravity in -dimensional space scales like . Going through the above derivation again, we then have the generalised results
I’ll leave those derivations as an exercise for the terminally bored (it’s simple and only a little tedious). What’s interesting to do is scale the dimensions is each case by the appropriate lengthscale , and look at how the ‘heavy planet’ changes shape as the force of gravity varies in its behaviour:
It’s important to note that each frame is using a different spatial scaling – in each case the planet has the same volume and mass, but they’ve all been scaled uniformly to fit into the same vertical region.
Switching back to unscaled coordinates, we can see below how the profile of the planets change when gravity operates in different dimensions.
For , the best solution is actually a sphere again which is nice. For lower dimensions the most important thing is to make sure the force of gravity is mostly along the -direction so that it doesn’t get cancelled out – the dependence on distance is so weak that its OK to spread the mass out a bit, as long as it’s mostly along the right direction (don’t be fooled by the above plot – all planets have the same volume!).
For higher dimensions, gravity lessens incredibly rapidly with distance so it’s most important to squash as much mass as close to the observer as possible. This leads to the planets becoming a half-sphere shape.
Now this is all very nice, but there is one thing we’ve overlooked, which becomes clear when we actually work out the gravitational force caused by these different planets:
For the gravitational force becomes so large so quickly that the material nearest the observer causes the total force to diverge, so we should really restrict our attention to . As the mass of the planet changes we can see how the total force varies as a function of dimension.
For sufficiently massive planets, the gravitational force in lower dimensions can exceed that from a 3-dimensional gravity. While this solution continues for , we should note that it isn’t actually possible to construct a planet there, as becomes imaginary (taking a fractional power of a negative number).
Nevertheless, from a simple question we’ve managed to churn out a lot of maths and even a Python script. If you’d like to have a look, you can see it here.
In Blender if you’d like to run the script, open a new .blend file, ensure the selected render is Cycles, open the Python console, and type
filename = 'SCRIPTLOCATION' exec(compile(open(filename).read(), filename, 'exec'))
There is a line commented out at the end of the script where you can choose where to save the finished render. The rest should be self-explanatory, though if you have any questions feel free to comment below.