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

Level of 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 это описывает выходное условие funmexitflag может иметь следующие значения:

  • 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] Дэвис, 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