Spec-Zone.ru › Octave 8

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 не завершается ошибкой. Значение 0 для 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.

: Ainv = cholinv (A) ¶

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

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

: Ainv = chol2inv (R) ¶

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

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

Разложение Хессенберга обычно используется как первый шаг в вычислении собственных значений, но также имеет и другие применения (см. Голуб, Нэш и Ван Лоан, 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 (…, "econ") ¶
: […] = 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 или строка "econ", возвращается экономичное разложение. Если исходная матрица A имеет размер MxN и M > N, то экономичное разложение вычислит только N строк в R и N столбцов в Q и опустит нули в R. Если M ≤ N, то нет различий между экономичным и стандартным разложениями. При вычислении экономичного разложения и 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.

Шур-разложение квадратной матрицы A определяется как

S = U' * A * U

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

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

Собственные значения упорядочиваются вдоль диагонали в соответствии со значением opt:

opt = "a"

Переместить собственные значения с отрицательной вещественной частью в ведущий блок S. Мnemonic: "a" для алгебраических уравнений Риккати, где это упорядочивание полезно.

opt = "d"

Переместить собственные значения с модулем меньше единицы в ведущий блок S. Мnemonic: "d" для дискретных алгебраических уравнений Риккати, где это упорядочивание полезно.

opt = "u"

Неупорядоченные. Нет конкретного порядка собственных значений (по умолчанию).

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

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

: [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) ¶
: old_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 использует алгоритм сингулярного разложения Якоби с предварительным условием. В отличие от 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

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

END_OF_DOCUMENT_MARKER
: [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–2023 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/v8.1.0/Matrix-Factorizations.html

Spec-Zone.ru

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