DynamicModeDecomposition

Вычисляет разложение по динамическим модам (DMD) для пары матриц срезов данных. Функция Lapack GEDMD. Для входных матриц X и Y, таких что Y = A*X, где матрица A недоступна, функция вычисляет определенное число пар Ритца матрицы A, используя стандартное извлечение Рэлея-Ритца из подпространства range(X), которое определяется с использованием ведущих левых сингулярных векторов матрицы X. Дополнительно функция может возвращать остатки вычисленных пар Ритца, информацию для уточнения векторов Ритца, или собственные векторы точного DMD (Exact DMD). Обе матрицы должны быть одинакового размера.

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

bool  matrix::DynamicModeDecomposition(
   matrix&               B,                       // вторая матрица среза данных в паре
   ENUM_DMD_SCALE        jobs,                    // необходимость масштабировать начальные срезы данных (snapshot) с использованием диагональной матрицы
   ENUM_DMD_EIGV         jobz,                    // необходимость вычисления собственных векторов (моды Купмана)
   ENUM_DMD_RESIDUALS    jobr,                    // необходимость вычисления остатков
   ENUM_DMD_REFINE       jobf,                    // сохранять ли информацию, необходимую для постобработки
   ENUM_SVD_ALG          whtsvd,                  // выбор алгоритма SVD из библиотеки LAPACK
   long                  nrnk,                    // определяет режим вычисления численного ранга
   double                tol,                     // допустимая погрешность для усечения малых сингулярных значений
   vectorc&              eigen_values,            // вектор собственных значений (значений Ритца)
   matrix&               left_vectors,            // матрица левых сингулярных векторов
   matrix&               Z                        // матрица векторов Ритца
   vector&               residuals,               // остатки для пар Ритца
   matrix&               res_vectors,             // остаточные векторы для пар Ритца
   matrix&               B,                       // вычисленные векторы
   matrix&               W,                       // собственные векторы матрицы Рэлея
   matrix&               S                        // вычисленные векторы
   );

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

bool  matrixf::DynamicModeDecomposition(
   matrixf&              B,                       // вторая матрица среза данных в паре
   ENUM_DMD_SCALE        jobs,                    // необходимость масштабировать начальные срезы данных (snapshot) с использованием диагональной матрицы
   ENUM_DMD_EIGV         jobz,                    // необходимость вычисления собственных векторов (моды Купмана)
   ENUM_DMD_RESIDUALS    jobr,                    // необходимость вычисления остатков
   ENUM_DMD_REFINE       jobf,                    // сохранять ли информацию, необходимую для постобработки
   ENUM_SVD_ALG          whtsvd,                  // выбор алгоритма SVD из библиотеки LAPACK
   long                  nrnk,                    // определяет режим вычисления численного ранга
   float                 tol,                     // допустимая погрешность для усечения малых сингулярных значений
   vectorcf&             eigen_values,            // вектор собственных значений (значений Ритца)
   matrixf&              left_vectors,            // матрица левых сингулярных векторов
   matrixf&              Z                        // матрица векторов Ритца
   vectorf&              residuals,               // остатки для пар Ритца
   matrixf&              res_vectors,             // остаточные векторы для пар Ритца
   matrixf&              B,                       // вычисленные векторы
   matrixf&              W,                       // собственные векторы матрицы Рэлея
   matrixf&              S                        // вычисленные векторы
   );

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

bool  matrixc::DynamicModeDecomposition(
   matrixc&              B,                       // вторая матрица среза данных в паре
   ENUM_DMD_SCALE        jobs,                    // необходимость масштабировать начальные срезы данных (snapshot) с использованием диагональной матрицы
   ENUM_DMD_EIGV         jobz,                    // необходимость вычисления собственных векторов (моды Купмана)
   ENUM_DMD_RESIDUALS    jobr,                    // необходимость вычисления остатков
   ENUM_DMD_REFINE       jobf,                    // сохранять ли информацию, необходимую для постобработки
   ENUM_SVD_ALG          whtsvd,                  // выбор алгоритма SVD из библиотеки LAPACK
   long                  nrnk,                    // определяет режим вычисления численного ранга
   double                tol,                     // допустимая погрешность для усечения малых сингулярных значений
   vectorc&              eigen_values,            // вектор собственных значений (значений Ритца)
   matrixc&              left_vectors,            // матрица левых сингулярных векторов
   matrixc&              Z                        // матрица векторов Ритца
   vectorс&              residuals,               // остатки для пар Ритца
   matrixc&              res_vectors,             // остаточные векторы для пар Ритца
   matrixc&              B,                       // вычисленные векторы
   matrixc&              W,                       // собственные векторы матрицы Рэлея
   matrixc&              S                        // вычисленные векторы
   );

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

