init = RandomReal[1, {200, 200}];
alpha = -1; beta = -1; gamma = 1; s = 50;
replenish[n_] := RandomReal[1, {n}]
step[a_] :=
MapThread[
Prepend, {MapThread[
Append, {Insert[
Table[a[[i, j]] +
alpha (a[[i, j + 1]] - a[[i, j]] + a[[i, j - 1]]) +
beta (a[[i + 1, j + 1]] + a[[i - 1, j + 1]] +
a[[i + 1, j - 1]] + a[[i - 1, j - 1]] - a[[i, j]]) +
gamma (a[[i + 1, j]] + a[[i - 1, j]] - a[[i, j]]), {i, 2,
Length@a - 1}, {j, 2, Length@First@a - 1}],
replenish[Length@a - 2], {{-1}, {1}}], replenish[Length@a]}],
replenish[Length@a]}];
Do[Subscript[mat, 1] = init;
Subscript[mat, i] = step[Subscript[mat, i - 1]];, {i, 2, s}]
ListAnimate[
Table[ReliefPlot[Subscript[mat, i], ColorFunction -> GrayLevel], {i,
s}]]


Upon vaxquis's remark in the comments, I am posting a much more concise version of the code. All credit goes to him.
conv = {{γ, α, γ}, {β, 1-α-β-γ, β}, {γ, α, γ}};
α = 1; β = -1; γ = -1;
list = ListConvolve[conv, RandomReal[1, {200, 200}], 2];
lists={list};
For[i=0, i<50, i++,
list = ListConvolve[conv, list, 2];
AppendTo[lists, list];
];
ListAnimate[ReliefPlot[#, ColorFunction -> GrayLevel]& /@ lists]
J.M. suggested the use of NestList[] instead of For[] in the code above:
conv = {{γ, α, γ}, {β, 1-α-β-γ, β}, {γ, α, γ}};
α = 1; β = -1; γ = -1;
ListAnimate[
ReliefPlot[#, ColorFunction -> GrayLevel] & /@
NestList[ListConvolve[conv, #, 2] &,
ListConvolve[conv, RandomReal[1, {200, 200}], 2], 50]]
This decreases the computation time from about 2.96 to 2.82 seconds on my machine, averaged over 10 trials.
Export["/tmp/foo.gif", Import["http://i.stack.imgur.com/y9np9.gif"]]
seems to satisfy the requirements, accurately reproducing the gif, and it is quite the easiest way. $\endgroup$