Сингулярное разложение
возвращает сингулярные значения матричного S
= svd(A
)A
в порядке убывания.
[___]
= svd(
производит разложение размера экономики A
,"econ")A
использование любой из предыдущих комбинаций выходного аргумента. Если A
m
- n
матрица, затем:
m > n
— Только первый n
столбцы U
вычисляются, и S
n
- n
.
m = n
— svd(A,"econ")
эквивалентно svd(A)
.
m < n
— Только первый m
столбцы V
вычисляются, и S
m
- m
.
Разложение размера экономики удаляет дополнительные строки или столбцы нулей из диагональной матрицы сингулярных значений, S
, наряду со столбцами в любом U
или V
это умножает те нули в выражении A = U*S*V'
. Удаление этих нулей и столбцов может улучшить время выполнения и уменьшать требования устройства хранения данных, не ставя под угрозу точность разложения.
[___]
= svd(
производит различное разложение размера экономики A
,0)m
- n
матричный A
:
m > n
— svd(A,0)
эквивалентно svd(A,"econ")
.
m <= n
— svd(A,0)
эквивалентно svd(A)
.
[___] = svd(___,
опционально задает выходной формат для сингулярных значений. Можно использовать эту опцию с любой из предыдущих комбинаций аргументов ввода или вывода. Задайте outputForm
)"vector"
возвращать сингулярные значения как вектор-столбец или "matrix"
возвращать сингулярные значения в диагональной матрице.
Вычислите сингулярные значения матрицы полного ранга.
A = [1 0 1; -1 -2 0; 0 1 -1]
A = 3×3
1 0 1
-1 -2 0
0 1 -1
s = svd(A)
s = 3×1
2.4605
1.6996
0.2391
Найдите сингулярное разложение прямоугольного матричного A
.
A = [1 2; 3 4; 5 6; 7 8]
A = 4×2
1 2
3 4
5 6
7 8
[U,S,V] = svd(A)
U = 4×4
-0.1525 -0.8226 -0.3945 -0.3800
-0.3499 -0.4214 0.2428 0.8007
-0.5474 -0.0201 0.6979 -0.4614
-0.7448 0.3812 -0.5462 0.0407
S = 4×2
14.2691 0
0 0.6268
0 0
0 0
V = 2×2
-0.6414 0.7672
-0.7672 -0.6414
Подтвердите отношение A = U*S*V'
, в точности машины.
U*S*V'
ans = 4×2
1.0000 2.0000
3.0000 4.0000
5.0000 6.0000
7.0000 8.0000
Вычислите полные разложения и разложения размера экономики прямоугольной матрицы.
A = [1 2; 3 4; 5 6; 7 8]
A = 4×2
1 2
3 4
5 6
7 8
[U,S,V] = svd(A)
U = 4×4
-0.1525 -0.8226 -0.3945 -0.3800
-0.3499 -0.4214 0.2428 0.8007
-0.5474 -0.0201 0.6979 -0.4614
-0.7448 0.3812 -0.5462 0.0407
S = 4×2
14.2691 0
0 0.6268
0 0
0 0
V = 2×2
-0.6414 0.7672
-0.7672 -0.6414
[U,S,V] = svd(A,"econ")
U = 4×2
-0.1525 -0.8226
-0.3499 -0.4214
-0.5474 -0.0201
-0.7448 0.3812
S = 2×2
14.2691 0
0 0.6268
V = 2×2
-0.6414 0.7672
-0.7672 -0.6414
Начиная с A
4 2, svd(A,"econ")
возвращает меньше столбцов в U
и меньше строк в S
по сравнению с полным разложением. Дополнительные строки нулей в S
исключены, наряду с соответствующими столбцами в U
это умножило бы с теми нулями в выражении A = U*S*V'
.
Создайте 6 6 матрицу магического квадрата и вычислите SVD. По умолчанию, svd
возвращает сингулярные значения в диагональной матрице, когда вы задаете несколько выходных параметров.
A = magic(6); [U,S,V] = svd(A)
U = 6×6
-0.4082 0.5574 0.0456 -0.4182 0.3092 0.5000
-0.4082 -0.2312 0.6301 -0.2571 -0.5627 -0.0000
-0.4082 0.4362 0.2696 0.5391 0.1725 -0.5000
-0.4082 -0.3954 -0.2422 -0.4590 0.3971 -0.5000
-0.4082 0.1496 -0.6849 0.0969 -0.5766 -0.0000
-0.4082 -0.5166 -0.0182 0.4983 0.2604 0.5000
S = 6×6
111.0000 0 0 0 0 0
0 50.6802 0 0 0 0
0 0 34.3839 0 0 0
0 0 0 10.1449 0 0
0 0 0 0 5.5985 0
0 0 0 0 0 0.0000
V = 6×6
-0.4082 0.6234 -0.3116 0.2495 0.2511 0.4714
-0.4082 -0.6282 0.3425 0.1753 0.2617 0.4714
-0.4082 -0.4014 -0.7732 -0.0621 -0.1225 -0.2357
-0.4082 0.1498 0.2262 -0.4510 0.5780 -0.4714
-0.4082 0.1163 0.2996 0.6340 -0.3255 -0.4714
-0.4082 0.1401 0.2166 -0.5457 -0.6430 0.2357
Задайте "vector"
опция, чтобы возвратить сингулярные значения в вектор-столбце.
[U,S,V] = svd(A,"vector")
U = 6×6
-0.4082 0.5574 0.0456 -0.4182 0.3092 0.5000
-0.4082 -0.2312 0.6301 -0.2571 -0.5627 -0.0000
-0.4082 0.4362 0.2696 0.5391 0.1725 -0.5000
-0.4082 -0.3954 -0.2422 -0.4590 0.3971 -0.5000
-0.4082 0.1496 -0.6849 0.0969 -0.5766 -0.0000
-0.4082 -0.5166 -0.0182 0.4983 0.2604 0.5000
S = 6×1
111.0000
50.6802
34.3839
10.1449
5.5985
0.0000
V = 6×6
-0.4082 0.6234 -0.3116 0.2495 0.2511 0.4714
-0.4082 -0.6282 0.3425 0.1753 0.2617 0.4714
-0.4082 -0.4014 -0.7732 -0.0621 -0.1225 -0.2357
-0.4082 0.1498 0.2262 -0.4510 0.5780 -0.4714
-0.4082 0.1163 0.2996 0.6340 -0.3255 -0.4714
-0.4082 0.1401 0.2166 -0.5457 -0.6430 0.2357
Если вы задаете один выходной аргумент, такой как S = svd(A)
, затем svd
поведение переключателей, чтобы возвратить сингулярные значения в вектор-столбце по умолчанию. В этом случае можно задать "matrix"
опция, чтобы возвратить сингулярные значения как диагональную матрицу.
Используйте результаты сингулярного разложения определить ранг, пробел столбца и ядро матрицы.
A = [2 0 2; 0 1 0; 0 0 0]
A = 3×3
2 0 2
0 1 0
0 0 0
[U,S,V] = svd(A)
U = 3×3
1 0 0
0 1 0
0 0 1
S = 3×3
2.8284 0 0
0 1.0000 0
0 0 0
V = 3×3
0.7071 0 -0.7071
0 1.0000 0
0.7071 0 0.7071
Вычислите ранг с помощью количества ненулевых сингулярных значений.
s = diag(S); rank_A = nnz(s)
rank_A = 2
Вычислите ортонормированный базис для пробела столбца A
использование столбцов U
это соответствует ненулевым сингулярным значениям.
column_basis = U(:,logical(s))
column_basis = 3×2
1 0
0 1
0 0
Вычислите ортонормированный базис для пустого пробела A
использование столбцов V
это соответствует равным нулю сингулярным значениям.
null_basis = V(:,~s)
null_basis = 3×1
-0.7071
0
0.7071
Функции rank
orth
, и null
обеспечьте удобные способы вычислить эти количества.
A
— Введите матрицуВведите матрицу. A
может быть или квадратным или прямоугольным в размере.
Типы данных: single
| double
Поддержка комплексного числа: Да
outputForm
— Выходной формат сингулярных значений"vector"
| "matrix"
Выходной формат сингулярных значений в виде одного из этих значений:
"vector"
S
вектор-столбец. Это - поведение по умолчанию, когда вы задаете тот выход, S = svd(X)
.
"matrix"
S
диагональная матрица. Это - поведение по умолчанию, когда вы задаете несколько выходных параметров, [U,S,V] = svd(X)
.
Пример: [U,S,V] = svd(X,"vector")
возвращает S
как вектор-столбец вместо диагональной матрицы.
Пример: S = svd(X,"matrix")
возвращает S
как диагональная матрица вместо вектор-столбца.
Типы данных: char |
string
U
— Оставленные сингулярные векторыОставленные сингулярные векторы, возвращенные как столбцы матрицы.
Для m
- n
матричный A
с m > n
, разложения размера экономики svd(A,"econ")
и svd(A,0)
вычислите только первый n
столбцы U
. В этом случае, столбцы U
являются ортогональными и U
m
- n
матрица, которая удовлетворяет .
Для полных разложений, svd(A)
возвращает U
как m
- m
удовлетворение унитарной матрицы . Столбцы U
это соответствует ненулевой форме сингулярных значений набор ортонормированных векторов базиса области значений A
.
Различные машины и релизы MATLAB® может произвести различные сингулярные векторы, которые все еще численно точны. Соответствующие столбцы в U
и V
может инвертировать их знаки, поскольку это не влияет на значение выражения A = U*S*V'
.
S
Сингулярные значенияСингулярные значения, возвращенные как диагональная матрица или вектор-столбец. Сингулярные значения являются неотрицательными и возвращены в порядке убывания.
Если A
m
- n
матрица и S
диагональная матрица, затем размер S
следующие:
Разложение размера экономики svd(A,"econ")
возвращает S
как квадратная матрица порядка min([m,n])
.
Для полных разложений, svd(A)
возвращает S
с тем же размером как A
.
Для svd(A,0)
:
Если m > n
, затем S
квадратная матрица порядка min([m,n])
.
Если m < n
, затем S
имеет тот же размер как A
.
Кроме того, сингулярные значения в S
возвращены в вектор-столбце или диагональной матрице в зависимости от того, как вы вызываете svd
и ли вы задаете outputForm
опция:
Если вы вызываете svd
с одним выходом или задают "vector"
опция, затем S
вектор-столбец.
Если вы вызываете svd
с несколькими выходными параметрами или задают "matrix"
опция, затем S
диагональная матрица.
V
— Правильные сингулярные векторыПравильные сингулярные векторы, возвращенные как столбцы матрицы.
Для m
- n
матричный A
с m < n
, разложение экономики svd(A,"econ")
вычисляет только первый m
столбцы V
. В этом случае, столбцы V
являются ортогональными и V
n
- m
матрица, которая удовлетворяет .
Для полных разложений, svd(A)
возвращает V
как n
- n
удовлетворение унитарной матрицы . Столбцы V
это не соответствует ненулевой форме сингулярных значений набор ортонормированных векторов базиса пустого пробела A
.
Различные машины и релизы MATLAB могут произвести различные сингулярные векторы, которые все еще численно точны. Соответствующие столбцы в U
и V
может инвертировать их знаки, поскольку это не влияет на значение выражения A = U*S*V'
.
svd
возвращает NaN
для неличных входных параметровПоведение изменяется в R2021b
svd
возвращает NaN
значения, когда вход содержит неличные значения (Inf
или NaN
). Ранее svd
выдал ошибку, когда вход содержал неличные значения.
Указания и ограничения по применению:
Синтаксис с тремя выходами [U,S,V] = svd(X)
не поддерживается. Для трех выходных параметров необходимо задать svd(X,"econ")
или svd(X,0)
.
Для получения дополнительной информации см. Раздел "Высокие массивы".
Указания и ограничения по применению:
Генерация кода использует различный SVD
реализация, чем использование MATLAB. Поскольку сингулярное разложение не уникально, левые и правые сингулярные векторы могут отличаться от вычисленных MATLAB.
Когда входная матрица содержит неличное значение, сгенерированный код не выдает ошибку. Вместо этого выход содержит NaN
значения.
Генерация кода не поддерживает входные параметры разреженной матрицы для этой функции.
Указания и ограничения по применению:
Генерация кода использует различный SVD
реализация, чем использование MATLAB. Поскольку сингулярное разложение не уникально, левые и правые сингулярные векторы могут отличаться от вычисленных MATLAB.
Когда входная матрица содержит неличное значение, сгенерированный код не выдает ошибку. Вместо этого выход содержит NaN
значения.
Генерация кода не поддерживает входные параметры разреженной матрицы для этой функции.
backgroundPool
или ускорьте код с Parallel Computing Toolbox™ ThreadPool
.Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.
Указания и ограничения по применению:
Следующий синтаксис не поддерживается:
[__] = svd(__,outputForm)
Если входная матрица A
содержит NaN
или Inf
, затем функция возвращает ошибку.
Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите функции MATLAB Запуска с Распределенными Массивами (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.