我试图创建一个函数,一旦它被提升到一个幂,就会给我一个矩阵的值。这是我到目前为止所做的:
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
这与我的计算器得到的价值不同,而且我试图弄清楚我做错了什么。任何帮助表示赞赏!
答案 0 :(得分:3)
我们可以使用%^%
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
在一个函数中,
if (combo.childNodes.length == 0) return;
答案 1 :(得分: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
答案 2 :(得分:0)
我假设您想要进行矩阵的多重化。您必须首先将矩阵乘以然后尝试使用相同的幂来乘以它们,这样您就可以做两件事