Spec-Zone.ru › Octave 7

18.3 Матричные разложения

: R = chol (A) ¶
: [R, p] = chol (A) ¶
: [R, p, Q] = chol (A) ¶
: [R, p, Q] = chol (A, "vector") ¶
: [L, …] = chol (…, "lower") ¶
: [R, …] = chol (…, "upper") ¶

Вычислить верхнюю факторизацию Холецкого, R, вещественной симметричной или комплексной эрмитовой положительно определенной матрицы A.

Верхняя факторизация Холецкого R вычисляется, используя верхнюю треугольную часть матрицы A и определяется следующим образом

R' * R = A.

Вызов chol с необязательным флагом "upper" имеет такое же поведение. В отличие от этого, использование необязательного флага "lower", chol возвращает нижнюю треугольную факторизацию, вычисляемую, используя нижнюю треугольную часть матрицы A, такую что

L * L' = A.

Вызов с одним аргументом возврата chol завершается ошибкой, если матрица A не является положительно определенной. Обратите внимание, что если матрица A не является вещественно симметричной или комплексно эрмитовой, то нижняя треугольная часть рассматривается как (комплексно-сопряженный) транспонированный верхний треугольник, или наоборот, в зависимости от флага "lower".

Вызов с двумя или более аргументами возврата p указывает, была ли матрица A положительно определенной, и chol не завершается ошибкой. Нулевое значение p указывает, что матрица A положительно определена, и R дает факторизацию. В противном случае p будет иметь положительное значение.

Если вызывается с тремя аргументами возврата, матрица A должна быть разреженной, и для матрицы A до факторизации применяется сохраняющая разреженность перестановка строк/столбцов. То есть R является факторизацией A(Q,Q) таким образом

R' * R = Q' * A * Q.

Сохраняющая разреженность перестановка обычно возвращается как матрица. Однако, при использовании необязательного флага "vector", Q будет возвращено как вектор, такой что

R' * R = A(Q, Q).

В общем случае, нижняя треугольная факторизация значительно быстрее для разреженных матриц.

См. также: hess, lu, qr, qz, schur, svd, ichol, cholinv, chol2inv, cholupdate, cholinsert, choldelete, cholshift.

: cholinv (A) ¶

Вычислить обратную симметричной положительно определенной матрицы A с использованием факторизации Холецкого.

См. также: chol, chol2inv, inv.

: chol2inv (U) ¶

Вычислить обратную симметричной положительно определенной квадратной матрицы по ее разложению Холецкого, U.

