числовой::

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

Блокноты 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, Interpolation, 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, Interpolation, Krylov, TaylorExpansion

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

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

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

Примечание

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

Примечание

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

Примечание

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

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

Этот метод быстр, когда x заполнен немногими собственными векторами A. Далее, если A имеет только немного кластеров подобных собственных значений, то этот метод может быть намного быстрее, чем другие методы. Cf. Пример 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