There has been a paper on dark vs bright state of light: https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.134.133603​
which provides a new insight into the double-slit experiment and wave-particle duality of light, in quantum theory. Here you can find its implementation in Wolfram Mathematica: https://community.wolfram.com/groups/-/m/t/3461741​
I had a correspondence with Celso Jorge Villas-Boas, the first author, and discussing some aspects of their paper. He kindly shared his insight into classical counterpart of dark/bright states of light as a system of coupled oscillator, which he uses in his classes. I explored his idea a bit and I believe it is indeed an excellent classical example, providing some insight into the dark.bright states of light. In this notebook, I provide some codes exploring Celso’s suggestion.
Consider two identical pendulums of length ℓ and mass m, coupled by a torsional spring of stiffness κ at their pivots. Impose the rigid-rod constraints. Then the non‑linear pendulum + torsion-spring ODEs read as:
For small‑angle displacements, the linearizing torques gives:
which can be solved analytically:
In[]:=
ClearAll[ω0,,θ1,θ2,θ10,θ20,v10,v20];​​$Assumptions={ω0>0,>0};​​results=FullSimplify@DSolveValue[{D[θ1[t],{t,2}]+
2
ω0
θ1[t]+(θ1[t]-θ2[t])==0,​​D[θ2[t],{t,2}]+
2
ω0
θ2[t]-(θ1[t]-θ2[t])==0,θ1[0]==θ10,θ2[0]==θ20,θ1'[0]==v10,θ2'[0]==v20},{θ1[t],θ2[t]},t]
Out[]=

1
2
(θ10+θ20)Cos[tω0]+(θ10-θ20)Cost
2+
2
ω0
+
(v10+v20)Sin[tω0]
ω0
+
(v10-v20)Sint
2+
2
ω0

2+
2
ω0
,
1
2
(θ10+θ20)Cos[tω0]+(-θ10+θ20)Cost
2+
2
ω0
+
(v10+v20)Sin[tω0]
ω0
+
(-v10+v20)Sint
2+
2
ω0

2+
2
ω0

Introduce symmetric and antisymmetric coordinates
One finds the decoupled ODEs for the two normal‑modes whose frequencies are
(which is both pendulums in phase, frequency) and
(which is out of phase, frequency)
In[]:=
Subtract@@results//FullSimplify​​Plus@@results//FullSimplify
Out[]=
(θ10-θ20)Cost
2+
2
ω0
+
(v10-v20)Sint
2+
2
ω0

2+
2
ω0
Out[]=
(θ10+θ20)Cos[tω0]+
(v10+v20)Sin[tω0]
ω0
Solve ODEs for
θ
1
and
θ
2
for different parameters:
In[]:=
ClearAll[{θ1,θ2,ω0,k,θ10,θ20,v10,v20,tf}]​​pnd=ParametricNDSolveValue[{D[θ1[t],{t,2}]+
2
ω0
Sin[θ1[t]]+(θ1[t]-θ2[t])==0,​​D[θ2[t],{t,2}]+
2
ω0
Sin[θ2[t]]-(θ1[t]-θ2[t])==0,θ1[0]==θ10,θ2[0]==θ20,θ1'[0]==v10,θ2'[0]==v20},{θ1[t],θ2[t]},{t,0,tf},{ω0,,θ10,θ20,v10,v20,tf}]
Out[]=
ParametricFunction
Expression: {θ1[t],θ2[t]}
Parameters: {ω0,,θ10,θ20,v10,v20,tf}


Single‑pendulum displacement

