Вычислить общую матричную функцию
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 = @log, что рассматривается как особый случай.
Также можно использовать funm для оценки специальных функций, перечисленных в следующей таблице в матрице A.
Функция | Синтаксис для оценки функции в матрице A |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Для матричных квадратных корней используйте sqrtm(A) вместо этого. Для степеней матрицы, которые из expm(A) или funm(A, @exp) - чем точнее зависит от матрицы A.
Функция, представленная fun должен иметь ряд Тейлора с бесконечным радиусом сходимости. Исключение: @log, что рассматривается как особый случай. Параметризация функций объясняет, как предоставить дополнительные параметры функции fun, при необходимости.
F = funm(A,fun,options) устанавливает параметры алгоритма в значения в структуре options.
В следующей таблице перечислены поля options.
Область | Описание | Ценности |
|---|---|---|
| Уровень отображения |
|
| Допуск для блокировки формы 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 со следующими полями:
Область | Описание |
|---|---|
| Вектор, для которого |
| Массив ячеек, для которого |
| Порядок формы Щура, переданной |
| Переупорядоченная форма Шура |
Если форма Шура диагональна, то 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] Дейвис, П. И. и Н. Дж. Хайам, «Алгоритм Шура-Парлетта для вычисления матричных функций», SIAM J. Matrix Anal. Appl., Vol. 25, Number 2, pp. 464-485, 2003.
[2] Голуб, Г. Х. и К. Ф. Ван Займ, Matrix Computation, Third Edition, Johns Hopkins University Press, 1996, p. 384.
[3] Молер, К. Б. и К. Ф. Ван Займ, «Девятнадцать сомнительных способов вычисления экспоненциальности матрицы, двадцать пять лет спустя», SIAM Review 20, Vol. 45, Number 1, pp. 1-47, 2003.