LeastSquaresSolutionQRPivot

Вычисляет решение задачи наименьших квадратов с минимальной нормой для вещественной или комплексной системы minimize 2-norm(| b - A*x |) с использованием полного ортогонального разложения матрицы A. Матрица A имеет размер m на n и может быть вырожденной по рангу. Функция LAPACL GELSY.

Вычисления для типа matrix<double>

bool  matrix::LeastSquaresSolutionQRPivot(
   matrix&         B,                // матрица правых частей B
   long[]&         jpvt,             // массив с заданной перестановкой столбцов
   double          rcond,            // порог для определения ранга матрицы A
   matrix&         X,                // матрица решений X
   long[]&         jpvt_out,         // массив с перестановками после вычислений
   long            rank              // эффективный ранг матрицы A
   );
 
bool  matrix::LeastSquaresSolutionQRPivot(
   vector&         B,                // вектор правых частей B
   long[]&         jpvt,             // массив с заданной перестановкой столбцов
   double          rcond,            // порог для определения ранга матрицы A
   vector&         X,                // вектор решений X
   long[]&         jpvt_out,         // массив с перестановками после вычислений
   long            rank              // эффективный ранг матрицы A
   );

Вычисления для типа matrix<float>

bool  matrixf::LeastSquaresSolutionQRPivot(
   matrixf&        B,                // матрица правых частей B
   long[]&         jpvt,             // массив с заданной перестановкой столбцов
   float           rcond,            // порог для определения ранга матрицы A
   matrixf&        X,                // матрица решений X
   long[]&         jpvt_out,         // массив с перестановками после вычислений
   long            rank              // эффективный ранг матрицы A
   );
 
bool  matrixf::LeastSquaresSolutionQRPivot(
   vectorf&        B,                // вектор правых частей B
   long[]&         jpvt,             // массив с заданной перестановкой столбцов
   float           rcond,            // порог для определения ранга матрицы A
   vectorf&        X,                // вектор решений X
   long[]&         jpvt_out,         // массив с перестановками после вычислений
   long            rank              // эффективный ранг матрицы A
   );

Вычисления для типа matrix<complex>

bool  matrixc::LeastSquaresSolutionQRPivot(
   matrixc&        B,                // матрица правых частей B
   long[]&         jpvt,             // массив с заданной перестановкой столбцов
   double          rcond,            // порог для определения ранга матрицы A
   matrixc&        X,                // матрица решений X
   long[]&         jpvt_out,         // массив с перестановками после вычислений
   long            rank              // эффективный ранг матрицы A
   );
 
bool  matrixc::LeastSquaresSolutionQRPivot(
   vectorc&        B,                // вектор правых частей B
   long[]&         jpvt,             // массив с заданной перестановкой столбцов
   double          rcond,            // порог для определения ранга матрицы A
   vectorc&        X,                // вектор решений X
   long[]&         jpvt_out,         // массив с перестановками после вычислений
   long            rank              // эффективный ранг матрицы A
   );

Вычисления для типа matrix<complexf>

bool  matrixcf::LeastSquaresSolutionQRPivot(
   matrixcf&       B,                // матрица правых частей B
   long[]&         jpvt,             // массив с заданной перестановкой столбцов
   float           rcond,            // порог для определения ранга матрицы A
   matrixcf&       X,                // матрица решений X
   long[]&         jpvt_out,         // массив с перестановками после вычислений
   long            rank              // эффективный ранг матрицы A
   );
 
bool  matrixcf::LeastSquaresSolutionQRPivot(
   vectorcf&       B,                // вектор правых частей B
   long[]&         jpvt,             // массив с заданной перестановкой столбцов
   float           rcond,            // порог для определения ранга матрицы A
   vectorcf&       X,                // вектор решений X
   long[]&         jpvt_out,         // массив с перестановками после вычислений
   long            rank              // эффективный ранг матрицы A
   );

Параметры

Б

[in]  Матрица B, столбцы которой представляют собой правые части систем линейных уравнений. Если это вектор B, здесь содержится одна правая часть.

jpvt

[in]  Целочисленный массив размерности n. Если jpvt(i) != 0, то i-й столбец матрицы A переставляется в начало AP, в противном случае столбец i остается свободным. Если массив jpvt имеет нулевой размер (или не инициализирован), предполагается, что все столбцы матрицы A свободны.

rcond

[in] rcond используется для определения эффективного ранга матрицы A, который определяется как порядок наибольшей ведущей треугольной подматрицы R11 (см. Примечание 2) в QR-разложении с перестановкой столбцов, где оценка числа обусловленности меньше < 1/rcond.

X

[out]  Матрица или вектор X с решениями линейной задачи наименьших квадратов.

jpvt_out

[out]  Целочисленный массив с результатом перестановок столбцов. Если jpvt(i) = k, тогда i-й столбец матрицы AP соответствует k-му столбцу матрицы A.

rank

[out]  Эффективный ранг матрицы A, т.е. порядок подматрицы R11 (см. Примечание 2). Это также соответствует порядку подматрицы T11 в полном ортогональном разложении матрицы A.

 

Возвращаемое значение

Возвращает true в случае успеха и false в случае ошибки.

Примечание

1. Матрица B должна иметь размер m на nrhs, где nrhs — количество векторов правой части. Матрица X имеет размер n на nrhs.

2. Алгоритм сначала вычисляет QR-разложение с перестановкой столбцов:

    A * P = Q * [ R11 R12 ]

                [   0 R22 ]

где R11 — наибольшая ведущая подматрица, для которой оценка числа обусловленности меньше 1/rcond. Порядок R11 (rank) и есть эффективный ранг матрицы A.

Затем подматрица R22 считается пренебрежимо малой, а R12 обнуляется с помощью ортогональных преобразований справа, что приводит к полному ортогональному разложению:

   A * P = Q * [ T11 0 ] * Z

               [  0  0 ]

Искомое решение с минимальной нормой выражается так:

   X = P * Z**T [ inv(T11)*Q1**T*B ]

                [        0         ]

где Q1 состоит из первых rank столбцов матрицы Q.