numeric::expMatrix

Экспоненциал матрицы

Блокноты 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:

  • Для массива A результат возвращен как массив.

  • Для hfarray A результат возвращен как hfarray.

  • Для плотного 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, который определяет числовую рабочую точность.

Примеры

Пример 1

Мы считаем нижнюю треугольную матрицу данной массивом:

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:

Пример 2

Мы демонстрируем различные цели точности методов. Обратите внимание на то, что арифметика программного обеспечения используется, когда метод задан:

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:

Пример 3

Гильбертовы матрицы имеют действительные положительные собственные значения. Для большой размерности большинство этих собственных значений мало и может рассматриваться как один кластер. Следовательно, опция Krylov полезно:

numeric::expMatrix(linalg::hilbert(100), [1 $ 100], Krylov)

Параметры

A

Квадрат n ×n матрица доменный тип DOM_ARRAY, DOM_HFARRAY, или категории Cat::Matrix

x

Вектор, представленный списком [x1, …, xn] или 1-мерный массив array(1..n, [x1, …, xn] ), или 1-мерный hfarray hfarray(1..n, [x1, …, xn] )

X

n ×m матрица доменного типа DOM_ARRAY, DOM_HFARRAY, Dom::Matrix(Ring) или Dom::DenseMatrix(Ring) с подходящим коэффициентом звонят Ring

mode

Один из флагов Hard, HardwareFloats, Soft, или SoftwareFloats

method

Один из флагов DiagonalizationИнтерполяцияkrylov , или TaylorExpansion

Опции

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 может только использоваться, если все входные данные могут быть преобразованы в числа с плавающей запятой.

Запаздывающие цифры в результатах с плавающей точкой вычисляются с HardwareFloats и SoftwareFloats может отличаться.

DiagonalizationИнтерполяцияkrylov , TaylorExpansion

Спецификация метода подразумевает SoftwareFloats, т.е. результат всегда вычисляется через арифметику программного обеспечения ядра MuPAD.

Метод TaylorExpansion алгоритм по умолчанию. Это приводит к быстрым результатам для матриц с маленькими нормами.

Метод по умолчанию TaylorExpansion вычисляет каждый отдельный компонент, к относительной точности приблизительно 10^(-DIGITS), если числовое округление не предотвращает достижение этой цели точности. Примерно разговор: все цифры всех компонентов результата надежны, чтобы округлить эффекты.

Примечание

Методы DiagonalizationИнтерполяция, и Krylov вычислите результат к относительной точности w.r.t. норма:. следовательно, если результат имеет компоненты различных порядков величины, то меньшие компоненты имеют большие относительные погрешности, чем большие компоненты. Не все цифры маленьких компонентов надежны! См. Пример 2.

Примечание

Метод Diagonalization только работает на диагонализируемые матрицы. Для матриц без основания собственных векторов, numeric::expMatrix май или производит ошибку или возвращенный результат, во власти эффектов округления. Для симметричных/Эрмитовых или skew/skew-Hermitian матриц этот метод приводит к надежным результатам.

Примечание

Метод Interpolation может стать численно неустойчивым для определенных матриц. Алгоритм пытается обнаружить такую нестабильность и остановки с сообщением об ошибке.

Метод Krylov только доступно для вычисления с векторным x. Также векторы, представленные n ×1 матрицы, приняты.

Этот метод быстр, когда x заполнен немногими собственными векторами A. Далее, если A имеет только немного кластеров подобных собственных значений, то этот метод может быть намного быстрее, чем другие методы. См. Пример 3.

NoWarning

Отключает предупреждения

ReturnType

Опция, заданная как ReturnType = d

Возвратите матрицу результата или вектор как матрица доменного типа d. Следующее возвращается, типы доступны: DOM_ARRAY, DOM_HFARRAY, Dom::Matrix(), или Dom::DenseMatrix().

Возвращаемые значения

Всеми результатами являются матрицы/векторы плавающие. Для 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 = Tdiag (λ 1, λ 2, …)  T-1.

Метод Interpolation вычисляет полиномиальный P, интерполирующий функциональный exp в собственных значениях A. Оценка матричных полиномиальных урожаев.

Метод Krylov уменьшает A до H матрицы Хессенберга и вычисляет приближение из. В зависимости от A и x, размерность H может быть меньшей, чем размерность A.

numeric::expMatrix арифметика полинома использования, чтобы умножить матрицы и векторы. Таким образом разреженные матрицы обработаны эффективно на основе MuPAD внутреннее разреженное представление полиномов.

Смотрите также

Функции MuPAD

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