计算$\sum_{j=1}^{n}r^j$
,其中已为r分配了值$1.06$
,并与\frac{(1-r^{n+1})}{(1-r)} for $n=10,20$
进行比较。
这是我到目前为止所做的。
j=c(1:10)
r=1.06
A=r^j
A
sum(A)
compare_with=(1-(1.06)^(11))/(1-(1.06))
compare_with
答案 0 :(得分:2)
您在compare_with
的公式中犯了一个错误。首先,您定义r
,但不要在compare_with
中使用它。最好使用定义的变量,这样,当您更改值时,不必在整个位置进行更改,而会忘记更改某些部分。
您的compare_with
是错误的。它应该显示为
compare_with=(1.06-(1.06)^(11))/(1-(1.06))
您可以证明这是几何级数的标准方法。
第二,绝对不需要在c
的定义中使用j
;仅j <- 1:n
就足够了。并且您应该在开始之前定义n
。
写公式的一种更好的方法是
n <- 10
j <- 1:n
r <- 1.06
A <- r^j
A
sum(A)
compare_with=(r-r^(n+1))/(1-r)
compare_with
如果您遵循@Rui_Barradas的建议,则compare_with
函数应写为:
compare_with <- function(n) (r - r^(n + 1))/(1 - r)
顺便说一句:在您的问题中,您说r
被分配了值1.08
。您的计算使用值1.06
。那是什么?
其他方法
要执行您在注释中指定的操作,可以采用这种方式。
定义一个函数A
,它可以像这样为n
取值向量
A <- function(n) { Asum <- function(n) sum(r^(1:n)); sapply(n,Asum) }
然后这将做您想要的
n <- c(10,20,30,40)
compare_with(n)
A(n)
答案 1 :(得分:2)
[4, 5, 1, 2, 3]
答案 2 :(得分:1)
我认为这比评论中的讨论要简单。在R中,所有算术运算都是矢量化的,因此下面的代码适用于矢量n
。
compare_with <- function(n, r) (r - r^(n + 1))/(1 - r)
n <- c(10, 20, 30, 40)
j <- 1:10
r <- 1.06
A <- r^j
sum(A)
#[1] 13.97164
compare_with(n, r)
#[1] 13.97164 38.99273 83.80168 164.04768
如果该函数也需要在r
上进行矢量化处理,那就再没有那么复杂了。
CompareWith <- Vectorize(compare_with, "r")
r_vec <- c(1.06, 1.08)
CompareWith(n, r_vec)
# [,1] [,2]
#[1,] 13.97164 15.64549
#[2,] 38.99273 49.42292
#[3,] 83.80168 122.34587
#[4,] 164.04768 279.78104