числовой::
Функциональное исчисление для числовых квадратных матриц
Блокноты 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:
|
Процедура, представляющая скалярную функцию или, где P является набором параметров |
|
Квадратная матрица доменный тип |
|
Произвольные объекты 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)
.