2016-09-26 95 views
0

具有以下矩阵和向量。r中的递归乘以

x<-matrix(c(1,4,7, 
     2,5,8, 
     3,6,9), nrow = 3) 
w <- c(1,1,1) 
res <- c() 

什么是乘recursiverly,直到获得结果的愿望和作为例证的最好的方法:

res[1]<-w %*%x[1,] 
res[2]<-w %*%x[2,] 
res[3]<-w %*%x[3,] 
res[4]<-w %*%x[1,] 
res[5]<-w %*%x[2,] 

sum(res)>1000 #Multiply recursiverly till the sum of the results sum(res) goes further than 1000. 
+1

你用“while循环”标记它。这是我的建议。 – Frank

+0

@Frank我知道用“while循环”可以完成,但我不知道如何。你能举个例子告诉我如何去做。 –

+0

它们在每种编程语言中都差不多。以下是一个示例,从https://www.rosettacode.org/wiki/Loops/While#R – Frank

回答

1

这里是如何做到这一点递归

f <- function(x, w, res){ 
    if (sum(res)>1000) 
     return(res) 
    res <- c(res, x%*%w) 
    f(x,w,res) 
} 

用您的预定义对象调用它。那就是:

f(x, w, res) 

,这将给你:

# [1] 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 15 24 6 
# [62] 15 24 6 15 24 6 15 24 
0

如果你总是有相同的格式数据然后沿着线的东西

res <- min(floor(1000/cumsum(rowSums(x)))) * cumsum(rowSums(x)) + cumsum(rowSums(x)) 
min(res[res>1000]) 

会给没有回答你必须循环。可能是包裹在一个函数来处理超过1000

另一个值至少为我如何理解你的问题

+0

我想有不同于1000的值。我只是将此值作为示例发布。你可以发布如何包装在一个函数中。 –

+0

使用与@ m0h3n完全相同的方法 - 它也有1000个硬编码。 – ekstroem