'Predicts the value of :math:`M_{i,j}`, using reconstructed matrix :math:`M^\prime = U \Sigma_k V^T`
:param i: row in M, :math:`M_{i \cdot}`
:type i: user or item id
:param j: col in M, :math:`M_{\cdot j}`
:type j: item or user id
:param MIN_VALUE: min. value in M (e.g. in ratings[1..5] => 1)
:type MIN_VALUE: float
:param MAX_VALUE: max. value in M (e.g. in ratings[1..5] => 5)
:type MAX_VALUE: float'

def predict(self, i, j, MIN_VALUE=None, MAX_VALUE=None):

    if (not self._matrix_reconstructed):
        self.compute()
    predicted_value = self._matrix_reconstructed.entry_named(i, j)
    if MIN_VALUE:
        predicted_value = max(predicted_value, MIN_VALUE)
    if MAX_VALUE:
        predicted_value = min(predicted_value, MAX_VALUE)
    return float(predicted_value)