Обратите внимание, что U должна быть верхней треугольной матрицей с положительными диагональными элементами. chol2inv (U) предоставляет inv (U'*U), но она намного быстрее, чем использование inv.

См. также: chol, cholinv, inv.

: [R1, info] = cholupdate (R, u, op) ¶

Обновить или пересчитать факторизацию Холецкого.

Даны верхняя треугольная матрица R и столбец u, попытайтесь определить другую верхнюю треугольную матрицу R1 такую, что

  • R1’*R1 = R’*R + u*u’ если op равно "+"
  • R1’*R1 = R’*R - u*u’ если op равно "-"

Если op равно "-", info устанавливается в

  • 0, если пересчет выполнен успешно,
  • 1, если R’*R - u*u’ не является положительно определенным,
  • 2, если R вырожденная.

Если info отсутствует, выводится сообщение об ошибке в случаях 1 и 2.

См. также: chol, cholinsert, choldelete, cholshift.

: R1 = cholinsert (R, j, u) ¶
: [R1, info] = cholinsert (R, j, u) ¶

Обновление факторизации Холецкого, учитывая строку или столбец для вставки в исходную факторизованную матрицу.

Дана факторизация Холецкого вещественной симметричной или комплексной эрмитовой положительно определенной матрицы A = R’*R, R верхняя треугольная, возвращает факторизацию Холецкого A1, где A1(p,p) = A, A1(:,j) = A1(j,:)’ = u и p = [1:j-1,j+1:n+1]. u(j) должен быть положительным.

При возврате info устанавливается в

  • 0, если вставка выполнена успешно,
  • 1, если A1 не является положительно определенной,
  • 2, если R вырождена.

Если info отсутствует, выводится сообщение об ошибке в случаях 1 и 2.

См. также: chol, cholupdate, choldelete, cholshift.

: R1 = choldelete (R, j) ¶

Обновление факторизации Холецкого, учитывая строку или столбец для удаления из исходной факторизованной матрицы.

Дана факторизация Холецкого вещественной симметричной или комплексной эрмитовой положительно определенной матрицы A = R’*R, R верхняя треугольная, возвращает факторизацию Холецкого A(p,p), где p = [1:j-1,j+1:n+1].

См. также: chol, cholupdate, cholinsert, cholshift.

: R1 = cholshift (R, i, j) ¶

Обновление факторизации Холецкого, учитывая диапазон столбцов для сдвига в исходной факторизованной матрице.

Дана факторизация Холецкого вещественной симметричной или комплексной эрмитовой положительно определенной матрицы A = R’*R, R верхняя треугольная, возвращает факторизацию Холецкого A(p,p), где p — перестановка
p = [1:i-1, shift(i:j, 1), j+1:n] если i < j
или
p = [1:j-1, shift(j:i,-1), i+1:n] если j < i.

См. также: chol, cholupdate, cholinsert, choldelete.

: H = hess (A) ¶
: [P, H] = hess (A) ¶

Вычислить декомпозицию Гессенберга матрицы A.

Разложение Гессенберга — это P * H * P' = A , где P — квадратная унитарная матрица (P' * P = I, используя комплексно-сопряженное транспонирование) и H — верхняя матрица Гессенберга (H(i, j) = 0 forall i > j+1).

Разложение Гессенберга обычно используется как первый шаг в вычислении собственных значений, но также имеет и другие применения (см. Golub, Nash, и Van Loan, IEEE Transactions on Automatic Control, 1979).

См. также: eig, chol, lu, qr, qz, schur, svd.

: [L, U] = lu (A) ¶
: [L, U, P] = lu (A) ¶
: [L, U, P, Q] = lu (S) ¶
: [L, U, P, Q, R] = lu (S) ¶
: […] = lu (S, thresh) ¶
: y = lu (…) ¶
: […] = lu (…, "vector") ¶

Вычислить LU-разложение матрицы A.

Если A полная, то используются подпрограммы из LAPACK, а если A разреженная, то используется UMFPACK.

Результат возвращается в переупорядоченном виде, в соответствии с необязательным возвращаемым значением P. Например, для матрицы A = [1, 2; 3, 4],

[L, U, P] = lu (A)

возвращает

L =

  1.00000  0.00000
  0.33333  1.00000

U =

  3.00000  4.00000
  0.00000  0.66667

P =

  0  1
  1  0

Матрица не обязана быть квадратной.

При вызове с двумя или тремя выходными аргументами и разреженной входной матрицей, lu не пытается выполнить сохраняющие разреженность перестановки столбцов. При вызове с четвёртым выходным аргументом возвращается сохраняющая разреженность преобразование столбцов Q, такое что P * A * Q = L * U. Это предпочтительный способ вызова lu с разреженными входными матрицами.

При вызове с пятым выходным аргументом и разреженной входной матрицей, lu пытается использовать масштабирующий коэффициент R для входной матрицы, так что P * (R \ A) * Q = L * U. Это обычно приводит к более разреженному и более устойчивому разложению.

Можно указать дополнительный входной аргумент thresh, определяющий порог поворота. thresh может быть скаляром, в этом случае он определяет порог поворота UMFPACK для симметричных и несимметричных случаев. Если thresh является вектором из 2 элементов, то первый элемент определяет порог поворота для несимметричной стратегии поворота UMFPACK, а второй - для симметричной. По умолчанию используются значения, определённые в spparms ([0.1, 0.001]).

