【问题标题】:Is there any other way to solve this Mathematical problem in R?有没有其他方法可以解决 R 中的这个数学问题?
【发布时间】:2019-07-20 07:46:02
【问题描述】:

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

【问题讨论】:

  • 谁能告诉我为什么数学函数没有渲染?
  • 试试j <- 0:10 看看结果。此外,如果您想计算n 的多个值的分数值,请编写一个函数compare_with <- function(n) (1 - 1.06^(n + 1))/(1 - 1.06)。然后,compare_with(c(10, 20)).
  • @RuiBarradas 非常感谢。我刚刚在我的大学听过两次讲座,所以我很好奇我们如何输入 n 的值。
  • @RuiBarradas 我想为不同的 n 值计算 sum(A)。我写的代码是j <- 1:function(n) r <- 1.06 A <- (r^j) sum(A)((c(10,20,30,40))) compare_with=(r-r^(n+1))/(1-r) compare_with(c(10,20,30,40))
  • @RuiBarradas 你能帮我处理这段代码吗n <- c(10,20,30,40) j <- 1:n r <- 1.06 A <- r^j A sum(A) 输出没有给出 4 个值,但给出了一个带有警告消息的值 In 1:n : numerical expression has 4 elements: only the first used

标签: r


【解决方案1】:
j <- 1:10
j.compare <- c(10,20)
sum(1.08^j) #sum
(1-1.08^j.compare)*((1-1.08)^-1) #compare with

【讨论】:

  • 你能帮我处理这段代码吗n &lt;- c(10,20,30,40) j &lt;- 1:n r &lt;- 1.06 A &lt;- r^j A sum(A) 输出没有给出 4 个值,而是给出了一个带有警告消息的值 In 1:n : numerical expression has 4 elements: only the first used
  • 为什么 sum 只给出一个值而不是向量?
  • 回复了上面,必须将其视为多向量输入,四个适合您的情况。
【解决方案2】:

您在compare_with 的公式中犯了一个错误。首先你定义r 但不要在compare_with 中使用它。最好使用您定义的变量,这样当您更改一个值时,您不必到处更改它,否则可能会忘记更改某些部分。

您的compare_with 错误。它应该是

compare_with=(1.06-(1.06)^(11))/(1-(1.06))

你可以证明这是几何级数的标准方法。

其次,在j的定义中绝对不需要使用c;只需j &lt;- 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)

【讨论】:

  • 我也想计算不同值 n 的总和,然后我必须进行比较。 j &lt;- 1:n r &lt;- 1.06 A &lt;- function(n)sum(r^j) A((c(10,20,30,40))) compare_with=(r-r^(n+1))/(1-r) compare_with(c(10,20,30,40))
【解决方案3】:

我相信这比 cmets 中的讨论看起来更简单。在 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

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 2021-12-19
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2012-06-28
    • 2019-09-21
    相关资源
    最近更新 更多