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에서 실행되는 식 구문 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
행렬 제곱근의 경우 sqrtm(A)
를 대신 사용합니다. 행렬 지수의 경우 행렬 A
에 따라 expm(A)
또는 funm(A, @exp)
중 어느 것이 더 정확한지 결정됩니다.
fun
으로 표시되는 함수는 수렴 반경이 무한대인 테일러 급수를 가져야 합니다. @log
는 예외적으로 특별한 경우로 취급됩니다. 함수를 파라미터화하기에는 필요한 경우 fun
함수에 추가 파라미터를 제공하는 방법이 설명되어 있습니다.
F = funm(A,fun,options)
는 알고리즘의 파라미터를 구조체 options
의 값으로 설정합니다.
다음 표에는 options
의 필드가 나와 있습니다.
필드 | 설명 | 값 |
---|---|---|
| 표시 수준 |
|
| 슈어 형식 블록에 대한 허용오차 | 양의 스칼라. 디폴트 값은 |
| 대각선 블록의 테일러 급수를 계산하기 위한 종료 허용오차 | 양의 스칼라. 디폴트 값은 |
| 테일러 급수 항의 최대 수 | 양의 정수. 디폴트 값은 |
| 로그를 계산할 때 역 스케일링과 스퀘어링(Scaling and Squaring) 메서드에 계산될 수 있는 최대 제곱근 수입니다. | 양의 정수. 디폴트 값은 |
| 슈어 형식 | 길이 |
F = funm(A,fun,options,p1,p2,...)
는 추가 입력 p1,p2,...
를 함수에 전달합니다.
[F,exitflag] = funm(...)
은 funm
의 종료 상황을 설명하는 스칼라 exitflag
를 반환합니다. exitflag
는 다음과 같은 값을 가질 수 있습니다.
0
— 알고리즘이 성공했습니다.1
— 하나 이상의 테일러 급수 계산이 수렴되지 않았거나, 로그의 경우 너무 많은 제곱근이 필요합니다. 그러나 계산된F
값은 여전히 정확할 수 있습니다.
[F,exitflag,output] = funm(...)
은 다음 필드를 포함하는 구조체 output
을 반환합니다.
필드 | 설명 |
---|---|
|
|
| 다시 정렬된 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 이전에 개발됨