При передаче строкового аргумента "vector", lu возвращает значения P и Q как векторные значения, так что для полной матрицы A(P,:) = L * U, и R(P,:) * A(:,Q) = L * U.

С двумя выходными аргументами возвращает переупорядоченные формы верхнетреугольной и нижнетреугольной матриц, такие что A = L * U. С одним выходным аргументом y возвращается матрица, возвращаемая подпрограммами LAPACK. Если входная матрица разреженная, то матрица L встраивается в U для получения значения, аналогичного полному случаю. Для полных и разреженных матриц lu теряет информацию о перестановке.

См. также: luupdate, ilu, chol, hess, qr, qz, schur, svd.

: [L, U] = luupdate (L, U, x, y) ¶
: [L, U, P] = luupdate (L, U, P, x, y) ¶

При заданном LU-разложении вещественной или комплексной матрицы A = L*U, L нижняя единичная трапециевидная и U верхняя трапециевидная, вернуть LU-разложение A + x*y.’, где x и y — столбцовые векторы (обновление ранга 1) или матрицы с одинаковым числом столбцов (обновление ранга k).

Необязательно, для обновления с помощью поворота строк, можно использовать матрицу перестановки строк (P); в этом случае возвращается обновленная матрица перестановки. Обратите внимание, что если L, U, P — разложение LU с поворотом, полученное с помощью lu:

[L, U, P] = lu (A);

то разложение A+x*y.' можно получить либо как

[L1, U1] = lu (L, U, P*x, y)

или

[L1, U1, P1] = lu (L, U, P, x, y)

Первый вариант использует неиспользуемый алгоритм, который быстрее, но менее устойчив. Второй вариант использует более медленный алгоритм с поворотом, который более устойчив.

Случай матрицы выполняется как последовательность обновлений ранга 1; таким образом, для достаточно большого k будет быстрее и точнее пересчитать разложение с нуля.

См. также: lu, cholupdate, qrupdate.

: [Q, R] = qr (A) ¶
: [Q, R, P] = qr (A) ¶
: X = qr (A) # non-sparse A ¶
: R = qr (A) # sparse A ¶
: X = qr (A, B) # sparse A ¶
: [C, R] = qr (A, B) ¶
: […] = qr (…, 0) ¶
: […] = qr (…, "vector") ¶
: […] = qr (…, "matrix") ¶

Вычислить QR-разложение A, используя стандартные подпрограммы LAPACK.

QR-разложение имеет вид

Q * R = A

где Q — ортогональная матрица, а R — верхняя треугольная матрица.

Например, для матрицы A = [1, 2; 3, 4],

[Q, R] = qr (A)

возвращает

Q =

  -0.31623  -0.94868
  -0.94868   0.31623

R =

  -3.16228  -4.42719
   0.00000  -0.63246

произведение которых возвращает исходную матрицу

Q * R
  ⇒
     1.0000   2.0000
     3.0000   4.0000

Если требуется только одно возвращаемое значение, то это либо R, если A разреженная, либо X, такое что R = triu (X) , если A полная. (Примечание: в отличие от большинства команд, единственное возвращаемое значение не является первым, когда запрашивается несколько значений.)

Если запрашивается третий выход P, то qr вычисляет перестановку QR-разложения

Q * R = A * P

где Q — ортогональная матрица, R — верхняя треугольная, а P — матрица перестановок.

Если A плотная, перестановку QR-разложения имеет дополнительное свойство, что диагональные элементы R упорядочены по убыванию величины. Другими словами, abs (diag (R)) будут упорядочены от наибольшего к наименьшему.

Если A разреженная, P — упорядочивание столбцов A, уменьшающее заполнение. В этом случае диагональные элементы R не упорядочены по убыванию величины.

Например, для матрицы A = [1, 2; 3, 4],

[Q, R, P] = qr (A)

возвращает

Q =

  -0.44721  -0.89443
  -0.89443   0.44721

R =

  -4.47214  -3.13050
   0.00000   0.44721

P =

   0  1
   1  0

