add ability to cache matrix, create inverse then store and retrieve from global environment