Possible just add an 'update' method for each particle, so instead of having to check everything for every particle, you can just loop through the matrix, and then call the respective particle's update function.
Would probably provide a nice speed boost

