A.6 사용자의 연산자 정의 (User Defined Operator)

다음과 같이 사용자가 operator를 정의할 수도 있다. 아래의 예는 spectral decomposition 하는 함수를 operator처럼 만든 것이다.

"%^%" = function(M, x) with(eigen(M), vectors %*% (abs(values)^x * t(vectors)))
m0 = matrix(rnorm(9), ncol=3) ; m1 = crossprod(m0) ; m1
       [,1]  [,2]   [,3]
[1,]  0.384 0.381 -0.452
[2,]  0.381 1.273  0.163
[3,] -0.452 0.163  1.232
A = m1 %^% (1/3) ; A %*% A %*% A
       [,1]  [,2]   [,3]
[1,]  0.384 0.381 -0.452
[2,]  0.381 1.273  0.163
[3,] -0.452 0.163  1.232
A %^% 3
       [,1]  [,2]   [,3]
[1,]  0.384 0.381 -0.452
[2,]  0.381 1.273  0.163
[3,] -0.452 0.163  1.232
(A %^% 1.5) %^% 2
       [,1]  [,2]   [,3]
[1,]  0.384 0.381 -0.452
[2,]  0.381 1.273  0.163
[3,] -0.452 0.163  1.232
(A %^% 2) %^% 1.5
       [,1]  [,2]   [,3]
[1,]  0.384 0.381 -0.452
[2,]  0.381 1.273  0.163
[3,] -0.452 0.163  1.232
B = m1 %^% -0.5 ; solve(B %*% B)
       [,1]  [,2]   [,3]
[1,]  0.384 0.381 -0.452
[2,]  0.381 1.273  0.163
[3,] -0.452 0.163  1.232