private static Matrix calculate(Matrix simulation, Matrix correction) {
    // We will calculate the error between the color and the color
    // viewed by a color blind user and "spread" this error onto the healthy cones.
    // The correction matrix perform this last step and have been chosen arbitrarily.
    Matrix matrix = simulation.multiply(RGB_LMS);
    if (correction == null) correction = CORRECTION;
    return LMS_RGB.multiply(matrix.plus(correction.multiply(RGB_LMS.minus(matrix))));
  }
private static Matrix calculate(Matrix simulation, Matrix correction)