reservoirState[ypStarInterpolant_,tpStar_,timeSim_,reservoirSize_]:=Module[{reservoirDims,density,A,V,r0,dr,drTrain,data,rData,rTrainData,timeStepSize,numSimSteps},(*1.Setbasicdimensionsandsparsity*)reservoirDims=reservoirSize;density=0.01;numSimSteps=2000;timeStepSize=timeSim/numSimSteps;(*2.Createsparsesymmetricpositivedefinitematrix*)A=Normal@ResourceFunction["RandomSparseSPDMatrix"][reservoirDims,"CholeskyFactorDensity"->density];(*3.Randominputweights*)V=RandomReal[{0,0.5},{reservoirDims,First@Dimensions[ypStarInterpolant]}];(*4.Initialreservoirstate*)r0=ConstantArray[0,reservoirDims];(*5.Reservoirupdatefunction*)dr[r_,i_]:=Tanh[A.r+V.ypStarInterpolant[[All,i]]];(*6.Timeevolutionofreservoir*)drTrain[r_]:=Module[{length=Length[tpStar],rTrain=ConstantArray[0,Length[tpStar]],rNew=r,time=0},Table[rTrain[[i]]=rNew;rNew=dr[rNew,i],{i,1,length,1}];{tpStar,Join[rTrain,Transpose[{ConstantArray[1,Length[rTrain]]}],2]}];(*7.Interpolatethestates*)data=drTrain[r0];rData=Interpolation[DeleteDuplicatesBy[Transpose[{data[[1]],Transpose[data[[2]]][[#]]}],First],InterpolationOrder->2]&/@Range[reservoirDims+1];(*8.Uniformsamplingofstates*)rTrainData=Table[Through[rData[t]],{t,0,timeSim-timeStepSize,timeStepSize}];rTrainData]