Main Content

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를 받아 x와 동일한 크기의 벡터 f를 반환해야 합니다. 여기서 f(i)x(i)에서 함수 fun이 실행되어 도출된 k번째 도함수입니다. fun으로 표시되는 함수는 특별한 경우로 취급되는 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)를 대신 사용합니다. 행렬 지수의 경우 행렬 A에 따라 expm(A) 또는 funm(A, @exp) 중 어느 것이 더 정확한지 결정됩니다.

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

로그를 계산할 때 역 스케일링과 스퀘어링(Scaling and Squaring) 메서드에 계산될 수 있는 최대 제곱근 수입니다.

양의 정수. 디폴트 값은 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(...)funm의 종료 상황을 설명하는 스칼라 exitflag를 반환합니다. exitflag는 다음과 같은 값을 가질 수 있습니다.

  • 0 — 알고리즘이 성공했습니다.

  • 1 — 하나 이상의 테일러 급수 계산이 수렴되지 않았거나, 로그의 경우 너무 많은 제곱근이 필요합니다. 그러나 계산된 F 값은 여전히 정확할 수 있습니다.

[F,exitflag,output] = funm(...)은 다음 필드를 포함하는 구조체 output을 반환합니다.

필드

설명

output.terms

output.terms(i)i번째 블록을 계산할 때 사용되는 테일러 급수 항 수에 해당하는 벡터이거나, 로그의 경우 2보다 큰 차원 행렬의 제곱근 수입니다.

output.ind

다시 정렬된 Schur 인자 T(i,j) 블록이 T(output.ind{i}, output.ind{j})에 해당하는 셀형 배열입니다.

output.ord

ordschur로 전달되는 Schur 형식의 순서

output.T

다시 정렬된 Schur 형식

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

funm에 대한 한 호출에서 함수 exp(x) + cos(x)A에서 계산하기 위해 다음 식을 사용합니다.

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] Davies, P. I. and N. J. 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, “Nineteen Dubious Ways to Compute the Exponential of a Matrix, Twenty-Five Years Later” SIAM Review 20, Vol. 45, Number 1, pp. 1-47, 2003.

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

| |