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
Time evolution
Time evolution
Hamiltonian:
H=-(Δ/2)+(τ/2)+(+)
2
∑
j=1
z
σ
j
x
σ
j
J
xy
+
σ
1
-
σ
2
-
σ
1
+
σ
2
In[]:=
h=-(QuantumOperator["Z"]+QuantumOperator["Z",{2}])+(QuantumOperator["X"]+QuantumOperator["X",{2}])+j(QuantumOperator["Up"]@QuantumOperator["Down",{2}]+QuantumOperator["Down"]@QuantumOperator["Up",{2}]);
Δ
2
τ
2
Lindblad jump operators: (ξ±1)(∓)
γ
2
+
σ
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 for qubits:
σ
z
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
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
Expectation values
Mean value of for qubits:
σ
z
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","〈〉"}],{ξ,{-1,0,1}}]
σ
z
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
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
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
by Mads Bahrami
Wolfram Community, STAFF PICKS, August 28, 2024
https://community.wolfram.com/groups/-/m/t/3259263