Changeset - dfb75c7568d4
[Not reviewed]
0 2 0
Tom Bannink - 8 years ago 2017-02-27 17:09:19
tombannink@gmail.com
Improve Mathematica notebook
2 files changed with 18 insertions and 11 deletions:
0 comments (0 inline, 0 general)
cpp/showgraphs.m
Show inline comments
 
@@ -28,50 +28,54 @@ Grid[Partition[gs,10],Frame->All]
 
(*Data import and data merge*)
 

	
 

	
 
gsraw=Import[NotebookDirectory[]<>"graphdata_merged.m"];
 

	
 

	
 
newData=Import[NotebookDirectory[]<>"graphdata_tau_multi3.m"];
 
newData=Import[NotebookDirectory[]<>"graphdata_tau_multi4.m"];
 
mergedData=Import[NotebookDirectory[]<>"graphdata_merged.m"];
 
Export[NotebookDirectory[]<>"graphdata_merged_new.m",Join[mergedData,newData]]
 

	
 

	
 
(* ::Subsection:: *)
 
(*Plot empirical distribution of maximum degree*)
 

	
 

	
 
maxDegrees=Map[{#[[1]],Max[#[[3]]]}&,gsraw];
 
maxDegrees=GatherBy[maxDegrees,{#[[1,2]]&,#[[1,1]]&}];
 

	
 

	
 
Histogram[maxDegrees[[1,-1,All,2]],PlotRange->{{0,1100},{0,200}},AxesLabel->{"d_max","frequency"}]
 
Histogram[maxDegrees[[2,-1,All,2]],PlotRange->{{0,1100},{0,200}},AxesLabel->{"d_max","frequency"}]
 
Histogram[maxDegrees[[3,-1,All,2]],PlotRange->{{0,1100},{0,200}},AxesLabel->{"d_max","frequency"}]
 
Histogram[maxDegrees[[1,-1,All,2]],PlotRange->{{0,2000},{0,100}},AxesLabel->{"d_max","frequency"}]
 
Histogram[maxDegrees[[2,-1,All,2]],PlotRange->{{0,2000},{0,100}},AxesLabel->{"d_max","frequency"}]
 
Histogram[maxDegrees[[3,-1,All,2]],PlotRange->{{0,2000},{0,100}},AxesLabel->{"d_max","frequency"}]
 

	
 

	
 
(* ::Subsection:: *)
 
(*Plot triangle count over "time" in Markov chain instances*)
 

	
 

	
 
numPlots=10;
 
minCount=Min[Map[Min[#[[2]]]&,gsraw[[1;;numPlots]]]];
 
maxCount=Max[Map[Max[#[[2]]]&,gsraw[[1;;numPlots]]]];
 
maxTime=Max[Map[Length[#[[2]]]&,gsraw[[1;;numPlots]]]];
 
numPlots=15;
 
selectedData=gsraw[[-numPlots-1;;-1]];
 
minCount=Min[Map[Min[#[[2]]]&,selectedData]];
 
maxCount=Max[Map[Max[#[[2]]]&,selectedData]];
 
maxTime=Max[Map[Length[#[[2]]]&,selectedData]];
 
skipPts=Round[maxTime/100]; (* Plotting every point is slow. Plot only once per `skipPts` timesteps *)
 
coarseData=Map[#[[2,1;;-1;;skipPts]]&,gsraw[[1;;numPlots]]];
 
labels=Map["{n,tau} = "<>ToString[#[[1]]]&,gsraw[[1;;numPlots]]];
 
coarseData=Map[#[[2,1;;-1;;skipPts]]&,selectedData];
 
labels=Map["{n,tau} = "<>ToString[#[[1]]]&,selectedData];
 
ListPlot[coarseData,Joined->True,PlotRange->{minCount,maxCount},DataRange->{0,maxTime},PlotLegends->labels]
 
(* Map[ListPlot[#,Joined->True,PlotRange\[Rule]{minCount,maxCount},DataRange\[Rule]{0,maxTime}]&,coarseData] *)
 

	
 

	
 
(* ::Subsection:: *)
 
(*Plot average #triangles vs n*)
 

	
 

	
 
averages=Map[{#[[1]],Mean[#[[2,1;;-1]]]}&,gsraw];
 
(* Sort by n *)
 
averages=SortBy[averages,#[[1,1]]&];
 
(* Split by n,tau *)
 
averagesGrouped=GatherBy[averages,{#[[1,1]]&,#[[1,2]]&}];
 
(* averagesGroupes[[ n index, tau index , run index, {ntau, tri, ds} ]] *)
 
averagesGrouped=Transpose[averagesGrouped];
 
(* averagesGrouped[[ tau index, n index, run index ]] *)
 
nlabels=Map["n = "<>ToString[#]&,averagesGrouped[[1,All,1,1,1]]];
 
taulabels=Map["tau = "<>ToString[#]&,averagesGrouped[[All,1,1,1,2]]];
 
@@ -81,12 +85,15 @@ ErrorBar[StandardDeviation[#[[All,2]]]/Sqrt[Length[#]]]
 
}&,averagesGrouped,{2}];
 

	
 

	
 
ErrorListPlot[averagesErrorBars,Joined->True,PlotMarkers->Automatic,AxesLabel->{"n","\[LeftAngleBracket]triangles\[RightAngleBracket]"},PlotLegends->taulabels]
 

	
 

	
 
ListLogPlot[averagesErrorBars[[All,All,1]],Joined->True,PlotMarkers->Automatic,AxesLabel->{"n","\[LeftAngleBracket]triangles\[RightAngleBracket]"},PlotLegends->taulabels]
 

	
 

	
 
(* ::Subsection:: *)
 
(*Plot #triangles distribution for specific (n,tau)*)
 

	
 

	
 
histograms=Map[Histogram[#[[All,2]]]&,averagesGrouped,{2}];
 
nlabels=Map["n = "<>ToString[#]&,averagesGrouped[[1,All,1,1,1]]];
cpp/switchchain.cpp
Show inline comments
 
@@ -81,13 +81,13 @@ int main() {
 
    Graph g;
 

	
 
    std::ofstream outfile("graphdata.m");
 
    outfile << '{';
 
    bool outputComma = false;
 

	
 
    for (int numVertices = 200; numVertices <= 2000; numVertices += 200) {
 
    for (int numVertices = 2000; numVertices <= 10000; numVertices += 1000) {
 
        for (float tau : tauValues) {
 

	
 
            DegreeSequence ds(numVertices);
 
            powerlaw_distribution degDist(tau, 2, numVertices);
 
            //std::poisson_distribution<> degDist(12);
 

	
0 comments (0 inline, 0 general)