числовой::
Экспоненциал матрицы
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
numeric::expMatrix(A
, <mode
>, <method
>,options
) numeric::expMatrix(A
,x
, <mode
>, <method
>,options
) numeric::expMatrix(A
,X
, <mode
>, <method
>,options
)
numeric::expMatrix(A)
возвращает экспоненциал квадратной матрицы A.
numeric::expMatrix(A, x)
с векторным x возвращает вектор.
numeric::expMatrix(A, X)
с матричным X возвращает матрицу.
Если никакие не возвращаются, тип задан с помощью опции ReturnType = d
, доменный тип результата зависит от типа входной матрицы A
:
Для плотного matrixA типа Dom::DenseMatrix(Ring)
результатом является снова матрица типа Dom::DenseMatrix()
по звонку выражений.
Для всех других матриц A категории Cat::Matrix
результат возвращен как matrix
типа Dom::Matrix()
по звонку выражений. Это включает входные матрицы A
типа Dom::Matrix(Ring)
, Dom::SquareMatrix(Ring)
, Dom::MatrixGroup(Ring)
и т.д.
Компоненты A не должны содержать символьные объекты, которые не могут быть преобразованы в численные значения через float
. Числовые символьные выражения, такие как π, и т.д. приняты. Они преобразованы в плавания.
Спецификация метода, такого как TaylorExpansion
и т.д. подразумевает SoftwareFloats
, т.е. результат вычисляется через арифметику программного обеспечения ядра MuPAD®.
Diagonalization
методов и Interpolation
не работают на все матрицы (см. ниже).
С SoftwareFloats
специальные алгоритмы реализованы для бесследного 2×2 матрицы и скашиваются симметричный 3×3 матрицы. Спецификация конкретного метода не имеет никакого эффекта для таких матриц.
Если или требуется, не нужно вычислять сначала и затем умножать получившуюся матрицу с векторным/матричным x/X. В целом вызов numeric::expMatrix(A, x)
или numeric::expMatrix(A, X)
, соответственно, быстрее.
Функция чувствительна к переменной окружения DIGITS
, который определяет числовую рабочую точность.
Мы считаем нижнюю треугольную матрицу данной массивом:
A := array(1..2, 1..2, [[1, 0] , [1, PI]]): expA := numeric::expMatrix(A)
Мы считаем вектор данным списком x1
и эквивалентным 1-мерным массивом x2
, соответственно:
x1 := [1, 1]: x2 := array(1..2, [1, 1]):
Далее, эквивалентный входной вектор X типа Dom::Matrix
()
используется:
X := matrix(x1):
Следующие три вызова весь урожай вектор, представленный 2×1 массив, соответствующий типу входной матрицы A:
numeric::expMatrix(A, x1), numeric::expMatrix(A, x2, Krylov), numeric::expMatrix(A, X, Diagonalization)
Для последующей обработки массив expA
преобразован в элемент матричного доменного Dom::Matrix()
:
expA := matrix(expA):
Теперь, перегруженные арифметические операторы +
, *
, ^
и т.д. может использоваться для дальнейших вычислений:
expA*X
delete A, expA, x1, x2, X:
Мы демонстрируем различные цели точности методов. Обратите внимание на то, что арифметика программного обеспечения используется, когда метод задан:
A := array(1..3, 1..3, [[ 1000, 1, 0 ], [ 0, 1, 1 ], [1/10^100, 0, -1000]]):
Метод по умолчанию TaylorExpansion
вычисляет каждый компонент правильно:
numeric::expMatrix(A, SoftwareFloats)
Diagonalization
метода приводит к результату, который точен в том смысле, что содержит. Действительно, самые большие компоненты правильны. Однако Diagonalization
даже не получает правильный порядок значения меньших компонентов:
numeric::expMatrix(A, Diagonalization)
Обратите внимание на то, что очень чувствительно к небольшим изменениям в A. После устранения маленького нижнего треугольного элемента оба метода приводят к тому же результату с правильными цифрами для всех записей:
B := array(1..3, 1..3, [[ 1000, 1, 0 ], [ 0 , 1, 1 ], [ 0 , 0, -1000]]): numeric::expMatrix(B, SoftwareFloats)
numeric::expMatrix(B, Diagonalization)
delete A, B:
Гильбертовы матрицы имеют действительные положительные собственные значения. Для большой размерности большинство этих собственных значений является маленьким и может рассматриваться как один кластер. Следовательно, опция Krylov
полезна:
numeric::expMatrix(linalg::hilbert(100), [1 $ 100], Krylov)
|
Квадрат n ×n матрица доменный тип |
|
Вектор, представленный списком |
|
n ×m матрица доменного типа |
|
Один из флагов |
|
Один из флагов |
|
С С По сравнению с Если никакой Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют. Если текущее значение Может быть несколько причин аппаратной арифметики, чтобы перестать работать:
Если ни Если Обратите внимание на то, что Запаздывающие цифры в результатах с плавающей точкой, вычисленных с |
|
Спецификация метода подразумевает Метод
ПримечаниеМетоды ПримечаниеМетод ПримечаниеМетод Метод Этот метод быстр, когда x заполнен немногими собственными векторами A. Далее, если A имеет только немного кластеров подобных собственных значений, то этот метод может быть намного быстрее, чем другие методы. Cf. Пример 3. |
|
Отключает предупреждения |
|
Опция, заданная как Возвратите матрицу результата или вектор как матрица доменного типа |
Всеми результатами являются матрицы/векторы плавающие. Для n ×n матричный A:
numeric::expMatrix(A, method)
возвращается как n ×n матрица,
numeric::expMatrix(A, x, method)
возвращается как n ×1 матрица,
numeric::expMatrix(A, X, method)
возвращается как n ×m матрица.
Доменный тип результата зависит от доменного типа входной матрицы A, если тип возврата не требуют явным образом через ReturnType
= d
.
И. Саад, “Анализ некоторых Приближений Подпространства Крылова к Матричному Оператору возведения в степень”, SIAM Journal Числового Анализа 29 (1992).
Метод TaylorExpansion
суммирует обычный Ряд Тейлора
подходящим численно стабильным способом.
Метод Diagonalization
вычисляет диагонализацией A = T diag (λ 1, λ 2, …) T-1.
Метод Interpolation
вычисляет полиномиальный P, интерполирующий функциональный exp в собственных значениях A. Оценка матричных полиномиальных урожаев.
Метод Krylov
уменьшает A до H матрицы Хессенберга и вычисляет приближение из. В зависимости от A и x, размерность H может быть меньшей, чем размерность A.
numeric::expMatrix
использует полиномиальную арифметику, чтобы умножить матрицы и векторы. Таким образом разреженные матрицы обработаны эффективно на основе MuPAD внутреннее разреженное представление полиномов.