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, должна иметь ряд Тейлора с бесконечным радиусом сходимости, кроме fun = @log, который рассматривается как особый случай.

Вы также можете использовать funm для оценки специальных функций, перечисленных в следующей таблице в матрице 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

Level of 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

Упорядоченное расположение формы Schur, как передано ordschur

output.T

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

Если форма Шура диагональна, то 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] Дэвис, П. И. и Н. Дж. 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.

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