+ cached matrix implementation