ising_2d_simulation, an Octave code which carries out a Monte Carlo simulation of a 2D Ising model.
A 2D Ising model is defined on an MxN array of cells. Each cell can have a "charge" or "spin" of +1 or -1. A neighborhood of a cell is defined to be itself, and the four immediate neighbors to the north, south, east, and west. A cell may change its charge; the likelihood of doing so depends on whether the charge of the neighbors agrees with the charge of the cell.
This code begins with a random assignment of charges to the cells. It then computes the neighbor agreement at each cell. It then updates the entire configuration in one step, using the neighbor agreement to determine the likelihood of flipping.
Currently, the chance that a cell will "flip" is determined from a table of probabilities based on the number of agreeing neighbors:
Agree | 1 | 2 | 3 | 4 | 4 |
---|---|---|---|---|---|
Prob | 0.98 | 0.85 | 0.50 | 0.15 | 0.02 |
ising_2d_simulation m n iterations thresh seedwhere
Note that the user might also want to vary the transition probabilities. This cannot currently be done on the command line, and requires editing the code and recompiling it.
The computer code and data files described and made available on this web page are distributed under the MIT license
ising_2d_simulation is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version and an Octave version.
octave_simulation, an Octave code which uses simulation to study card games, contests, and other processes which have a random element. Usually, the purpose is to try to predict the average behavior of the system over many trials.