R 提高矩阵的幂
我试图创建一个函数,一旦矩阵被提升到幂次,它就会给我矩阵的值。这就是我到目前为止所做的:R 提高矩阵的幂,r,if-statement,matrix,linear-algebra,R,If Statement,Matrix,Linear Algebra,我试图创建一个函数,一旦矩阵被提升到幂次,它就会给我矩阵的值。这就是我到目前为止所做的: A <- matrix(c(1,2,3,4,0,1,2,3,0,0,1,2,0,0,0,1),nrow=4,ncol=4) power <- function(A,n){ + if(n == 0){ + return(diag(4)) + }else{ + return(A%*%A^(n-1)) + } + } 这是一个不同于我的计算器得到的值,我试图找出我做错了什么。感谢您的帮助 我假设你
A <- matrix(c(1,2,3,4,0,1,2,3,0,0,1,2,0,0,0,1),nrow=4,ncol=4)
power <- function(A,n){
+ if(n == 0){
+ return(diag(4))
+ }else{
+ return(A%*%A^(n-1))
+ }
+ }
这是一个不同于我的计算器得到的值,我试图找出我做错了什么。感谢您的帮助 我假设你想对矩阵进行乘法运算。你必须先对矩阵进行乘法运算,然后尝试使用你想要的相同幂进行乘法运算,所以你可以做两件事
我假设你想对矩阵进行乘法,你必须先对矩阵进行乘法,然后试着用你想要的相同的幂对它们进行乘法,所以你可以做两件事
计算矩阵积的方式有问题。我在
power()函数中使用while循环。它只需将输入矩阵与自身相乘n
次,然后返回结果。这是一个基本的R解,它是你已经走的方向的延续
A <- matrix(c(1,2,3,4,0,1,2,3,0,0,1,2,0,0,0,1),nrow=4,ncol=4)
power <- function(A,n){
B <- diag(nrow(A))
if (n == 0) {
return(diag(nrow(A)))
} else {
while (n > 0) {
B <- A%*%B
n <- n - 1
}
return(B)
}
}
> power(A, 4)
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 8 1 0 0
[3,] 36 8 1 0
[4,] 120 36 8 1
A计算矩阵乘积的方式有问题。我在power()函数中使用while循环。它只需将输入矩阵与自身相乘n
次,然后返回结果。这是一个基本的R解,它是你已经走的方向的延续
A <- matrix(c(1,2,3,4,0,1,2,3,0,0,1,2,0,0,0,1),nrow=4,ncol=4)
power <- function(A,n){
B <- diag(nrow(A))
if (n == 0) {
return(diag(nrow(A)))
} else {
while (n > 0) {
B <- A%*%B
n <- n - 1
}
return(B)
}
}
> power(A, 4)
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 8 1 0 0
[3,] 36 8 1 0
[4,] 120 36 8 1
A我们可以使用library(expm)
在函数中使用此函数
power <- function(A,n){
if(n == 0){
return(diag(4))
}else{
return(A%*%(A%^%(n-1)))
}
}
power(A,4)
# [,1] [,2] [,3] [,4]
#[1,] 1 0 0 0
#[2,] 8 1 0 0
#[3,] 36 8 1 0
#[4,] 120 36 8 1
在功能上,
power1 <- function(A,n){
if(n == 0){
return(diag(4))
}else{
Reduce(`%*%`,replicate(n, A, simplify=FALSE))
}
}
power1(A,4)
# [,1] [,2] [,3] [,4]
#[1,] 1 0 0 0
#[2,] 8 1 0 0
#[3,] 36 8 1 0
#[4,] 120 36 8 1
power1我们可以使用library(expm)
在函数中使用此函数
power <- function(A,n){
if(n == 0){
return(diag(4))
}else{
return(A%*%(A%^%(n-1)))
}
}
power(A,4)
# [,1] [,2] [,3] [,4]
#[1,] 1 0 0 0
#[2,] 8 1 0 0
#[3,] 36 8 1 0
#[4,] 120 36 8 1
在功能上,
power1 <- function(A,n){
if(n == 0){
return(diag(4))
}else{
Reduce(`%*%`,replicate(n, A, simplify=FALSE))
}
}
power1(A,4)
# [,1] [,2] [,3] [,4]
#[1,] 1 0 0 0
#[2,] 8 1 0 0
#[3,] 36 8 1 0
#[4,] 120 36 8 1
power1预期的结果是什么output@akrun只需在R控制台中使用(A%*%A)%*%(A%*%A)
,它看起来确实不正确。^
在元素方面起作用。见A=矩阵(1:4,nrow=2);A^2;A^3
。预期的结果是什么output@akrun只需在R控制台中使用(A%*%A)%*%(A%*%A)
,它看起来确实不正确。^
在元素方面起作用。见A=矩阵(1:4,nrow=2);A^2;A^3
。