R中的迭代方程

R中的迭代方程,r,math,equation,R,Math,Equation,我有一个方程C.sul.f=C.sul.I+R*C.sil.I/1+R/D,其中C.sul.I=200000,C.sil.I=100,R=100,D=2130 计算要求,对于1:100000的每次迭代,前一次迭代的C.sul.f用于当前迭代的C.sul.i。本质上 迭代1->C.sul.f1=C.sul.i+R*C.sil.i/1+R/D 迭代2->C.sul.f2=C.sul.f1+R*C.sil.i/1+R/D 迭代3->C.sul.f3=C.sul.f2+R*C.sil.i/1+R/D

我有一个方程C.sul.f=C.sul.I+R*C.sil.I/1+R/D,其中C.sul.I=200000,C.sil.I=100,R=100,D=2130

计算要求,对于1:100000的每次迭代,前一次迭代的C.sul.f用于当前迭代的C.sul.i。本质上

迭代1->C.sul.f1=C.sul.i+R*C.sil.i/1+R/D

迭代2->C.sul.f2=C.sul.f1+R*C.sil.i/1+R/D

迭代3->C.sul.f3=C.sul.f2+R*C.sil.i/1+R/D

迭代n->C.sul.fn=C.sul.fn-1+R*C.sil.i/1+R/D

我可以得到一些帮助,我将如何在R中构造这个脚本吗

谢谢你的帮助


提前感谢。

这是问题的原型:


PS:注意,出于示例目的,我只计算了前5个值。对于您的情况,只需将1:5与1:100000进行交换。

这是问题的原型:


PS:注意,出于示例目的,我只计算了前5个值。对于您的情况,只需将1:5与1:100000进行交换。

niko使用Reduce有一个很好的解决方案,但对于您的示例和所有系列,我建议首先应用一点系列缩减,看看是否有一个简单的通用解决方案

更多的数学运算,更快的代码 在您的系列中,唯一的递归元素实际上是添加到上一个元素的常量值。如果你把它展开,它会变得相当明显:

C.sul.f1=C.sul.i+R*C.sil.i/1+R/D

C.sul.f2=C.sul.i+R*C.sil.i/1+R/D+R*C.sil.i/1+R/D

C.sul.f3=C.sul.i+R*C.sil.i/1+R/D+R*C.sil.i/1+R/D+R*C.sil.i/1+R/D

一般而言:

C.sul.fn=C.sul.i+n*R*C.sil.i/1+R/D

因此,对于最有效的功能,我建议:

c_sul_i <- 200000
c_sil_i <- 100
R <- 100
D <- 2130

C.sul.fn <- function(n) {
     return(C.sul.i + n * (R * C.sil.i) / (1 + R/D) )
}

sapply(1:100000,C.sul.fn)

niko使用Reduce有一个很好的解决方案,但对于您的示例和所有系列,我建议首先应用一点系列的Reduce,看看是否有一个简单的通用解决方案

更多的数学运算,更快的代码 在您的系列中,唯一的递归元素实际上是添加到上一个元素的常量值。如果你把它展开,它会变得相当明显:

C.sul.f1=C.sul.i+R*C.sil.i/1+R/D

C.sul.f2=C.sul.i+R*C.sil.i/1+R/D+R*C.sil.i/1+R/D

C.sul.f3=C.sul.i+R*C.sil.i/1+R/D+R*C.sil.i/1+R/D+R*C.sil.i/1+R/D

一般而言:

C.sul.fn=C.sul.i+n*R*C.sil.i/1+R/D

因此,对于最有效的功能,我建议:

c_sul_i <- 200000
c_sil_i <- 100
R <- 100
D <- 2130

C.sul.fn <- function(n) {
     return(C.sul.i + n * (R * C.sil.i) / (1 + R/D) )
}

sapply(1:100000,C.sul.fn)

如果您想要一个递归答案,您可以尝试定义一个用户函数f,如下所示

f <- function(n) {
  if (n==1) return(c.sul.i + (R * c.sil.i) / (1 + R/D))
  f(n-1) + (R * c.sil.i) / (1 + R/D)
}

出于效率考虑,使用数学解决方案来回答是最好的。

如果您想得到递归答案,可以尝试定义如下的用户函数f

f <- function(n) {
  if (n==1) return(c.sul.i + (R * c.sil.i) / (1 + R/D))
  f(n-1) + (R * c.sil.i) / (1 + R/D)
}

对于效率考虑,使用数学解决方案的答案是最好的。

锐利的思考,但是对于更多的性能考虑Cul-Suli i+1:N*R*CySLIII/1 +R/D,这是完全矢量化的。谢谢您的响应@ SirTain!敏锐的思维,但对于更多的性能考虑Cul-Suli i+1:N*R*CySLIII/R+R/D,这是完全矢量化的。谢谢您的响应@ SirTain!感谢您的回复@nikoThank you的回复@nikoThank you@ThomasIsCoding的后续回复。感谢@ThomasIsCoding的后续回复。