exponenta event banner

funm

Вычислить общую матричную функцию

Синтаксис

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

exp

funm(A, @exp)

log

funm(A, @log)

sin

funm(A, @sin)

cos

funm(A, @cos)

sinh

funm(A, @sinh)

cosh

funm(A, @cosh)

Для матричных квадратных корней используйте sqrtm(A) вместо этого. Для степеней матрицы, которые из expm(A) или funm(A, @exp) - чем точнее зависит от матрицы A.

Функция, представленная fun должен иметь ряд Тейлора с бесконечным радиусом сходимости. Исключение: @log, что рассматривается как особый случай. Параметризация функций объясняет, как предоставить дополнительные параметры функции fun, при необходимости.

F = funm(A,fun,options) устанавливает параметры алгоритма в значения в структуре options.

В следующей таблице перечислены поля options.

Область

Описание

Ценности

options.Display

Уровень отображения

'off' (по умолчанию), 'on', 'verbose'

options.TolBlk

Допуск для блокировки формы Schur

Положительный скаляр. Значение по умолчанию: 0.1.

options.TolTay

Допуск окончания для оценки серии диагональных блоков Тейлора

Положительный скаляр. Значение по умолчанию: eps.

options.MaxTerms

Максимальное количество терминов серии Тейлора

Положительное целое число. Значение по умолчанию: 250.

options.MaxSqrt

При вычислении логарифма вычисляется максимальное количество квадратных корней в методе обратного масштабирования и возведения в квадрат.

Положительное целое число. Значение по умолчанию: 100.

options.Ord

Указывает порядок формы Schur T.

Вектор длины length(A). options.Ord(i) - индекс блока, в который T(i,i) размещается. Значение по умолчанию: [].

F = funm(A,fun,options,p1,p2,...) пропускает дополнительные входы p1,p2,... к функции.

[F,exitflag] = funm(...) возвращает скаляр exitflag который описывает условие выхода funm. exitflag могут иметь следующие значения:

  • 0 - Алгоритм оказался успешным.

  • 1 - Одна или несколько оценок рядов Тейлора не сошлись, или, в случае логарифма, требуется слишком много квадратных корней. Однако вычисленное значение F может быть все еще точным.

[F,exitflag,output] = funm(...) возвращает структуру output со следующими полями:

Область

Описание

output.terms

Вектор, для которого output.terms(i) - число членов рядов Тейлора, используемых при оценке i-го блока, или, в случае логарифма, число квадратных корней матриц размерности больше 2.

output.ind

Массив ячеек, для которого (i,j) блок переупорядоченного коэффициента Шура T является T(output.ind{i}, output.ind{j}).

output.ord

Порядок формы Щура, переданной ordschur

output.T

Переупорядоченная форма Шура

Если форма Шура диагональна, то output = struct('terms',ones(n,1),'ind',{1:n}).

Примеры

Пример 1

Следующая команда вычисляет синус матрицы магической матрицы 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

Пример 2

Заявления

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)).

Пример 3

Вычисление функции 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.

Представлен до R2006a