Если входная матрица A разреженная, разреженное QR-разложение вычисляется с использованием SPQR или CXSPARSE (например, если SPQR недоступен). Поскольку матрица Q вообще полная матрица, рекомендуется запрашивать только одно возвращаемое значение R. В этом случае вычисление избегает построения Q и возвращает разреженную R, такую что R = chol (A' * A).

Если A плотная, а дополнительно предоставлена матрица B, и запрошены два возвращаемых значения, то qr возвращает C, где C = Q' * B. Это позволяет вычислить приближение наименьших квадратов A \ B как

[C, R] = qr (A, B)
X = R \ C

Если A — разреженная матрица MxN и дополнительно предоставлена матрица B, возможно одно или два возвращаемых значения. Если запрошено одно возвращаемое значение X и M < N, то X — решение с минимальной 2-нормой A \ B. Если M ≥ N, X — приближение наименьших квадратов A \ B. Если запрошены два возвращаемых значения, C и R имеют такое же значение, как и в плотновом случае (C плотная, а R разреженная). Версия с одним возвращаемым параметром предпочтительнее, поскольку она использует меньше памяти и лучше обрабатывает матрицы с недостатком ранга.

Если последний аргумент — строка "vector" , то P — вектор перестановок (столбцов A) вместо матрицы перестановок. В этом случае определяющее соотношение:

Q * R = A(:, P)

Однако по умолчанию возвращается матрица перестановок, и это может быть явно указано с использованием последнего аргумента "matrix".

Если последний аргумент — скаляр 0, возвращается "economy" разложение. Если исходная матрица A имеет размер MxN и M > N, то "economy" разложение вычислит только N строк в R и N столбцов в Q и опустит нули в R. Если M ≤ N, нет никакой разницы между экономичным и стандартным разложениями. При вычислении "economy" разложения и A — плотной, выход P всегда является вектором, а не матрицей. Если A — разреженная, выход P — разреженная матрица перестановок.

Предыстория: QR-разложение применяется при решении задач наименьших квадратов

min norm (A*x - b)

для переопределённых систем уравнений (т.е., A — высокая, узкая матрица).

Перестановку QR-разложения [Q, R, P] = qr (A) позволяет построить ортогональную базу span (A).

См. также: chol, hess, lu, qz, schur, svd, qrupdate, qrinsert, qrdelete, qrshift.

: [Q1, R1] = qrupdate (Q, R, u, v) ¶

Обновить QR-разложение, задавая векторы или матрицы обновления.

Учитывая QR-разложение вещественной или комплексной матрицы A = Q*R, Q унитарная и R верхняя трапециевидная, вернуть QR-разложение A + u*v’, где u и v — столбцовые векторы (обновление ранга 1) или матрицы с одинаковым числом столбцов (обновление ранга k). Обратите внимание, что последний случай выполняется как последовательность обновлений ранга 1; таким образом, для достаточно большого k будет быстрее и точнее повторно вычислить разложение с нуля.

Поставляемое QR-разложение может быть полным (Q квадратная) или экономичным (R квадратная).

См. также: qr, qrinsert, qrdelete, qrshift.

: [Q1, R1] = qrinsert (Q, R, j, x, orient) ¶

Обновление QR-разложения с заданной строкой или столбцом для вставки в исходную факторизованную матрицу.

Учитывая QR-разложение вещественной или комплексной матрицы A = Q*R, Q унитарная и R верхняя трапециевидная, вернуть QR-разложение [A(:,1:j-1) x A(:,j:n)], где u — столбцовый вектор, который необходимо вставить в A (если orient — "col"), или QR-разложение [A(1:j-1,:);x;A(:,j:n)], где x — строковый вектор, который необходимо вставить в A (если orient — "row").

Значение по умолчанию для orient — "col". Если orient — "col", u может быть матрицей, а j вектором индексов, что приводит к QR-разложению матрицы B такой, что B(:,j) дает u и B(:,j) = [] дает A. Обратите внимание, что последний случай выполняется как последовательность k вставок; таким образом, для достаточно большого k будет быстрее и точнее повторно вычислить разложение с нуля.

Если orient — "col", предоставляемое QR-разложение может быть полным (Q квадратная) или экономичным (R квадратная).

Если orient — "row", необходимо полное разложение.

См. также: qr, qrupdate, qrdelete, qrshift.

: [Q1, R1] = qrdelete (Q, R, j, orient) ¶

Обновить QR-разложение, удалив строку или столбец из исходной факторизованной матрицы.

Учитывая QR-разложение вещественной или комплексной матрицы A = Q*R, Q унитарная и R верхняя трапециевидная, вернуть QR-разложение [A(:,1:j-1), U, A(:,j:n)], где u — столбцовый вектор, который необходимо вставить в A (если orient — "col"), или QR-разложение [A(1:j-1,:);X;A(:,j:n)], где x — строковый orient — "row"). Значение по умолчанию для orient — "col".

