还有其他方法可以解决R中的这个数学问题吗?

时间:2019-07-20 07:46:02

标签: r

计算$\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 

3 个答案:

答案 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