In 1919, Eddington went on an expedition to Príncipe Island to prove Einstein’s Theory of Relativity using gravitational lensing. However, the validity of Eddington’s experiment is questioned by many due to the fact he was highly selective with his data and discarded many measurements that pointed towards Newtonian physics. My project supposes Eddington has access to a time machine, which would allow him to observe any solar eclipse from Príncipe Island, in order to find which one would be most ideal to verify the bending of light. This project allowed me to explore the interesting physics behind solar eclipses over millennia, without needing a time machine!

Introduction

In 1919, Sir Arthur Eddington led his historical expedition to Príncipe Island off the coast of Africa. His goal was to prove one of the most famous contributions in physics: Einstein’s general theory of relativity. Einstein’s theory was that gravity isn’t a push and pull but rather the curvature of spacetime caused by massive objects. When a giant piece of mass (like the Sun) is there, it bends the fabric of spacetime, causing the path light takes to bend along with it. This is known as gravitational lensing. When there is a star behind the Sun, the light from that star travels and bends around the Sun. Normally this effect cannot be observed as stars aren’t visible in the daylight, however during an eclipse it is dark enough for the stars to be seen while lensed.
By capturing photographic plates of the sky during an eclipse, Eddington was able to get a picture of the stars while being lensed.
He compared the plates of the stars during the eclipse to those of the same stars during the night, with no Sun to bend the light. By comparing the photographs, Eddington was able to prove the existence of gravitational lensing.
However, some people suggest that Eddington ignored the results of a similar expedition to Sobral, Brazil, that seemed to support Newtonian physics, since he was so convinced of Einstein’s theory.
For my project, I am using Wolfram Language to examine past eclipses visible from Príncipe Island. I can identify the brightest stars and calculate their angular distance from the Sun and conclude how effected they would be by gravitational lensing. This would help determine the best eclipse to prove the existence of gravitational lensing.

Newton

When an object is being lensed, the light deflects and creates an angle, called the deflection angle. Despite light having zero mass, I can suppose light interacts gravitationally via Newton’s Laws, and carry out a very simple derivation of the deflection angle when light grazes the limb of the Sun.
I can visualize the deflection angle (α):
In[]:=
NewtonSunDiagram
Out[]=
Assume the light ray travels at a distance 2R in time of T, while experiencing the gravity of the Sun.
Using the basic equations of constant acceleration I can create a distance triangle:
In[]:=
DistanceTriangle
Out[]=
Solving for α by substituting the expressions for the Sun’s gravitational field:
First​​Solve​​α==
g*
2
t
2

c*t
2

/.g->
G*M
2
R
,t->
2*R
c
,α
Out[]=
α
2GM
2
c
R

Therefore I have arrived at the “Newtonian” formula for gravitational lensing!

Einstein

Einstein’s equation for the deflection angle is exactly double of Newtons, because it accounts for how both time and space is curved. The derivation of Einstein’s deflection equation is beyond the scope of this essay.
​
α =
(4GM)
(
2
c
d)
Defining a function to calculate the deflection angle using Einsteins formula and converting it into radians:
In[]:=
G=Quantity["GravitationalConstant"];​​mSol=EntityValue[Entity["Star","Sun"],"Mass"];​​c=Quantity["SpeedOfLight"];​​rSol=EntityValue[Entity["Star","Sun"],"Radius"];
In[]:=
ClearAll[α];​​α[___]:=$Failed​​α[d_Quantity]:=Quantity
4*G*mSol
2
c
*d
,"Radians"
I have used the scale factor to make the deflection angle more exaggerated (angle too small to be seen on graph) and graphics to display the model:
In[]:=
GravitationalLensingDiagram
​​
Out[]=

Eddington’s Experiment

