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