bool  matrixcf::DynamicModeDecomposition(
   matrixcf&             B,                       // вторая матрица среза данных в паре
   ENUM_DMD_SCALE        jobs,                    // необходимость масштабировать начальные срезы данных (snapshot) с использованием диагональной матрицы
   ENUM_DMD_EIGV         jobz,                    // необходимость вычисления собственных векторов (моды Купмана)
   ENUM_DMD_RESIDUALS    jobr,                    // необходимость вычисления остатков
   ENUM_DMD_REFINE       jobf,                    // сохранять ли информацию, необходимую для постобработки
   ENUM_SVD_ALG          whtsvd,                  // выбор алгоритма SVD из библиотеки LAPACK
   long                  nrnk,                    // определяет режим вычисления численного ранга
   float                 tol,                     // допустимая погрешность для усечения малых сингулярных значений
   vectorcf&             eigen_values,            // вектор собственных значений (значений Ритца)
   matrixcf&             left_vectors,            // матрица левых сингулярных векторов
   matrixcf&             Z                        // матрица векторов Ритца
   vectorсf&            residuals,               // остатки для пар Ритца
   matrixcf&             res_vectors,             // остаточные векторы для пар Ритца
   matrixcf&             B,                       // вычисленные векторы
   matrixcf&             W,                       // собственные векторы матрицы Рэлея
   matrixcf&             S                        // вычисленные векторы
   );

Параметры

Y

[in]  Вторая матрица среза данных в паре.

jobs

[in]  Значение из перечисления ENUM_DMD_SCALE, которое определяет необходимость масштабирования исходных срезов с использованием диагональной матрицы.

jobz

[in]   Значение из перечисления ENUM_DMD_EIGV, которое определяет необходимость вычисления собственных векторов (моды Купмана).

jobr

[in]   Значение из перечисления ENUM_DMD_RESIDUALS, которое определяет, будут ли вычисляться остатки.

jobf

[in]   Значение из перечисления ENUM_DMD_REFINE, которое определяет, следует ли сохранять информацию, необходимую для постобработки (например, вычисления уточненных векторов Ритца).

whtsvd

[in]   Значение из перечисления ENUM_SVD_ALG, которое позволяет выбрать алгоритм SVD из библиотеки LAPACK.

nrnk

[in] Значение определяет способ вычисления числового ранга, т.е. способ усечения малых сингулярных значений входной матрицы X. При

       NRNK = -1 :: i-е сингулярное значение sigma(i) усекается, если sigma(i) <= TOL*sigma(1). Этот вариант рекомендуется.

       При NRNK = -2 :: i-е сингулярное значение sigma(i) усекается, если sigma(i) <= TOL*sigma(i-1). та опция включена для исследований и разработок. Требует высокой точности SVD, что не всегда достигаемо.

       Числовой ранг может быть задан с помощью положительного значения NRNK следующим образом: 0 < NRNK <= N :: будут использоваться не более NRNK наибольших сингулярных значений. Если число вычисленных ненулевых сингулярных значений меньше NRNK, то будут использоваться только эти ненулевые значения, а фактически используемая размерность будет меньше NRNK.

tol

[in]   Допустимая погрешность для усечения малых сингулярных значений. 0 <= TOL < 1

eigen_values

[out] Вектор собственных значений размера K. Ведущие K (K<=N) элементов в EIGS содержат вычисленные собственные значения (значения Ритца).

left_vectors

[out] Матрица левых сингулярных векторов. Ведущие K столбцов содержат базис POD (правильная ортогональная декомпозиция), т.е. ведущие K левых сингулярных векторов входной матрицы X. Все N столбцов содержат все левые сингулярные векторы матрицы X.

Z

