Вычислите общую матричную функцию
F = funm(A,fun)
F = funm(A,fun,options)
F = funm(A,fun,options,p1,p2,...)
[F,exitflag] = funm(...)
[F,exitflag,output] = funm(...)
F = funm(A,fun)
оценивает определяемую пользователем функцию fun
в квадратном матричном аргументе A
. F = fun(x,k)
необходимо принять вектор x
и целое число k
, и возвращает вектор f
того же размера x
, где f(i)
является k
вторая производная функции fun
оценивается в x(i)
. Функция, представленная fun, должна иметь ряд Тейлора с бесконечным радиусом сходимости, кроме fun = @log
, который рассматривается как особый случай.
Вы также можете использовать funm
для оценки специальных функций, перечисленных в следующей таблице в матрице A
.
Функция | Синтаксис для оценки функции в матрице А |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Для матричных квадратных корней используйте sqrtm(A)
вместо этого. Для матричных экспоненциалов, какие из expm(A)
или funm(A, @exp)
является ли более точным, зависит от матрицы A
.
Функция, представленная fun
должен иметь ряд Тейлора с бесконечным радиусом сходимости. Исключение составляют @log
, который рассматривается как особый случай. Параметризация функций объясняет, как предоставить дополнительные параметры функции fun
, при необходимости.
F = funm(A,fun,options)
устанавливает параметры алгоритма в значения в структуре options
.
В следующей таблице перечислены поля options
.
Область | Описание | Значения |
---|---|---|
| Level of display |
|
| Допуск для блокировки формы Schur | Положительная скалярная величина. Значение по умолчанию является |
| Допуск на разрыв для оценки ряда диагональных блоков Тейлора | Положительная скалярная величина. Значение по умолчанию является |
| Максимальное количество членов ряда Тейлора | Положительное целое число. Значение по умолчанию является |
| При вычислении логарифма максимальное количество квадратных корней вычисляется в обратном масштабировании и квадратуре метода. | Положительное целое число. Значение по умолчанию является |
| Задает упорядоченное расположение Schur | Вектор длины |
F = funm(A,fun,options,p1,p2,...)
передает дополнительные входы p1,p2,...
в функцию.
[F,exitflag] = funm(...)
возвращает скалярное exitflag
который описывает условие funm
. exitflag
может иметь следующие значения:
0
- Алгоритм был успешен.
1
- Одна или несколько оценок ряда Тейлора не сходились, или, в случае логарифма, необходимо слишком много квадратных корней. Однако вычисленное значение F
может быть все еще точным.
[F,exitflag,output] = funm(...)
возвращает структуру output
со следующими полями:
Область | Описание |
---|---|
| Вектор, для которого |
| Массив ячеек, для которого |
| Упорядоченное расположение формы Schur, как передано |
| Переупорядоченная форма Schur |
Если форма Шура диагональна, то output = struct('terms',ones(n,1),'ind',{1:n})
.
Следующая команда вычисляет матричный синус магической матрицы 3 на 3.
F=funm(magic(3), @sin) F = -0.3850 1.0191 0.0162 0.6179 0.2168 -0.1844 0.4173 -0.5856 0.8185
Операторы
S = funm(X,@sin); C = funm(X,@cos);
привести к тем же результатам в пределах ошибки округления, что и
E = expm(i*X); C = real(E); S = imag(E);
В любом случае результаты удовлетворяют S*S+C*C = I
, где I = eye(size(X))
.
Чтобы вычислить функцию exp(x) + cos(x)
при A
с одним вызовом на funm
, использование
F = funm(A,@fun_expcos)
где fun_expcos
является следующей функцией.
function f = fun_expcos(x, k) % Return kth derivative of exp + cos at X. g = mod(ceil(k/2),2); if mod(k,2) f = exp(x) + sin(x)*(-1)^g; else f = exp(x) + cos(x)*(-1)^g; end
Алгоритм funm
использование описано в [1].
[1] Дэвис, П. И. и Н. Дж. Higham, «A Schur-Parlett algorithm for computing matrix functions», SIAM J. Matrix Anal. Appl., Vol. 25, Number 2, pp. 464-485, 2003.
[2] Golub, G. H. and C. F. Van Loan, Matrix Computation, Third Edition, Johns Hopkins University Press, 1996, p. 384.
[3] Moler, C. B. and C. F. Van Loan, «Девятнадцать сомнительных способов вычисления экспоненциала матрицы, двадцать пять лет спустя» SIAM Review 20, Vol. 45, Number 1, pp. 1-47, 2003.