числовой::Функциональное исчисление для числовых квадратных матриц
Блокноты 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 типа 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, который определяет числовую рабочую точность.
Мы вычисляем матричную степень 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:
Мы вычисляем квадратный корень из матрицы:
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:
Мы вычисляем
с символьным параметром t:
A := array(1..2, 1..2, [[0, 1], [-1, 0]]): numeric::fMatrix(exp@_mult, A, t*PI)

delete A:
Мы демонстрируем различие между 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:
|
Процедура, представляющая скалярную функцию |
|
Квадратная матрица доменный тип |
|
Произвольные объекты MuPAD, принятые f как дополнительные входные параметры |
|
С С По сравнению с Если никакой Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют. Если текущее значение Может быть несколько причин аппаратной арифметики, чтобы перестать работать:
Если ни Если ПримечаниеДля плохо обусловленных матриц результат подвергается ошибкам округления. Результаты, возвращенные с |
|
Отключает предупреждения |
|
Опция, заданная как Возвратите результат как матрицу доменного типа |
В зависимости от типа входной матрицы A матричный f (A) возвращен как матрица типа DOM_ARRAY, DOM_HFARRAY, Dom::Matrix() или Dom::DenseMatrix(). Если алгоритм думает, что A не является диагонализируемым, то FAIL возвращен.
Вычисляется числовая диагонализация A = X diag (λ 1, λ 2, …) X-1. Столбцы X (справа) собственные вектора A, диагональные элементы λ 1, λ 2, … являются соответствующими собственными значениями. Функциональный f сопоставлен с собственными значениями, матричный результат вычисляется
.
Матрица собственного вектора X может быть получена через numeric::eigenvectors(A)[2].
Количество условия
матрицы собственного вектора является мерой, указывающей, насколько хорошо подготовленный диагонализация матричного A. Если этот номер больше, чем 10DIGITS, то ни одна цифра данных о диагонализации не защищена.
Вызов numeric::fMatrix(exp, A) соответствует numeric::expMatrix(A, Diagonalization).