I am trying to compute a 1000 x 60 matrix or list of lists (and ideally this should go up to 1000 x 500 or 1000 x 1000).
Each element is the result of a FindRoot operation, so I make my list by doing
Table[Flatten[{h} /. FindRoot[h == F[h, b, g], {b, 1, 1000}, {g, 1, 60})
but 16GB of RAM are filled up. I think I should be able to hold list of lists much bigger than that, so probably using Table with FindRoot is causing Mathematica to store a lot of undeeded stuff in memory.
Here is the code:
ι[m_, n_] := Binomial[n, n*(1 - m)/2]*2^(-n);
f[m_, h_, b_, g_, n_] := (h*m + g/2*m^2) +
1/(n*b)*Log[ι[m, n]];
μ[m_, h_, b_, g_, n_] :=
Exp[b*n*f[m, h, b, g, n] + b*n*(-h + g/2)]/
Sum[Exp[b*n*f[x, h, b, g, n] + b*n*(-h + g/2)], {x, -1 + 2/n,
1 - 2/n, 2/n}];
moment[h_, x_, b_, g_, n_] := Sum[m^x*μ[m, h, b, g, n], {m, -1 + 2/n, 1 - 2/n, 2/n}];
var[h_, b_, g_, n_] := moment[h, 2, b, g, n] - moment[h, 1, b, g, n]^2;
cov[h_, b_, g_, n_] := moment[h, 3, b, g, n] - moment[h, 1, b, g,n]*moment[h, 2, b, g, n];
F[h_,b_,g_,n_]:= -d*b*(cov[h, b, gg, n] +
2 var[h, b, gg, n]);
n = 100;
d = 0.9;
glist = Table[g, {g, 0.4, 1, 0.01}];
blist = Table[b, {b, 1.1, 10.1, 0.01}];
heatdata = Table[
Flatten[{h} /.
FindRoot[
h == F[h,b,g,n], {h, -0.01}]][[1]]
, {b, blist}, {g, glist}];