числовой::
Числовые сингулярные значения матрицы
Блокноты 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
. Cf. Пример 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 пробуют. Если текущее значение Может быть несколько причин аппаратной арифметики, чтобы перестать работать:
Если ни Если Обратите внимание на то, что Запаздывающие цифры в результатах с плавающей точкой, вычисленных с ПримечаниеДля плохо обусловленных матриц результат подвергается ошибкам округления. Результаты, возвращенные с |
Упорядоченный список действительных значений с плавающей точкой.
Код реализует стандартные числовые алгоритмы из Руководства Автоматического Вычисления Уилкинсоном и Рейншем.