Если orient — "col", j может быть вектором индексов, что приводит к QR-разложению матрицы B такой, что A(:,j) = [] дает B. Обратите внимание, что последний случай выполняется как последовательность k удалений; таким образом, для достаточно большого k будет быстрее и точнее повторно вычислить разложение с нуля.

Если orient — "col", предоставляемое QR-разложение может быть полным (Q квадратная) или экономичным (R квадратная).

Если orient — "row", необходимо полное разложение.

См. также: qr, qrupdate, qrinsert, qrshift.

: [Q1, R1] = qrshift (Q, R, i, j) ¶

Обновить QR-разложение, задав диапазон столбцов для сдвига в исходной факторизованной матрице.

Дано QR-разложение вещественной или комплексной матрицы A = Q*R, где Q унитарна, а R верхняя трапециевидная, вернуть QR-разложение A(:,p), где p — перестановка
p = [1:i-1, shift(i:j, 1), j+1:n] если i < j
или
p = [1:j-1, shift(j:i,-1), i+1:n] если j < i.

См. также: qr, qrupdate, qrinsert, qrdelete.

: lambda = qz (A, B) ¶
: [AA, BB, Q, Z, V, W, lambda] = qz (A, B) ¶
: [AA, BB, Z] = qz (A, B, opt) ¶
: [AA, BB, Z, lambda] = qz (A, B, opt) ¶

Вычислить QZ-разложение для задачи обобщенных собственных значений.

Задача обобщенных собственных значений определяется как

A x = lambda B x

Функция имеет три варианта вызова:

  1. lambda = qz (A, B)

    Вычислить обобщенные собственные значения lambda.

  2. [AA, BB, Q, Z, V, W, lambda] = qz (A, B)

    Вычислить QZ-разложение, обобщенные собственные векторы и обобщенные собственные значения.

    AA = Q * A * Z, BB = Q * B * Z
    A * V = B * V * diag (lambda)
    W' * A = diag (lambda) * W' * B

    при этом Q и Z ортогональны (унитарны для комплексного случая).

  3. [AA, BB, Z {, lambda}] = qz (A, B, opt)

    Как в форме 2 выше, но позволяет упорядочить пары обобщенных собственных векторов для, например, решения дискретных алгебраических уравнений Риккати. Форма 3 недоступна для комплексных матриц и не вычисляет обобщенные собственные векторы V, W, а также ортогональную матрицу Q.

    opt

    для упорядочивания собственных значений задачи обобщенных собственных значений. Главный блок переработанной задачи содержит все собственные значения, удовлетворяющие условиям:

    "N"

    неупорядоченные (по умолчанию)

    "S"

    малые: главный блок содержит все |lambda| < 1

    "B"

    большие: главный блок содержит все |lambda| ≥ 1

    "-"

    отрицательная вещественная часть: главный блок содержит все собственные значения в открытой левой полуплоскости

    "+"

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

Примечание: qz выполняет перестановку балансировки, но не масштабирование (см. balance), что может привести к менее точным результатам, чем eig. Порядок выходных аргументов выбран для совместимости с MATLAB.