Finding the exact time of the Eddington eclipse:
In[]:=
timeOfPrincipeEclipse=FindSolarEclipse
Príncipe
ISLAND
,
-200
yr
,EclipseType"Total"[[1]]
Out[]=
Thu 29 May 1919 09:08:33GMT-4
Visualizing what happened during the famous 1919 eclipse, centered around the Sun:
Row​​Table​​AstroGraphics​​
Sun
STAR
,​​AstroReferenceFrame->"Equatorial",
Thu 29 May 1919 09:08:33GMT-4
+Quantity[t,"Hours"],GeoPosition
Príncipe
ISLAND
,​​AstroRange->Quantity[1,"AngularDegrees"],​​ImageSize->Tiny​​,​​{t,0,3,0.5}​​
Out[]=
These stars, not normally visible in the daytime due to the brightness of the Sun, would become visible during the moment of totality when the Moon covered the solar disc.
A difference in the observed position of the stars during the eclipse, compared to their normal position (measured some months earlier at night, when the Sun is not in the field of view), would indicate that the light from these stars had bent as it passed close to the Sun.
Dyson, when planning the expedition in 1916, had chosen the 1919 eclipse because it would take place with the Sun in front of a bright group of stars called the Hyades. The brightness of these stars would make it easier to measure any changes in position.
In[]:=
ClearAll[sunPos];​​sunPos[t_?NumericQ,date_DateObject,loc_GeoPosition]:=AstroPosition
Sun
STAR
,{"Equatorial",date+Quantity[t,"Hours"],loc};
In[]:=
ClearAll[starPos];​​starPos[star_Entity,t_?NumericQ,date_DateObject,loc_GeoPosition]:=AstroPosition[star,{"Equatorial",date+Quantity[t,"Hours"],loc}];
This would have been its position with no light deflection:
In[]:=
ClearAll[noDeflection]​​noDeflection[star_Entity,t_?NumericQ,date_DateObject,loc_GeoPosition]:=AstroPosition[star,{"Equatorial",date+Quantity[t,"Hours"],loc,"LightDeflection"False}]
In[]:=
ClearAll[angularSep]​​angularSep[star_Entity,t_?NumericQ,date_DateObject,loc_GeoPosition]:=​​AstroAngularSeparation[sunPos[t,date,loc],starPos[star,t,date,loc],{"Equatorial",date+Quantity[t,"Hours"],loc}];
Plotting the angular separation over time for the HIP 20842 star:
In[]:=
Plot​​angularSep
HIP 20842
STAR
,t,
Thu 29 May 1919 09:08:33GMT-4
,GeoPosition
Príncipe
ISLAND
,​​{t,0,18},​​Frame->True,​​FrameLabel->{"Time (Hours)","Angular Degrees (°)"}​​
Out[]=
​
Instead of comparing the two full objects directly, I take the ‘undeflected’ coordinates and insert them into the frame of the ‘deflected’ coordinates. This means both positions are interpreted in the same reference frame, namely the corrected observation frame. Then AstroAngularSeperation computes the actual apparent angular shift, which is about 1–3 arcseconds over the interval.
Defining a function lensingDeflectionAngle to calculate the deflection angle:
Plotting how the deflection of a stars light over 18 hours during the Príncipe eclipse:
Finding the exact time when the star grazes the limb of the solar disc:
Verify that I obtained the correct value for the deflection:

Umbra of 1919 Solar Eclipse

Wolfram has many tools to help visualize eclipses, using these can help with understanding of how eclipses move. The umbra of an eclipse is the shadow the moon creates with the Sun and can be plotted in multiple formats.
Creating a map with an umbra of the eclipse that has a GeoMarker where Príncipe Island is:
Using the SolarEclipse function the geographical elements of the eclipse can be illustrated:

Eddington As A Time Traveler

As the Earth orbits the Sun we perceive the Sun as moving through a changing backdrop of stars.
Below is a series of images show how the stars behind the Sun change over time from the perspective of Earth.
Using FindSolarEclipse all the eclipses from the past 10000 years that have been at Príncipe Island can be plotted on a timeline.
I can form a dataset where each row represents one eclipse:
Count how many data entries have a valid local umbra duration and how many are missing:
Filtering dataset to find missing row:
The local umbra duration may be missing because from Príncipe the eclipse is partial, but it is a total eclipse elsewhere.
Creating a scatterplot with the x-axis showing eclipse magnitude and y-axis showing the duration of total totality (in minutes):

What is the Best Eclipse?

To find the best eclipse for time-travelling Eddington, the brightest and closest stars to the Sun must be found. The stars need to be bright enough so they are visible, and close to the Sun so the deflection is obvious.
Retrieve the stars with an apparent magnitude < 6 (lower the apparent magnitude the brighter the star):
Sorting stars from lowest apparent magnitude to highest:
Find out where the star detected by Eddington comes in this list:
For each total solar eclipse date, find data on the N brightest stars (not including the Sun):
AstroPosition holds a lot of data, which means it can take long periods of time to load in stars. Because of this I am computationally limited to the amount of stars I can search (~1000 brightest stars).
Displaying dataset of stars for each eclipse:

