числовой::Экспоненциал матрицы
Блокноты 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 внутреннее разреженное представление полиномов.