2017-10-24 6 views
5

シーケンスの合計を計算する機能は、私はシーケンスは、以下の場合、2つの入力(1および11)を持つことになります</p> <p>R.にこのシーケンスの合計を計算しようとしています

1 + (1 * 2/3) + (1 * 2/3 * 4/5) + (1 * 2/3 * 4/5 * 6/7) + ....................(1 *......10/11) 

私は自分自身を定義することがここに行く方法だと思う。

+0

をこの配列は、任意の数学的な名前を持っていますか? – amrrs

+1

この用語 '(1 * 2/3)'はありませんか? – Jimbou

+0

@Jimbouはい申し訳ありませんが、質問を更新しました。ありがとう – Sid29

答えて

5

あなたはちょうどここに昔ながらのループを使用して試みることができる:あなたがより高い値に1から、あなたが望む任意の値にnum_termsを設定することができます

sum <- 0 
num_terms <- 6 
for (i in 1:num_terms) { 
    y <- 1 
    if (i > 1) { 
     for (j in 1:(i-1)) { 
      y <- y * (j*2/(j*2 + 1)) 
     } 
    } 
    sum <- sum + y 
} 

。この場合、ご質問の中で要求された数の番号であるため、私は6という用語を使用しています。

誰かがこのコードスニペット全体を1行に縮小しますが、ここでは明示的なループが正当化されています。

Demo

+0

ありがとうございます:) – Sid29

3

私のアプローチ:

# input 
start <- 1 
n <- 5 # number of terms 

end <- start + n*2 

result <- start 
to_add <- start 

for (i in (start + 1):(end-1)) { 
    to_add <- to_add * (i/(i + 1)) 
    result <- result + to_add 
} 

できます:ここで

は、検証目的のための用語のそれぞれで使用されている値を出力し、デモへのリンクであり、

> result 
[1] 4.039755 
+0

これは、あなたが意図した結果を与えるものではありません。たとえば、 'start = 1'と' end = 2'の場合、forループの境界は 'for(i in 2:1)'になります。 –

+0

Hmm true。入力が開始番号とそれに続く語数になるようにコードを修正しました – brettljausn

1

内側の用語を生成するcumprodc(1, seq(2, 10, 2))/c(1, seq(3, 11, 2)) 1、2/3、4/5、6/7、8/9、10/11とcumprod累積積をとるシーケンスを生成し、ここ

sum(cumprod(c(1, seq(2, 10, 2))/c(1, seq(3, 11, 2)))) 
[1] 3.4329 

あります。この結果はsumで合計されます。返される結果は、受け入れられた回答の結果と同じです。

+0

これは私のコメント 'a < - seq(1、11、2);と同じです。 sum(c(1、cumprod((a-1)[ - 1]))/ cumprod(a)) ' – Jimbou

+0

@Jimbouはい。私はこの答えを見つけて投稿した後、そのコメントを見ました。あなたの答えに追加したい場合は、私に知らせてください、私はそれを削除します。 – lmo

1

あなたが試すことができます:

library(tidyverse) 
Result <- tibble(a=seq(1, 11, 2)) %>% 
    mutate(b=lag(a, default = 0)+1) %>% 
    mutate(Prod=cumprod(b)/cumprod(a)) %>% 
    mutate(Sum=cumsum(Prod)) 
Result 
    # A tibble: 6 x 4 
     a  b  Prod  Sum 
    <dbl> <dbl>  <dbl> <dbl> 
1  1  1 1.0000000 1.000000 
2  3  2 0.6666667 1.666667 
3  5  4 0.5333333 2.200000 
4  7  6 0.4571429 2.657143 
5  9  8 0.4063492 3.063492 
6 11 10 0.3694084 3.432900 

# and some graphical analysis 
Result %>% 
    ggplot(aes(as.factor(a), Prod, group=1)) + 
    geom_col(aes(as.factor(a), Sum), alpha=0.4)+ 
    geom_point() + 
    geom_line() 

enter image description here

関連する問題