[out] Матрица векторов Ритца. Если JOBZ =='V', то Z содержит векторы Ритца.  Z(:,i) — является собственным вектором i-го значения Ритца; ||Z(:,i)||_2=1. Если JOBZ == 'F', то векторы Z(:,i) задаются как неявно как столбцы X(:,1:K)*W(1:K,1:K), т.е. X(:,1:K)*W(:,i) является собственным вектором, соответствующим EIGS(i). Столбцы W(1:k,1:K) представляют собой вычисленные собственные векторы отношения Рэлея размером K-на-K.

residuals

[out] Остатки для K вычисленных пар Ритца.

res_vectors

[out] Остаточные векторы для K вычисленных пар Ритца.

B

[out]  Матрица размером M на K (K<=N).

        Если JOBF =='R', B(1:M,1:K) содержит A*U(:,1:K) и может использоваться для уточненных векторов.

        Если JOBF == 'E', B(1:M,1:K) содержит A*U(:,1:K)*W(1:K,1:K), которые являются векторами из точного DMD (Exact), с точностью до масштабирования по обратным собственным значениям.

        Если JOBF =='N', то матрица B не используется.

W

[out]  Матрица размером K на K (K<=N). Содержит K вычисленных собственных векторов матричного отношения Рэлея. Векторы Ритца (возвращаемые в Z) являются произведением X (содержащего базис POD для входной матрицы X) и W.

S

[out]  Матрица размером K на K (K<=N). Массив S(1:K,1:K) используется для матричного отношения Рэлея. Содержимое перезаписывается во время разложения собственных значений с помощью GEEV.

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

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

Примечание

Количество строк (M) матрицы не должно быть меньше количества столбцов (N).

ENUM_DMD_SCALE

Перечисление, которое определяет, масштабируются ли исходные срезы данных с помощью диагональной матрицы.

Идентификатор

Описание

DMDSCALE_S

'S' — матрицы срезов данных X и Y умножаются на диагональную матрицу D так, что X*D имеет единичные ненулевые столбцы.

DMDSCALE_C

'C' — срезы масштабируются так же, как и в варианте 'S'. Если обнаружено, что i-й столбец матрицы X является нулевым вектором, а соответствующий i-й столбец матрицы Y не равен нулю, то i-й столбец Y устанавливается равным нулю.

DMDSCALE_Y

'Y' — матрицы срезов данных X и Y умножаются на диагональную матрицу D так, что Y*D имеет единичные ненулевые столбцы.

DMDSCALE_N      

'N' — масштабирование данных не предусмотрено.

ENUM_DMD_EIGV

Перечисление, которое определяет, будут ли вычисляться собственные векторы (моды Купмана).

Идентификатор

Описание

DMDEIGV_V

'V' — собственные векторы (моды Купмана) будут вычисляться.

DMDEIGV_F

'F' — будут возвращены собственные векторы (моды Купмана) в факторизованной форме.

DMDEIGV_N

'N' — собственные векторы не вычисляются

ENUM_DMD_RESIDUALS

Перечисление, которое определяет необходимость вычисления остатков.

Идентификатор

Описание

DMDRESIDUALS_R

'R' — вычислять остатки для собственных пар.

DMDRESIDUALS_N

'N' — не вычислять остатки.

ENUM_DMD_REFINE

Перечисление, которое определяет, следует ли хранить информацию, необходимую для постобработки.

Идентификатор

Описание

DMDREFINE_R

'R' — матрица, необходимая для уточнения векторов Ритца, вычисляется и сохраняется в массиве B.

DMDREFINE_E

'E' — немасштабированные собственные векторы точного DMD вычисляются и возвращаются в массиве B.

DMDREFINE_N

'N' — данные для уточнения собственных векторов не вычисляются.

ENUM_SVD_ALG

Перечисление для выбора алгоритма SVD.

Идентификатор

Описание

SVDALG_1

1: GESVD (алгоритм QR SVD)

SVDALG_2

2: GESDD (алгоритм Divide and Conquer)

SVDALG_3

3: GESVDQ (предобусловленный алгоритм QR SVD; этот и следующий варианты самые точные)

SVDALG_4

4: GEJSV (предобусловленный алгоритм Jacobi SVD; этот и предыдущий варианты самые точные)