Solve the ODEs for the case of
In[]:=
{th1,th2}=pnd[w0=.3,k=.1
2
w0
,th10=1,th20=0,0,0,tf=20×2πw0];
Plot angular coordinates in time:
In[]:=
Plot[Evaluate[{th1,th2}],{t,0,tf},Ticks->None,AspectRatio->1/3,PlotLegends->Placed[{"
θ
1
","
θ
2
"},Right],GridLines->{None,{Max[th10,th20],-Max[th10,th20]}},PlotLabel->"Angular coordinate of partile 1 and 2",ImageSize->600]
Out[]=
θ
1
θ
2
Plot the normal-modes, symmetric and antisymmetric, in time:
In[]:=
PlotEvaluate
th1+th2
2
,
th1-th2
2
,{t,0,tf},Ticks->None,AspectRatio->13,PlotStyle->{ColorData[97][3],ColorData[97][4]},PlotLegends->Placed[{"
θ
s
","
θ
a
"},Right],GridLines->None,{Max[th10+th20,th10-th20],-Max[th10+th20,th10-th20]}
2
,PlotLabel->"Normal-mode coordinates (symmetric, and antisymmetric)",ImageSize->600
Out[]=
θ
s
θ
a
Provide some visualization for angular coordinates:
In[]:=
img1SPD=Plot[Evaluate[{th1,th2}],{t,0,tf},Ticks->None,AspectRatio->1/3,PlotLegends->{"
θ
1
","
θ
2
"}];​​imgsSPD=Table​​ColumnStyle"Single‑pendulum displacement",Bold,​​Graphics[{{Line[{{0,0},{2.2,0}}]},{{Gray,Dashed,Circle[{0,0},1,{-π,0}]},{Line[{{0,0},{Sin[th1],-Cos[th1]}}]},{Opacity[.3],FaceForm[ColorData[97][1]],Disk[{0,0},1,{-π/2,-π/2+th1}]},{ColorData[97][1],PointSize[Large],Point[{Sin[th1],-Cos[th1]}]}},Translate[{{Gray,Dashed,Circle[{0,0},1,{-π,0}]},{Line[{{0,0},{Sin[th2],-Cos[th2]}}]},{Opacity[.3],FaceForm[ColorData[97][2]],Disk[{0,0},1,{-π/2,-π/2+th2}]},{ColorData[97][2],PointSize[Large],Point[{Sin[th2],-Cos[th2]}]}},{2.2,0}]},ImageSize->600],​​Show[img1SPD,Graphics[{{ColorData[97][1],PointSize[.02],Point[{t,th1}]},{ColorData[97][2],PointSize[.02],Point[{t,th2}]}}],ImageSize->600],{t,0,tf,tf/100};
In[]:=
ExportNotebookDirectory[]<>"Single‑pendulum-displacement.GIF",imgsSPD
Out[]=
Calculate the instantaneous mechanical energy in each bob and plot that versus time:
In[]:=
e1=
2
D[th1,t]
2+
2
w0
(1-Cos[th1]);​​e2=
2
D[th2,t]
2+
2
w0
(1-Cos[th2]);
Plot normalized energies in time:
In[]:=
Plot
e1
e1+e2
,
e2
e1+e2
,th1,th2,{t,0,tf},Ticks->None,AspectRatio->13,ImageSize->600,PlotStyle->{Automatic,Automatic,Directive[Dashed,Thin,Black],Directive[Thin,Black]},PlotLegends->{"
E
1
","
E
2
","
θ
1
","
θ
2
"},PlotLabel->"energy transfer between bobs"
Calculate total energy including the coupling-spring energy
Show total energy is constant in time (up to a numerical error):

Pure symmetric‑mode displacement

Plot angular coordinates in time:
Plot the normal-modes, symmetric and antisymmetric, in time:
Provide some visualization for angular coordinates:
Calculate the instantaneous mechanical energy in each bob and plot that versus time:
Plot normalized energies in time:
Calculate total energy including the coupling-spring energy
Show total energy is constant in time (up to a numerical error):

Pure antisymmetric‑mode displacement

Plot angular coordinates in time:
Plot the normal-modes, symmetric and antisymmetric, in time:
Provide some visualization for angular coordinates:
Calculate the instantaneous mechanical energy in each bob and plot that versus time:
Plot normalized energies in time:
Calculate total energy including the coupling-spring energy
Show total energy is constant in time (up to a numerical error):

Adding dissipation

We now add viscous damping (e.g. from air resistance or hinge friction) that exerts a torque proportional to each bob’s angular velocity.
The new dissipation term continually removes energy from each bob, so both the in‑phase (bright) and out‑of‑phase (dark) oscillations will decay in amplitude.
Plot angular coordinates in time:
Plot the normal-modes, symmetric and antisymmetric, in time:
Provide some visualization for angular coordinates:
Calculate the instantaneous mechanical energy in each bob and plot that versus time:
Plot normalized energies in time:
Calculate total energy including the coupling-spring energy
Show total energy is constant in time (up to a numerical error):

CITE THIS NOTEBOOK

Wave-particle duality: classical example for dark vs bright states of photons​
by Mohammad Bahrami​
Wolfram Community, STAFF PICKS, May 20, 2025
​https://community.wolfram.com/groups/-/m/t/3464768