См. также: eig, gsvd, balance, chol, hess, lu, qr, qzhess, schur.

: [aa, bb, q, z] = qzhess (A, B) ¶

Вычислить гэссенберго-треугольное разложение матричной пары (A, B), возвращая aa = q * A * z, bb = q * B * z, с q и z ортогональными.

Например:

[aa, bb, q, z] = qzhess ([1, 2; 3, 4], [5, 6; 7, 8])
  ⇒ aa =
      -3.02244  -4.41741
       0.92998   0.69749
  ⇒ bb =
      -8.60233  -9.99730
       0.00000  -0.23250
  ⇒ q =
      -0.58124  -0.81373
      -0.81373   0.58124
  ⇒ z =
     Diagonal Matrix
       1   0
       0   1

Гэссенберго-треугольное разложение — это первый шаг в алгоритме QZ-разложения Молера и Стюарта.

Алгоритм взят из работы Голуба и Ван Лоана, Матричные вычисления, 2-е издание.

См. также: lu, chol, hess, qr, qz, schur, svd.

: S = schur (A) ¶
: S = schur (A, "real") ¶
: S = schur (A, "complex") ¶
: S = schur (A, opt) ¶
: [U, S] = schur (…) ¶

Вычислить разложение Шура матрицы A.

Разложение Шура определяется как

S = U' * A * U

