числовой::

Числовая оценка ранга матрицы

Блокноты 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, который определяет числовую рабочую точность.

Примеры

Пример 1

Мы рассматриваем квадратичную матрицу ранга 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:

Пример 2

Мы рассматриваем неквадратную матрицу ранга 1:

A := matrix([[0, 0], 
             [I, 1], 
             [I, 1]]):
numeric::rank(A)

delete A:

Пример 3

Мы демонстрируем различие между аппаратными плаваниями и плаваниями программного обеспечения:

A := linalg::hilbert(15):
numeric::rank(A, 10^(-20), SoftwareFloats),
numeric::rank(A, 10^(-20), HardwareFloats)

delete A:

Параметры

A

m ×n матрица доменный тип DOM_ARRAY, DOM_HFARRAY, или категории Cat::Matrix

eps

Относительный допуск: расцените все сингулярные значения s A как нуль, если они удовлетворяют seps  smax, где s m ax является самым большим сингулярным значением A. Значение по умолчанию eps.

Опции

Hard, HardwareFloats, Soft, SoftwareFloats

С Hard (или HardwareFloats), вычисления сделаны с помощью быстрой аппаратной плавающей арифметики из сеанса MuPAD®. Hard и HardwareFloats эквивалентны. При использовании этой опции входные данные преобразованы в аппаратные плавания и обработаны скомпилированным кодом С. Результат повторно преобразован в плавания MuPAD и возвращен в сеанс MuPAD.

С Soft (или SoftwareFloats) вычисления являются плавающей арифметикой программного обеспечения использования купола, обеспеченной ядром MuPAD. Soft и SoftwareFloats эквивалентны. SoftwareFloats используется по умолчанию, если текущее значение DIGITS больше, чем 15 и входная матрица, A не имеет доменного типа DOM_HFARRAY.

По сравнению с SoftwareFloats, используемым ядром MuPAD, вычисление с HardwareFloats может быть много раз быстрее. Обратите внимание, однако, что точность аппаратной арифметики ограничивается приблизительно 15 цифрами. Далее, размер чисел с плавающей запятой не может быть больше, чем приблизительно 10 308 и не меньшим, чем приблизительно 10 - 308.

Если никакой HardwareFloats или SoftwareFloats не требуют явным образом, следующая стратегия используется: Если текущее значение DIGITS меньше, чем 16 или если матричный A является аппаратным плавающим массивом доменного типа DOM_HFARRAY, то аппаратную арифметику пробуют. Если это успешно, результат возвращен.

Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют.

Если текущее значение DIGITS больше, чем 15 и входная матрица, A не имеет доменного типа DOM_HFARRAY, или если одна из опций, Soft, SoftwareFloats или Symbolic заданы, MuPAD, вычисляет результат со своей арифметикой программного обеспечения, не пытаясь использовать аппаратные плавания сначала.

Может быть несколько причин аппаратной арифметики, чтобы перестать работать:

  • Текущее значение DIGITS больше, чем 15.

  • Данные содержат символьные объекты.

  • Данные содержат числа, больше, чем 10 308 или меньший, чем 10 - 308, который не может быть представлен аппаратными плаваниями.

Если ни HardwareFloats, ни SoftwareFloats не заданы, пользователю не сообщают, используются ли аппаратные плавания или плавания программного обеспечения.

Если HardwareFloats задан, но перестал работать из-за одной из причин выше, предупреждение выдано, что (намного более медленное) программное обеспечение арифметика с плавающей точкой ядра MuPAD используется.

Обратите внимание на то, что HardwareFloats может только использоваться, если все входные данные могут быть преобразованы в числа с плавающей запятой.

Примечание

Для плохо обусловленных матриц результаты, возвращенные с HardwareFloats и SoftwareFloats, могут значительно отличаться! Смотрите Пример 3.

Возвращаемые значения

Положительное целое число.

Смотрите также

Функции MuPAD