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