Как возвести квадратную матрицу в отрицательную половинную степень в R?
Операция сингулярной мощности может быть выполнена на самой квадратной матрице, где указанная мощность применяется к каждому элементу матрицы. Base R имеет множество методов и процедур для вычисления мощности для любого k > 1 , где k — целочисленное значение. Однако возведение матриц в нецелую степень является сложной задачей, и количество доступных решений ограничено. Внешние пакеты могут вызываться для более надежного расчета мощности на языке программирования R.
Способ 1: использование метода sqrtm
Пакет expm в R используется для вычисления экспоненциальных степеней, логарифмических степеней и квадратных корней матриц в R. Пакет необходимо сначала установить в рабочее пространство, выполнив следующую команду:
install.packages("expm")
В пакете есть метод sqrtm(), который используется для вычисления квадратного корня из квадратных матриц в R.
sqrtm (mat)
Затем следует применение методаsolve() в R, который, как правило, решает уравнение a %*% x = b относительно x, где b может быть либо вектором, либо матрицей, либо действительным числом <0. Этот метод доступен в самой базе R.
solve( mat , power)
В случае, если степень пуста, вычисляется обратная матрица mat, то есть матрица возводится в степень -1. Следовательно, подводя итог, мы вычисляем половинную мощность с помощью метода sqrtm() и отрицаем ее с помощью методаsolve().
Код:
R
# loading the required libraries library ( "expm" ) # declaring a data frame in R mat <- matrix (1 : 9, ncol = 3) print ( "Original Matrix" ) print (mat) print ( "Power matrix" ) # computing -0.5 power of matrix pow <- solve ( sqrtm (mat)) print (pow) |
Выход:
[1] "Original Matrix" [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 [1] "Power Matrix" [,1] [,2] [,3] [1,] 0- 6980476i 0+13960950i 0- 6980475i [2,] 0+13960950i 0-27921901i 0+13960951i [3,] 0- 6980475i 0+13960951i 0- 6980475i
Метод 2: использование метода собственных векторов
Оператор ^%^ можно использовать для вычисления степени матрицы, где выполняется разложение по собственным значениям для указанной матрицы. Соответствующие ему векторы, а также значения получаются в виде массивов. Транспонирование векторов вместе с вектором значений затем используется для возврата настроенного значения функции для вычисления мощности матрицы. Однако этот метод считается непригодным для работы со случайными квадратными матрицами, поскольку он руководствуется многими ограничениями, некоторые из которых:
- Этот метод не работает для матрицы, не имеющей разложения по собственным значениям.
- Этот метод не работает для матрицы, которая не диагонализирована.
- Матрица должна быть предпочтительно симметричной.
Код:
R
# creating data for matrix vec <- c (0.088150041, 0.001017491 , 0.001017491, 0.084634294) # declaring matrix mat <- matrix (vec , nrow = 2) print ( "Original Matrix" ) print (mat) "%^%" <- function (mat, power) with ( eigen (mat), vectors %*% (values^power * t (vectors))) power <- -0.5 # raising matrix to -0.5 power pow <- mat%^%(power) print ( "Modified Matrix" ) print (pow) |
Выход:
[1] "Original Matrix" [,1] [,2] [1,] 0.088150 0.001017 [2,] 0.001017 0.084634 [1] "Modified Matrix" [,1] [,2] [1,] 3.36830 -0.02004 [2,] -0.02004 3.43755