There was a recent arXiv preprint discussing quantum analog of Huygen clock, where synchronization was induced by an environment coupling two quantum oscillators. The original simulations employed the QuTiP Python package, with subsequent visualizations generated in the Wolfram Language. This computational essay demonstrates a unified approach, conducting the entire simulation and visualization process within the Wolfram quantum framework. It will be shown how quantum simulations, which will be a Lindblad equation for open quantum systems, can be fully implemented in Wolfram Language.
Install quantum framework
In[]:=
PacletInstall["https://www.wolfr.am/DevWQCF",ForceVersionInstall->True]​​<<Wolfram`QuantumFramework`
Out[]=
PacletObject
Name: Wolfram/QuantumFramework
Version: 1.4.3


Time evolution

Hamiltonian:
H=
2
∑
j=1
-(Δ/2)
z
σ
j
+(τ/2)
x
σ
j
+
J
xy
(
+
σ
1
-
σ
2
+
-
σ
1
+
σ
2
)
In[]:=
h=-
Δ
2
(QuantumOperator["Z"]+QuantumOperator["Z",{2}])+
τ
2
(QuantumOperator["X"]+QuantumOperator["X",{2}])+j(QuantumOperator["Up"]@QuantumOperator["Down",{2}]+QuantumOperator["Down"]@QuantumOperator["Up",{2}]);
Lindblad jump operators:
γ
2
(ξ±1)(
+
σ
1
∓
+
σ
2
)
In[]:=
Ls[ξ_]:=MapThread[{ev,evec}|->evSum[Sqrt[γ]evec[[k]]QuantumOperator["Up",{k}]["Ordered",{1,2}],{k,2}],QuantumOperator[{{1,-ξ},{-ξ,1}}]["Eigensystem"]]
Parameters:
In[]:=
Δ=1;(*detuning*)​​τ=1;(*Rabi*)​​tf=100;(*overaltimeofevolution*)​​j=.25;(*interactioncoupling*)​​γ=.05;(*strengthofdampingrate*)​​
Time evolution of 2-qubit quantum state
In[]:=
ρt[ξ_]:=QuantumEvolve[h,Ls[ξ],QuantumState["01"],{t,0,tf}]
Given ξ and time (as a list), returns expectation-value of
σ
z
for qubits:
In[]:=
qubitExpectation[ξ_,trange_]:=With[{ρ=ρt[ξ]},Table[Table[Evaluate[QuantumPartialTrace[ρ,{q}]["ProbabilitiesList"].{1,-1}],{t,trange}],{q,2}]]
For the last 20% portion of time, find phase difference:
In[]:=
phaseDiff[ξ_]:=Subtract@@(ArcTan[#,ResourceFunction["DiscreteHilbertTransform"][#]]&[#-Mean[#]]&/@qubitExpectation[ξ,Range[.8tf,tf,0.1]])

Bloch visualization

Trajectory of each particle in the Bloch sphere (blue one is qubit-1, orange one is qubit-2)
In[]:=
Manipulate[Table[With[{r=ρt[ξ]},​​Show[QuantumState["UniformMixture"]["BlochPlot"],ParametricPlot3D[{Evaluate@Re@QuantumPartialTrace[r[t],{1}]["BlochVector"],Evaluate@Re@QuantumPartialTrace[r[t],{2}]["BlochVector"]},{t,0,τ}],ViewPoint{-π,2π,2π},ImageSize->200,PlotLabel->"ξ="<>ToString[ξ]]],{ξ,{-1,0,1}}],{τ,.01,tf}]
Out[]=

Expectation values

Mean value of
σ
z
for qubits:
In[]:=
Row@Table[​​Plot[Evaluate@qubitExpectation[ξ,{t}],{t,0,tf},PlotRange->{-1,1},ImageSize->300,AspectRatio->1,PlotLabel->Replace[ξ,{-1->"anti-correlated",0->"uncorrelated",1->"correlated"}],AxesLabel->{"t","〈
σ
z
〉"}],{ξ,{-1,0,1}}]
Out[]=
Phase difference, between last 20% of mean-value of
σ
z
In[]:=
Plot[phaseDiff[ξ][[-40]],{ξ,-1,1},PlotRange->{0,All},AxesLabel->{"ξ","phase difference"}]
Out[]=
phase-lock value
In[]:=
Plot[Abs@Mean@Exp[IphaseDiff[ξ]],{ξ,-1,1},PlotRange->{0,All},AxesLabel->{"ξ","phase-lock value"}]
Out[]=

Entanglement Monotone

In[]:=
entang[ξ_]:=Table[{s,QuantumEntanglementMonotone[ρt[ξ][s],en]},{en,{"Concurrence","EntanglementEntropy","Realignment","RenyiEntropy"}},{s,0,tf,1}];
In[]:=
data=Table[entang[ξ],{ξ,{-1,0,1}}];//AbsoluteTiming
Out[]=
{251.751,Null}
In[]:=
Table[ListLinePlot[data[[i+2]],PlotLegends->{"Concurrence","EntanglementEntropy","Realignment","RenyiEntropy"},PlotLabel->"Entanglement Monotone vs time, for ξ="<>ToString[i],ImageSize->Medium],{i,{-1,0,1}}]
Out[]=

CITE THIS NOTEBOOK

Quantum Huygen clock through noise-induced synchronization​
by Mads Bahrami​
Wolfram Community, STAFF PICKS, August 28, 2024
​https://community.wolfram.com/groups/-/m/t/3259263