Во-первых, всегда полезно проверить документацию определенной R-функции:
?norm
дает вам, что norm()
Вычисляет матричную норму xиспользуя LAPACK.Нормой может быть единичная («O») норма, бесконечность («I»), норма Фробениуса («F»), максимальный модуль («M») среди элементов матрицы или «спектральный»или "2" -норма, определяемая значением типа.
и что только допустимые аргументы для типа равны
«O», «o» или «1» задают одну норму (максимальная абсолютная сумма столбца);
«I» или «i» задают бесконечную норму (максимальная абсолютная сумма строки);
"F" или "f" указывает норму Фробениуса (евклидова норма x, обработанную так, как если бы это был вектор);
"M" или "m" задает максимальный модульвсех элементов в х;и
«2» указывает «спектральный» или 2-норму, которая является наибольшим единственным значением (svd) x.
Второе, чтобы ответить на ваш вопрос.Вы можете самостоятельно реализовать функцию для вычисления любой Lp-нормы вектора:
lpnorm <- function(x, p){
n <- sum(abs(x)^p))^(1/p)
return(n)
}
a <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8))
lpnorm(a, 1)
# 36
norm(a, type="1")
# 36
lpnorm(a, 2)
# 14.28286
norm(a, type="2")
# 14.28286
lpnorm(a, 0.5)
# 265.8857