ClearAll["Global`*"];(*parameters*)G=1.;(*gravitationalconstant*)n=4;(*numberofbodies*)m=ConstantArray[1.,n];(*equalmasses*)epsSoft=0.05;(*softeninglength–avoidssingularity*)tmax=40.;(*integrationhorizon*)δv=1.*^-6;(*tinyvelocitytweak*)(*squareofside2aroundtheorigin*)r0={{1.,0.},{-1.,0.},{0.,1.},{0.,-1.}};(*swirl:eachbodygetsatangentialkick*)vMag=0.40;v0={{0.,vMag},{0.,-vMag},{-vMag,0.},{vMag,0.}};(*perturbvxofbody1only*)v0δ=ReplacePart[v0,{1,1}->v0[[1,1]]+δv];(*softenedacceleration*)acc[r_List,i_]:=Sum[-Gm[[j]](r[[i]]-r[[j]])/((Norm[r[[i]]-r[[j]]]^2+epsSoft^2)^(3/2)),{j,DeleteCases[Range[n],i]}];(*integrator*)makeSol[rInit_,vInit_]:=Module[{r=Array[r,n],eq},eq=Flatten@Table[{r[[i]][0]==rInit[[i]],r[[i]]'[0]==vInit[[i]],r[[i]]''[t]==acc[Table[r[[k]][t],{k,n}],i]},{i,n}];NDSolveValue[eq,r,{t,0,tmax},Method->"StiffnessSwitching",MaxStepSize->5.*^-4,AccuracyGoal->12,PrecisionGoal->12]]solRef=makeSol[r0,v0];solPert=makeSol[r0,v0δ];pos[sol_,i_][τ_]:=sol[[i]][τ];