数列的 R 函数

Posted

技术标签:

【中文标题】数列的 R 函数【英文标题】:R function for a number sequence 【发布时间】:2022-01-17 03:36:19 【问题描述】:

我有那些序列:

    1,2,3,13,14,15,25,26,27 1,2,3,4,14,15,16,17,27,28,29,30,40,41,42,43

它们的构造如下:

    我选择一个数字M(例如:3)和一个起始数字F(例如:1); 我将这个数的 2 的幂设为 M^2 (3*3=9),它就是序列的长度; 序列中的数字是算术级数,以“GI”为增量(例如:1),但在M+1、2M+1等中的数字,位置为前一个数字+“P2I”增量(对于示例:10) [(F=)1, (1+GI=)2, (2+GI=)3, (3+P2I=)13, (13+GI=)14, ...]

如何制作打印这些序列的函数?

谢谢

【问题讨论】:

您的示例序列与您的第三条构造指令不匹配(例如,3+GI+P21 = 3+1+10 = 14,而不是 13)。如果您提供一些具有不同输入参数的输入并显示相应的输出,则解释您的指令会容易得多。对于提供的第一个示例,M = 3,F = 1,GI = 1,P21 = 10? M = 3、F = 1、GI = 2、P21 = 10 的预期输出是多少? @jblood94 你是对的。它只有 (3+P2I=)13。 M = 3, F = 1, GI = 1, P21 = 10 序列为:1 2 3 13 14 15 25 26 27 【参考方案1】:

使用sequence函数:

fSeq <- function(M, F, GI, P21) 
  sequence(rep(M, M), seq(F, by = (M - 1)*GI + P21, length.out = M), GI)


fSeq(3, 1, 1, 10)
#> [1]  1  2  3 13 14 15 25 26 27
fSeq(4, 1, 1, 10)
#>  [1]  1  2  3  4 14 15 16 17 27 28 29 30 40 41 42 43

使用rowcol

fSeq2 <- function(M, F, GI, P21) 
  m <- matrix(F - GI*M - P21, nrow = M, ncol = M)
  return(c(m + row(m)*GI + col(m)*(GI*(M - 1) + P21)))


fSeq2(3, 1, 1, 10)
#> [1]  1  2  3 13 14 15 25 26 27
fSeq2(4, 1, 1, 10)
#>  [1]  1  2  3  4 14 15 16 17 27 28 29 30 40 41 42 43

cumsum:

fSeq3 <- function(M, F, GI, P21) 
  cumsum(c(F - P21 + GI, rep(GI, M^2 - 1)) + c(P21 - GI, rep(0, M - 1)))


fSeq3(3, 1, 1, 10)
#> [1]  1  2  3 13 14 15 25 26 27
fSeq3(4, 1, 1, 10)
#>  [1]  1  2  3  4 14 15 16 17 27 28 29 30 40 41 42 43

【讨论】:

不使用序列功能可以吗? 当然。有很多方法可以做到这一点。查看更新后的答案。 @GregorThomas 不是作业,只是为了消遣。 非常令人惊讶。 “好的,但现在不使用sequence 似乎非常适合家庭作业。

以上是关于数列的 R 函数的主要内容,如果未能解决你的问题,请参考以下文章

算法学习三分法

使用 R 中的多参数用户定义函数将列添加到数据框中

Codeforces Round #407 C

数值算法:无约束优化之一维搜索方法之黄金分割法斐波那契数列法

R的基础学习

编写一递归函数求斐波那契数列的前40项