Вычислите факторизации численно

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Для числовых функций факторизации можно использовать HardwareFloats, SoftwareFloats и опции Symbolic. Для получения информации об этих опциях смотрите раздел Numeric Determinant. Для получения дополнительной информации смотрите, что страницы справки числовых функций предусмотрели каждую конкретную функцию факторизации.

Разложение Холесского

Разложение Холесского Эрмитовой (самопримыкающей) положительной определенной матрицы является продуктом нижнего треугольного матричного L, и его Эрмитовы транспонируют L H: A = L  LH. Эрмитовы транспонируют матрицы, сопряженное комплексное число транспонировать. Для действительных симметричных положительных определенных матриц, A = L  LT, где L T является транспонированием L.

Можно выполнить факторизацию Холесского комплексных матриц символически при помощи linalg::factorCholesky или численно при помощи numeric::factorCholesky. Например, создайте следующее 2×2 матрица:

A := matrix([[sin(1), I], [-I, exp(2)]])

Во-первых, вычислите разложение Холесского той матрицы при помощи символьной функции linalg::factorCholesky:

L := linalg::factorCholesky(A)

Теперь, вычислите разложение Холесского при помощи символьной функции numeric::factorCholesky:

L := numeric::factorCholesky(A)

При использовании numeric::factorCholesky можно предотвратить преобразование данных к числам с плавающей запятой и, поэтому, получить символьный результат при помощи опции Symbolic:

L := numeric::factorCholesky(A, Symbolic)

Продукт треугольной матрицы, которую транспонируют L и его Эрмитово, дает исходный матричный A:

testeq(A = L*htranspose(L))

Разложение LU

LU-факторизация выражает m ×n матричный A как продукт нижнего треугольного матричного L и верхней треугольной матрицы U: A = LU. Кроме того, разложение LU может включить матрицу перестановок строки: PA = LU. Чтобы вычислить разложение LU матрицы численно, используйте функцию numeric::factorLU. Например, создайте следующее 4×4 матрица Теплица:

T := linalg::toeplitz(4, [1, 2, 3, 4, 5])

Используйте функцию numeric::factorLU, чтобы вычислить разложение LU матричного T численно:

[L, U, p] := numeric::factorLU(T)

Вместо того, чтобы возвратить матрицу перестановок P, MuPAD® возвращает список p с числами, соответствующими обменам строки в матричном T. Для n ×n матрица, список p представляет следующую матрицу перестановок с индексами i и j в пределах от 1 к n:

.

Используя это выражение, восстановите матрицу перестановок P из списка p:

P := matrix(4, 4):
for i from 1 to 4 do
   P[i, p[i]] := 1
end_for:
P

Более эффективно вычислите результат применения матрицы перестановок к A, не восстанавливая саму матрицу перестановок:

PT := matrix(4, 4):
for i from 1 to 4 do
  PT[i, 1..4] := T[p[i], 1..4]
end_for:
PT

В точности с плавающей точкой продукте нижнего треугольного матричного L и верхней треугольной матрицы U является исходный матричный A со строками, которыми обмениваются согласно матрице перестановок P:

float(PT) = L*U

Символьная функция LU-факторизации использует различную вертящуюся стратегию, чем числовая функция LU-факторизации. Поэтому символьная функция может возвратить различные результаты для той же матрицы:

linalg::factorLU(T)

Разложение QR

QR-факторизация выражает m ×n матричный A можно следующим образом: A = Q*R. Здесь Q является m ×m унитарная матрица, и R является m ×n верхняя треугольная матрица. Если компоненты A являются вещественными числами, Q является ортогональной матрицей. Чтобы вычислить разложение QR матрицы численно, используйте функцию numeric::factorQR. Например, создайте следующее 3×3 матрица Вандермонда:

V := linalg::vandermonde([2, PI, 1/3])

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

[Q, R] := linalg::factorQR(V)

Чтобы получить более короткий ответ, аппроксимируйте этот результат числами с плавающей запятой:

[Q, R] := float([Q, R])

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

[Q, R] := numeric::factorQR(V)

В точности с плавающей точкой продукт Q и R дает оригиналу 3×3 матричный V Вандермонда:

float(V) = Q*R

Сингулярное разложение

Сингулярное разложение выражает m ×n матричный A можно следующим образом: A = U  S VH. Здесь S является m ×n диагональная матрица с сингулярными значениями A на ее диагонали. Столбцы m ×m матричный U являются оставленными сингулярными векторами для соответствующих сингулярных значений. Столбцы n ×n матричный V являются правильными сингулярными векторами для соответствующих сингулярных значений. V H является Эрмитовым, транспонируют (сопряженное комплексное число транспонирования) V.

Чтобы вычислить сингулярное разложение матрицы, используйте функция numeric::singularvectors или numeric::svd. Эти две функции эквивалентны. Например, вычислите сингулярное разложение следующей матрицы:

A := matrix([[9, 4], [6, 8], [2, 7]]):
svd := numeric::svd(A)

Вместо того, чтобы возвратить диагональный матричный S, MuPAD возвращает список d диагональных элементов той матрицы:

d := svd[2]

Можно восстановить матричный S из того списка:

S := matrix(3, 2, d, Diagonal)

Функция numeric::svd также вычисляет остатки res U и res V для числовых сингулярных векторов. Остатки являются предполагаемыми ошибками для числовых матриц U и V:

res_U = svd[4];
res_V = svd[5]

Маленькие значения остатка указывают, что ошибки округления не значительно влияют на результаты. Чтобы подавить вычисление остатков, используйте опцию NoResidues:

svd := numeric::svd(A, NoResidues)

В точности с плавающей точкой продукт U, S и Эрмитового транспонирует V, возвращает исходный матричный A:

[U, d, V, res_U, res_V] := svd:
A = U*S*conjugate(transpose(V))