Вычислите общую матричную функцию
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.