числовой::
Числовая оценка ранга матрицы
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
numeric::rank(A
, <eps
>, options
)
numeric::rank(A)
возвращает целое число, указывающее на ранг матричного A.
Все записи входной матрицы должны быть числовыми, т.е. они должны быть числами с плавающей запятой или выражениями, которые могут быть преобразованы в числа с плавающей запятой.
Ранг матрицы совпадает с количеством ненулевых сингулярных значений.
Числовая оценка ранга вычисляется путем подсчета всех сингулярных значений, которые больше, чем eps smax, где s m ax является самым большим сингулярным значением. (Все меньшие сингулярные значения рассматриваются как артефакты округления и обрабатываются как нуль.)
Функция чувствительна к переменной окружения DIGITS
, который определяет числовую рабочую точность.
Мы рассматриваем квадратичную матрицу ранга 2:
A := matrix([[1, 1, I], [1, 2, 3], [2, 4, 6]]): numeric::rank(A)
Гильбертовы матрицы имеют полный ранг. Однако они чрезвычайно плохо обусловлены, и трудно вычислить их ранг численно. 10×10 Гильбертова матрица имеет ранг 10. Численно, однако, некоторые сингулярные значения являются столь маленькими, что они могут рассматриваться как нуль, приводящий к меньшему числовому рангу. В частности, со значением по умолчанию eps
=, два сингулярных значения меньше, чем eps smax, где smax
= является максимальным сингулярным значением:
A := linalg::hilbert(10): numeric::singularvalues(A)
numeric::rank(A)
Мы задаем второй аргумент eps = 10- 14
, чтобы позволить меньшим сингулярным значениям рассматриваться как ненулевые. Теперь, числовой ранг равняется 10:
numeric::rank(A, 10^(-14))
delete A:
Мы рассматриваем неквадратную матрицу ранга 1:
A := matrix([[0, 0], [I, 1], [I, 1]]): numeric::rank(A)
delete A:
Мы демонстрируем различие между аппаратными плаваниями и плаваниями программного обеспечения:
A := linalg::hilbert(15): numeric::rank(A, 10^(-20), SoftwareFloats), numeric::rank(A, 10^(-20), HardwareFloats)
delete A:
|
m ×n матрица доменный тип |
|
Относительный допуск: расцените все сингулярные значения |
|
С С По сравнению с Если никакой Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют. Если текущее значение Может быть несколько причин аппаратной арифметики, чтобы перестать работать:
Если ни Если Обратите внимание на то, что ПримечаниеДля плохо обусловленных матриц результаты, возвращенные с |
Положительное целое число.