где U — унитарная матрица (U'* U — единичная матрица), а S — верхняя треугольная матрица. Собственные значения матрицы A (и S) — диагональные элементы матрицы S. Если матрица A вещественная, то вычисляется вещественное разложение Шура, в котором матрица U ортогональна, а S — блочно-верхнетреугольная с блоками размера не более 2 x 2 по диагонали. Диагональные элементы S (или собственные значения 2 x 2 блоков, если применимо) — это собственные значения A и S.

По умолчанию для вещественных матриц используется вещественное разложение Шура. Комплексное разложение можно принудительно вычислить, передав флаг "complex".

Собственные значения, по желанию, упорядочены по диагонали в соответствии со значением opt. opt = "a" указывает, что все собственные значения с отрицательной вещественной частью должны быть перемещены в ведущий блок S (используется в are), opt = "d" указывает, что все собственные значения с модулем меньше единицы должны быть перемещены в ведущий блок S (используется в dare), а opt = "u", значение по умолчанию, указывает, что никакого упорядочивания собственных значений не должно происходить. Ведущие k столбцов U всегда охватывают подпространство, инвариантное относительно A, соответствующее k ведущим собственным значениям S.

Разложение Шура используется для вычисления собственных значений квадратной матрицы и применяется в решении алгебраических уравнений Риккати в теории управления (см. are и dare).

См. также: rsf2csf, ordschur, ordeig, lu, chol, hess, qr, qz, svd.

: [U, T] = rsf2csf (UR, TR) ¶

Преобразовать вещественную верхнюю квазитреугольную форму Шура TR в комплексную верхнюю треугольную форму Шура T.

Обратите внимание, что выполняются следующие соотношения:

UR * TR * UR' = U * T * U' и U' * U — это единичная матрица I.

Также обратите внимание, что U и T не уникальны.

См. также: schur.

: [UR, SR] = ordschur (U, S, select) ¶

Переупорядочивает вещественное разложение Шура (U,S), полученное с помощью функции schur, так, что выбранные собственные значения появляются в верхних левых диагональных блоках квазитреугольной матрицы Шура.

Логический вектор select указывает выбранные собственные значения, как они появляются по диагонали S.

Например, для матрицы A = [1, 2; 3, 4], и её разложения Шура

[U, S] = schur (A)

что возвращает

U =

  -0.82456  -0.56577
   0.56577  -0.82456

S =

  -0.37228  -1.00000
   0.00000   5.37228

Можно переупорядочить разложение, чтобы положительное собственное значение было в верхнем левом углу, сделав:

[U, S] = ordschur (U, S, [0,1])

См. также: schur, ordeig, ordqz.

: [AR, BR, QR, ZR] = ordqz (AA, BB, Q, Z, keyword) ¶
: [AR, BR, QR, ZR] = ordqz (AA, BB, Q, Z, select) ¶

Переупорядочить QZ-разложение задачи обобщенных собственных значений.

Задача обобщенных собственных значений определяется как

A x = lambda B x

Её обобщенное разложение Шура вычисляется с помощью алгоритма qz:

[AA, BB, Q, Z] = qz (A, B)

где AA, BB, Q, и Z удовлетворяют

AA = Q * A * Z, BB = Q * B * Z

Функция ordqz вычисляет унитарное преобразование QR и ZR таким образом, чтобы изменить порядок собственного значения на диагонали AA и BB. Результирующие переупорядоченные матрицы AR и BR удовлетворяют:

AR = QR * A * ZR, BR = QR * B * ZR

Функция может быть вызвана с аргументом keyword, который выбирает собственные значения в левом верхнем блоке AR и BR следующим образом:

"S", "udi"

small: ведущий блок содержит все |lambda| < 1

"B", "udo"

big: ведущий блок содержит все |lambda| ≥ 1

"-", "lhp"

отрицательная вещественная часть: ведущий блок содержит все собственные значения с открытой левой полуплоскостью

"+", "rhp"

неотрицательная вещественная часть: ведущий блок содержит все собственные значения с закрытой правой полуплоскостью

Если вместо ключевого слова задан логический вектор select, функция ordqz переупорядочивает все собственные значения k в левый блок, для которого select(k) истинно.

Примечание: Ключевые слова совместимы с ключами из qr.

См. также: eig, ordeig, qz, schur, ordschur.

: lambda = ordeig (A) ¶
: lambda = ordeig (A, B) ¶

Возвращает собственные значения квазитреугольных матриц в порядке их появления в матрице A.

Квазитреугольная матрица A обычно является результатом факторизации Шура. Если вызвана со вторым входным B, то обобщенные собственные значения пары A, B возвращаются в порядке появления матрицы A-lambda*B. Пара A, B обычно является результатом QZ-разложения.

См. также: ordschur, ordqz, eig, schur, qz.

: angle = subspace (A, B) ¶

Определяет наибольший основной угол между двумя подпространствами, охватываемыми столбцами матриц A и B.

: s = svd (A) ¶
: [U, S, V] = svd (A) ¶
: [U, S, V] = svd (A, "econ") ¶
: [U, S, V] = svd (A, 0) ¶

Вычислить сингулярное разложение A.

Сингулярное разложение определяется соотношением

A = U*S*V'

Функция svd обычно возвращает только вектор сингулярных значений. При вызове с тремя значениями возврата она вычисляет U, S и V. Например,

svd (hilb (3))

возвращает

ans =

  1.4083189
  0.1223271
  0.0026873

и

[u, s, v] = svd (hilb (3))

возвращает

u =

  -0.82704   0.54745   0.12766
  -0.45986  -0.52829  -0.71375
  -0.32330  -0.64901   0.68867

s =

  1.40832  0.00000  0.00000
  0.00000  0.12233  0.00000
  0.00000  0.00000  0.00269

v =

  -0.82704   0.54745   0.12766
  -0.45986  -0.52829  -0.71375
  -0.32330  -0.64901   0.68867

Когда задан второй аргумент, который не равен 0, svd возвращает разложение экономичного размера, исключая неиспользуемые строки или столбцы U или V.

Если второй аргумент равен точно 0, то выбор разложения основан на матрице A. Если A имеет больше строк, чем столбцов, то возвращается разложение экономичного размера, в противном случае вычисляется обычное разложение.

Примечания к алгоритму: При вычислении полного разложения (левых и правых сингулярных матриц в дополнение к сингулярным значениям) в LAPACK есть выбор из двух процедур. По умолчанию процедура, используемая Octave, это gesvd. Альтернатива — gesdd, которая в 5 раз быстрее, но может использовать больше памяти и быть неточной для некоторых входных матриц. Существует третья процедура gejsv, подходящая для лучшей точности при экстремальных масштабах. Смотрите документацию по svd_driver для получения дополнительной информации о выборе драйвера.

См. также: svd_driver, svds, eig, lu, chol, hess, qr, qz.

: val = svd_driver () ¶
: old_val = svd_driver (new_val) ¶
: svd_driver (new_val, "local") ¶

Запрос или установка базового драйвера LAPACK, используемого svd.

В настоящее время распознаются значения "gesdd", "gesvd", и "gejsv". Значение по умолчанию "gesvd".

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

Примечания к алгоритму: процедуры LAPACK gesvd и gesdd различаются только при вычислении полного сингулярного разложения (левых и правых сингулярных матриц, а также сингулярных значений). При вычислении только сингулярных значений данное обсуждение неактуально.

Новая процедура gesdd основана на алгоритме Разделяй и властвуй, который в 5 раз быстрее альтернативы gesvd, которая основана на факторизации QR. Однако новый алгоритм может использовать значительно больше памяти. Для входной матрицы MxN использование памяти составляет порядка O(min(M,N) ^ 2), в то время как альтернатива — O(max(M,N)).

Процедура gejsv использует алгоритм предварительно обусловленного Jacobi SVD. В отличие от gesvd и gesdd, в gejsv, нет шага бидиагонализации, который мог бы загрязнить точность в некоторых крайних случаях. Также gejsv известен как оптимально точный в некотором смысле. Однако скорость медленнее (однопоточная по своей сути) и использует больше памяти (O(min(M,N) ^ 2 + M + N)).

Помимо проблем со скоростью и памятью, были случаи, когда некоторые входные матрицы не были точно разложены gesdd. См. текущую ошибку https://savannah.gnu.org/bugs/?55564. До решения этих проблем с точностью в новой версии библиотеки LAPACK, драйвер по умолчанию в Octave был установлен на "gesvd".

См. также: svd.

: [housv, beta, zer] = housh (x, j, z) ¶

Вычислить вектор отражения Хаусхолдера housv для отражения x в j-ый столбец единичной матрицы, т.е.

(I - beta*housv*housv')x =  norm (x)*e(j) if x(j) < 0,
(I - beta*housv*housv')x = -norm (x)*e(j) if x(j) >= 0

Входы

x

вектор

j

индекс в векторе

z

пороговое значение для нуля (обычно должно быть число 0)

Выходы (см. Голуб и Ван Лоан):

beta

Если beta = 0, то не нужно применять отражение (zer задано в 0)

housv

вектор Хаусхолдера

: [u, h, nu] = krylov (A, V, k, eps1, pflg) ¶

Построение ортогональной базы u блочного подпространства Кристоффеля.

Блочное подпространство Кристоффеля имеет следующий вид:

[v a*v a^2*v … a^(k+1)*v]

Построение выполняется с помощью отражений Хаусхолдера для защиты от потери ортогональности.

Если V — вектор, то h содержит матрицу Хессенберга, такую что a*u == u*h+rk*ek', в которой rk = a*u(:,k)-u*h(:,k), и ek' — вектор [0, 0, …, 1] длины k. В противном случае h не имеет смысла.

Если V — вектор и k больше length (A) - 1, то h содержит матрицу Хессенберга, такую что a*u == u*h.

Значение nu — размерность охвата подпространства Кристоффеля (основанного на eps1).

Если b — вектор и k больше m-1, то h содержит матрицу Хессенберга, являющуюся факторизацией матрицы A.

Необязательный параметр eps1 — порог для нуля. Значение по умолчанию равно 1e-12.

Если необязательный параметр pflg отличен от нуля, используется строчная перестановка для улучшения числовой устойчивости. Значение по умолчанию равно 0.

Ссылка: A. Hodel, P. Misra, Частичная перестановка при вычислении подпространств Кристоффеля для больших разреженных систем, Труды 42-й конференции IEEE по принятию решений и управлению, декабрь 2003 г.

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/Matrix-Factorizations.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API