numeric::singularvaluesЧисловые сингулярные значения матрицы
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
numeric::singularvalues(A, <Hard | HardwareFloats | Soft | SoftwareFloats>)
numeric::singularvalues(A) возвращает числовые сингулярные значения матричного A.
Сингулярными значениями m ×n матричный A является p = min (m, n) действительные неотрицательные квадратные корни из собственных значений A H A (для p = n) или A AH (для p = m). Эрмитовы транспонируют A, H является сопряженным комплексным числом транспонирования A.
numeric::singularvalues возвращает список действительных сингулярных значений [d 1, …, d p] отсортированный по numeric::sort, т.е. d 1 ≥ … ≥ d p ≥ 0.0.
Все записи A должно быть числовым. Числовые выражения такой как
и т.д. приняты и преобразованы в плавания. Нечисловые символьные записи приводят к ошибке.
Cat::Matrix объекты, т.е. матрицы A из матричной области, такой как Dom::Matrix(…) или Dom::SquareMatrix(…) внутренне преобразованы в массивы по выражениям через expr(A).
Сингулярные значения аппроксимированы абсолютной точностью того
, где r является самым большим сингулярным значением A. Следовательно, большие сингулярные значения должны быть вычислены правильно к DIGITS десятичные разряды. Числовые приближения маленьких сингулярных значений менее точны.
Сингулярные значения могут также быть вычислены через map ( numeric::eigenvalues( A AH), sqrt ) или map ( numeric::eigenvalues( AH A ), sqrt ), соответственно. Использование numeric::singularvalues избегает затрат на умножение матриц. Далее, стандартная программа собственного значения требует о вдвое больше DIGITS вычислить маленькие сингулярные значения с той же точностью как numeric::singularvalues. См. пример 2.
Функция чувствительна к переменной окружения DIGITS, который определяет числовую рабочую точность.
Сингулярные значения A и A H совпадают:
A := array(1..3, 1..2, [[1, 2*I], [2, 3],[3, sqrt(2)]]):
numeric::singularvalues(A)
![]()
Эрмитовы транспонируют B = A H:
B := array(1..2, 1..3, [[1, 2, 3], [-2*I, 3, sqrt(2)]]):
numeric::singularvalues(B)
![]()
delete A, B:
Мы используем numeric::eigenvalues вычислить сингулярные значения:
A := matrix([[1/15, 2/15*I],
[PI, 314159265358980/50000000000000*I],
[2, 4*I]]):Эрмитовы транспонируют B = A, H может быть вычислен методами conjugate и transpose из матричной области:
B := A::dom::conjugate(A::dom::transpose(A)):
Обратите внимание на то, что A H A положителен полуопределенный и не может иметь отрицательных собственных значений. Однако вычисление маленьких собственных значений численно плохо обусловлено, и маленькая отрицательная величина происходит должная округлить:
numeric::eigenvalues(B*A)
![]()
Следовательно, (неправильное) мнимое сингулярное значение вычисляется:
map(%, sqrt)
![]()
Мы должны увеличить DIGITS для того, чтобы вычислить это значение более точно:
DIGITS := 22: map(numeric::eigenvalues(B*A), sqrt)
![]()
С numeric::singularvalues, стандартная точность достаточна:
DIGITS := 10: numeric::singularvalues(A, SoftwareFloats)
![]()
numeric::singularvalues(A, HardwareFloats)
![]()
delete A, B:
Мы демонстрируем использование аппаратных плаваний. Гильбертовы матрицы известно плохо обусловлены: расчет маленьких сингулярных значений подвергается серьезным эффектам округления. В следующих результатах, обоих с HardwareFloats а также с SoftwareFloats, маленькие сингулярные значения во власти числового округления. Следовательно, результаты с HardwareFloats не согласитесь от тех с с SoftwareFloats:
numeric::singularvalues(linalg::hilbert(13))
![]()
A := linalg::hilbert(15): numeric::singularvalues(A, HardwareFloats); numeric::singularvalues(A, SoftwareFloats)
![]()
![]()
delete A:
|
Числовая матрица доменный тип |
|
С С По сравнению с Если никакой Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют. Если текущее значение Может быть несколько причин аппаратной арифметики, чтобы перестать работать:
Если никакой Если Обратите внимание на то, что Запаздывающие цифры в результатах с плавающей точкой вычисляются с ПримечаниеДля плохо обусловленных матриц результат подвергается ошибкам округления. Результаты возвращены с |
Упорядоченный список действительных значений с плавающей точкой.
Код реализует стандартные числовые алгоритмы из Руководства Автоматического Расчета Уилкинсоном и Рейншем.