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){
+ 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,]   10    1    0    0
[3,]   46   10    1    0 
[4,]  146   46   10    1

这是一个不同于我的计算器得到的值,我试图找出我做错了什么。任何帮助都是感激的!

我们可以library(expm)中使用%^%

library(expm)
A%*%(A%^%3)

在函数中使用

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

根据?matpow

中的描述

计算矩阵的k次幂。而x^k是元素的次方,' x %^% k '对应于k - 1矩阵乘法,' x %% x %%…% * % x ' .


或者base R选项是Reduce%*%(但与%^%相比,这将是缓慢的。

Reduce(`%*%`,replicate(4, A, simplify=FALSE))

在函数中,

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

你计算矩阵乘积的方式有问题。我在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

我假设你想做矩阵的乘法。你必须先把矩阵相乘然后用你想要的相同的乘方相乘,所以你可以做两件事

  1. 编写矩阵乘法代码
  2. 循环代码相乘。

相关内容

  • 没有找到相关文章

最新更新