Requirements:

Now that there is a list of the brightest stars during the eclipses, they can be filtered according stricter rules:
◼
  • Minimum of 0.4 degrees so that they aren’t blocked by the sun
  • ◼
  • A maximum of 5 angular degrees so they pass close enough to the sun for the light to be warped
  • This filtered dataset has 20 candidate eclipses, some of which more then one candidate star!
    Taking the candidates from above and extracting data such as: apparent magnitude, angular separation, deflection, and local umbra duration:
    I can create a 3D plot of the deflection angle, umbra duration, and apparent magnitude from eclipse data. The star with the lowest apparent magnitude and highest deflection and umbra duration would be the most ideal star to study gravitational lensing.
    Defining a icon used to mark each eclipse:
    Plotting the eclipses :
    The brightest eclipse would be the lowest apparent magnitude, which is the Antares star:
    Plotting deflection angle over time:
    It is important to find the maximum deflection, so I can use the best observation window.

    Conclusion

    To detect the optimal eclipse, I must look at the local umbra duration, apparent magnitude, and deflection angle of each star. The umbra duration has helped find which eclipse lasts the longest, making it easier for photographs to be captured. The apparent magnitude allows the stars to be visible enough to be compared. And the deflection angle of each star is crucial for making the displacement of the star obvious enough to be observed. I identified the brightest lensing candidate as Antares in the year 4216!
    ​

    Future Directions

    Future experiments should model how gravitational lensing could be used as a cosmic telescope. Gravitational lensing acts like a magnifying glass, using galaxy clusters to bend the fabric of spacetime and magnify galaxies billions of light-years away that would otherwise be impossible to observe with modern-day telescopes.
    Additionally, repeating this experiment with fewer limitations would help produce more accurate results. By factoring in the seasons of Príncipe Island, eclipses that would not be visible due to clouds or rain could be excluded from the data. The main limitation of my experiment was that I could only gather eclipse data from so far back in time while keeping the data loading within a reasonable amount of time. Using a supercomputer or finding a way to optimize the code would allow a much larger range of eclipses to be analyzed.

    Acknowledgments

    I am deeply grateful to my mentor, Joseph Brennan, for his support throughout this project, from introducing and explaining the concepts patiently to helping me debug my code. I am also grateful for my advocate Daniel Sanchez, for supporting me throughout the whole program and helping me understand Wolfram Alpha. A huge thank you to Gloria Chan for helping me understand my project and my code, as well as Aanya Gupta for helping me create a model of the deflection angle. I additionally thank Averyl Xu, Kaavya Majumder, Daniel Xu, and Eileen Lee for being such supportive TAs and making project time so much fun and helping me talk through the issues in my project throughout the program. Thank you to Ananya Hariprasad for being a great roommate and uplifting me throughout the program. I also thank Lakshmi Agrawal for introducing me to the program where I have had such an amazing experience. Thank you to Rory Foulger, Eryn Gillam, Megan Davis, Anne Shuai, Max Wang, and Cyrus Taylor for running such a great program and making the whole experience amazing. Finally thank you to Stephen Wolfram for creating this amazing opportunity to work on this project and learn with so much support.
    Additional thanks to Stephen Wolfram for suggesting this project.

    References

    Anderton, R. J. (2013). Newtonian gravitational deflection of light. The General Science Journal. https://www.gsjournal.net/Science-Journals/Research%20Papers-Relativity%20Theory/Download/4528
    ​
    - Youtube. (n.d.). Retrieved July 9, 2026, from https://www.youtube.com/watch?v=HLxvq_M4218&time_continue=131&source_ve_path=MjM4NTE&embeds_referring_euri=https%3A%2F%2Fwww.google.com%2Fsearch%3Fsca_esv%3D1ca671115836aad7%26rlz%3D1C1ZKTG_en-GBPR1161PR1161%26sxsrf%3DAPpeQntx1L7W50EwwuailGsMm74E8Licgg%3A17
    Flaticon. (n.d.). Solar eclipse icons. https://www.flaticon.com/free-icons/solar-eclipse

    CITE THIS NOTEBOOK

    Optimizing Eddington's eclipse​
    by Natalie Krip​
    Wolfram Community, STAFF PICKS, July 9, 2026
    ​https://community.wolfram.com/groups/-/m/t/3752214