числовой::

Функциональное исчисление для числовых квадратных матриц

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

numeric::fMatrix(f, A, p1, p2, …, options)

Описание

numeric::fMatrix(f, A) вычисляет матричный f (A) с функциональным f и квадратной матрицей A.

Если никакие не возвращаются, тип задан с помощью опции ReturnType = d, доменный тип результата зависит от типа входной матрицы A:

  • Для массива A результат возвращен как массив.

  • Для hfarray A результат возвращен как массив.

  • Для плотного матричного A типа Dom::DenseMatrix() результатом является плотная матрица типа Dom::DenseMatrix() по звонку выражений MuPAD®.

  • Для всех других матриц A категории Cat::Matrix результат возвращен как matrix типа Dom::Matrix() по звонку выражений MuPAD. Это включает входные матрицы A типа Dom::Matrix(...), Dom::SquareMatrix(...), Dom::MatrixGroup(...) и т.д.

Компоненты A не должны содержать символьные объекты, которые не могут быть преобразованы в численные значения через float. Числовые символьные выражения, такие как π, и т.д. приняты. Они преобразованы в плавания.

Примечание

Когда вы используете numeric::fMatrix, матрица должна быть диагонализируемой, и все ее элементы должны быть конвертируемыми к числам с плавающей запятой. В противном случае используйте funm.

Если numeric::fMatrix обнаруживает численно, что A не является диагонализируемым, это прерывается с сообщением об ошибке. Тем не менее, числовому алгоритму часто не удается обнаружить, что матрица не является диагонализируемой, и возвращенная матрица во власти эффектов округления. Когда usingnumeric::fMatrix, гарантируйте, что диагонализация возможна и хорошо подготовлена.

Симметричный/Эрмитов и скашивают/скашивают, Эрмитовы матрицы могут всегда быть diagonalized численно стабильным способом; numeric::fMatrix приводит к надежным числовым результатам для таких матриц.

Процедура f должна принять комплексные числа с плавающей запятой как первый аргумент. Это может возвратить произвольные выражения MuPAD, если они могут быть умножены с числами с плавающей запятой.

Параметры p1, p2, … могут быть числовыми или символьными объектами. Они должны быть приняты f как 2-й аргумент, 3-й аргумент и т.д.

В отличие от компонентов A, числовые символьные объекты, такие как π, и т.д. переданный как параметры p1, p2, …, не преобразованы в плавания.

Инверсия или возведение в степень матрицы могут быть поняты с функциями и exp, соответственно. Однако рекомендуется использовать специализированные алгоритмы numeric::inverse и numeric::expMatrix вместо этого. Также матричная оценка полиномы низкого звания должна быть сделана со стандартной матричной арифметикой, а не с numeric::fMatrix.

Взаимодействия среды

Функция чувствительна к переменной окружения DIGITS, который определяет числовую рабочую точность.

Примеры

Пример 1

Мы вычисляем матричную степень A 100:

A := array(1..2, 1..2, [[2, PI], [exp(-10), 0]]):
numeric::fMatrix(x -> x^100, A)

Также можно использовать функциональный _power, который берет экспоненту в качестве второго параметра:

numeric::fMatrix(_power, A, 100)

delete A:

Пример 2

Мы вычисляем квадратный корень из матрицы:

A := matrix([[0, 1], [-1, 1]]):
B := numeric::fMatrix(sqrt, A)

Небольшие мнимые части вызываются числовым округлением. Мы устраняем их путем извлечения действительных частей компонентов:

B := map(B, Re)

Мы проверяем, что B^2 является A. Поскольку A был передан как матрица типа Dom::Matrix(), матричный B также имеет этот тип. Мы можем вычислить квадрат перегруженной стандартной арифметикой с помощью оператора ^:

B^2

delete A, B:

Пример 3

Мы вычисляем с символьным параметром t:

A := array(1..2, 1..2, [[0, 1], [-1, 0]]):
numeric::fMatrix(exp@_mult, A, t*PI)

delete A:

Пример 4

Мы демонстрируем различие между HardwareFloats и SoftwareFloats. Диагонализация следующей матрицы плохо обусловлена. Результат во власти эффектов округления:

A := array(1..3, 1..3, [[10, 1,    1    ],
                        [ 0, 1,    1    ],
                        [ 1, 0, 10^(-14)]]):
numeric::fMatrix(ln, A, SoftwareFloats)

numeric::fMatrix(ln, A, HardwareFloats)

В следующем случае эффекты округления SoftwareFloats заставляют алгоритм думать, что матрица не может быть diagonalized. Следовательно, FAIL возвращен. С HardwareFloats, однако, вычисляется результат:

A := array(1..3, 1..3, [[   1     , 1 ,    1    ],
                        [   0     , 1 ,    1    ],
                        [ 10^(-30), 0 , 10^(-30)]]):
numeric::fMatrix(ln, A, SoftwareFloats)

numeric::fMatrix(ln, A, HardwareFloats)

delete A:

Параметры

f

Процедура, представляющая скалярную функцию или, где P является набором параметров

A

Квадратная матрица доменный тип DOM_ARRAY, DOM_HFARRAY, или категории Cat::Matrix

p1, p2, …

Произвольные объекты MuPAD, принятые f как дополнительные входные параметры

Опции

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 и SoftwareFloats, могут отличаться! Смотрите Пример 4.

NoWarning

Отключает предупреждения

ReturnType

Опция, заданная как ReturnType = d

Возвратите результат как матрицу доменного типа d. Следующее возвращается, типы доступны: DOM_ARRAY, DOM_HFARRAY, Dom::Matrix() или Dom::DenseMatrix().

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

В зависимости от типа входной матрицы A матричный f (A) возвращен как матрица типа DOM_ARRAY, DOM_HFARRAY, Dom::Matrix() или Dom::DenseMatrix(). Если алгоритм думает, что A не является диагонализируемым, то FAIL возвращен.

Алгоритмы

Вычисляется числовая диагонализация A = Xdiag (λ 1, λ 2, …)  X-1. Столбцы X (справа) собственные вектора A, диагональные элементы λ 1, λ 2, … являются соответствующими собственными значениями. Функциональный f сопоставлен с собственными значениями, матричный результат вычисляется

.

Матрица собственного вектора X может быть получена через numeric::eigenvectors(A)[2].

Количество условия матрицы собственного вектора является мерой, указывающей, насколько хорошо подготовленный диагонализация матричного A. Если этот номер больше, чем 10DIGITS, то ни одна цифра данных о диагонализации не защищена.

Вызов numeric::fMatrix(exp, A) соответствует numeric::expMatrix(A, Diagonalization).

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

Функции MuPAD