@classmethod
def lsm(cls, last_a, discrepancy, grad, k_matrix, weight, _lambda=1):
    """
        Адаптивный метод наименьших квадратов.
        
        Математическое описание в формате TeX:
        a_{n} = a_{n-1} + \\gamma_{n}[h_{n}^{*} - h(u_{n}, a_{n-1})],
        h = h(u_{n}, a_{n-1}),
        \\gamma_{n} = rac{K_{a_{n-1}}
abla_{a}h}{p_{n}\\lambda + 
abla_{a}^{T}hK_{a_{n-1}}
abla_{a}h}
        K_{a_{n}} = [E - \\gamma_{n}
abla_{a}^{T}h]K_{a_{n-1}}\\lambda^{-1}, n = n_{0}+1, n_{0}+2, ...
        
        K_{a_{n_{0}}} = \\sum_{i=1}^{n_{0}}{p_{i}^{-1}
abla_{a}h(u_{i}, a_{i})
abla_{a}^{T}h(u_{i}, a_{i})}, 
        i = 1, ..., n_{0}
        
        где: 
abla_{a}h - вектор градиента по параметрам a;
             \\lambda     - коэффициент забывания информации 0<\\lambda<=1;
             E           - едининичная матрица;
             p           - вес, при p = \\sigma^{2} алгоритм становиться стандартный адаптивным МНК.
             n_{0}       - начальное колличество измерений, n_{0} >= кол-во коэффициентов a.
        
        :param last_a     : список значений коэффикиентов на прошлой итерации.
        :type last_a      : list, np.ndarray
        :param discrepancy: невязка, равная разнице выходя объекта и модели, т.е. [h_{n}^{*} - h(u_{n}, a_{n-1})].
        :type discrepancy : number
        :param grad       : список значений градиента по параметрам a.
        :type grad        : np.ndarray
        :param k_matrix   : матрица K на предудущей интерции.
        :type k_matrix    : np.ndarray
        :param weight     : значение веса.
        :type weight      : number
        :param _lambda    : значение коэффициента забывания информации.
        :type _lambda     : number
        :return: кортеж из списка с новыми коэфиициетами и матрицей K.
        :rtype : Tuple(np.ndarray, np.ndarray)
        """
    gamma = cls.find_gamma(grad, k_matrix, weight, _lambda)
    new_k = cls.find_k_matrix(grad, gamma, k_matrix, _lambda)
    new_a = last_a + gamma * discrepancy
    return new_a, new_k
