The recent question How much radiation shielding would be required for a habitat at Mercury–Sun L5? got me thinking. There are a large number of disadvantages and challenges to building or putting a large artificial structure so much closer to the Sun than at the distance of Earth's orbit, and the only advantage I can think of is that you'd have a whole lot of solar power available to deal with those challenges.
But I also wondered if there is even any expectation that there is any meaningful benefit to putting something at one of Mercury's triangular libration points Sun-Mercury L4 or L5 as compared to just putting it in a heliocentric orbit and ignoring Mercury altogether, except of course for not getting hit by it.
So I chose a point in space that follows Mercury's orbit, except that it trails it by 1/6 of a period, the approximate temporal equivalent of trailing by 60° would be for a circular orbit. I then calculated the acceleration it would experience from Mercury, Venus, and Earth for five years, and it turns out that the "perturbations" from Venus and Earth are always stronger, and often much stronger than any guiding or stabilizing effects from Mercury.
Question: So I'm wondering, does it make sense to talk about Mercury's triangular libration points (L4, L5)? Besides the linked question, has there ever been any proposed missions or even serious discussion about these locations? Or are they really best thought of as orbital mechanical red herrings?
below: python script and results using the package Skyfield. Dots in last plot are at
years = 2024.14 when Venus comes closer than Mercury.
class Ob(object): def __init__(self, name): self.name = name import numpy as np import matplotlib.pyplot as plt from skyfield.api import Loader, Topos, EarthSatellite load = Loader('~/Documents/YourNameHere/SkyData') data = load('de421.bsp') ts = load.timescale() days = np.arange(365.2564*5) times = ts.utc(2020, 1, days) times_trailing = ts.utc(2020, 1, days-88./6) years = 2020 + days/365.2564 names = ['sun', 'mercury', 'venus', 'earth barycenter', 'mars barycenter', 'jupiter barycenter', 'saturn barycenter', 'uranus barycenter', 'neptune barycenter'] obs =  for name in names: ob = Ob(name.split()) obs.append(ob) ob.ob = data[name] for ob in obs: ob.pos = ob.ob.at(times).ecliptic_position().km if ob.name == 'mercury': ob.pos_trailing = ob.ob.at(times_trailing).ecliptic_position().km sun, mercury, venus, earth, mars = obs[:5] jupiter, saturn, uranus, neptune = obs[5:] GMs = [1.32712440018E+20, 2.2032E+13, 3.24859E+14, 3.986004418E+14 + 4.9048695E+12, 4.282837E+13, 1.26686534E+17, 3.7931187E+16, 5.793939E+15, 6.836529E+15] for ob, GM in zip(obs, GMs): ob.GM = GM for ob in obs: rsq = ((ob.pos - mercury.pos_trailing)**2).sum(axis=0) ob.F = ob.GM / rsq ob.r = np.sqrt(rsq) if 1 == 1: fig = plt.figure() ax = fig.add_subplot(2, 1, 1) for ob in obs[1:4]: ax.plot(years, ob.F, label=ob.name) # ax.legend() ax.set_title('acceleration (m/s^2)', fontsize=16) ax.get_xaxis().get_major_formatter().set_useOffset(False) ax.text(2020.2, 0.01, 'Mercury') ax.text(2020.2, 0.04, 'Earth') ax.text(2020.2, 0.13, 'Venus') ax = fig.add_subplot(2, 1, 2) for ob in obs[1:4]: ax.plot(years, ob.r, label=ob.name) # ax.legend() ax.set_title('distance (m)', fontsize=16) ax.get_xaxis().get_major_formatter().set_useOffset(False) ax.text(2020.2, 0.4E+08, 'Mercury') ax.text(2020.2, 0.7E+08, 'Venus') ax.text(2020.2, 2.2E+08, 'Earth') fig.suptitle("in Mercury's orbit trailing by 88/6 days", fontsize=16) plt.show() if 1 == 1: fig = plt.figure() ax = fig.add_subplot(1, 1, 1) for ob in obs[1:4]: x, y, z = ob.pos ax.plot(x, y) i = np.argmax(venus.F) for ob in obs[1:4]: x, y, z = ob.pos ax.plot(x[i:i+1], y[i:i+1], 'ok') x, y, z = mercury.pos_trailing ax.plot(x[i:i+1], y[i:i+1], 'or') x, y, z = sun.pos ax.plot(x, y, '-k', linewidth=4) ax.set_xlim(-2E+08, 2E+08) ax.set_ylim(-2E+08, 2E+08) # ax.legend() ax.set_title('ecliptic projection (m)', fontsize=16) fig.suptitle("in Mercury's orbit trailing by 88/6 days", fontsize=16) plt.show()