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 th производная функционального 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

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

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

options.TolBlk

Допуск к блокированию формы Шура

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

options.TolTay

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

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

options.MaxTerms

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

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

options.MaxSqrt

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

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

options.Ord

Указывает, что упорядоченное расположение Шура формирует 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) является количеством терминов Ряда Тейлора, использованных при оценке блока ith, или, в случае логарифма, количества квадратных корней из матриц размерности, больше, чем 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] Дэвис, P. I. и Н. Дж. Хигем, “Алгоритм Шура-Парлетта для вычислительных матричных функций”, SIAM J. Matrix Anal. Appl., Издание 25, Номер 2, стр 464-485, 2003.

[2] Golub, G. H. и К. Ф. ван Лоун, Матричное Вычисление, Третий Выпуск, Johns Hopkins University Press, 1996, p. 384.

[3] Moler, C. B. и К. Ф. ван Лоун, “Девятнадцать Сомнительных Способов Вычислить Экспоненциал Матрицы, Двадцать пять лет Спустя” Анализ SIAM 20, Издание 45, Номер 1, стр 1-47, 2003.

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