numeric::fMatrix

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

Блокноты 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 isa. Поскольку 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

Для просмотра документации необходимо авторизоваться на сайте