\(a_n = 0.23, 0.046, 0.0069, 0.00092 \dots\) 試求此數列前50項的和 \(s_{50}\) 與前100項的和 \(s_{100}\)。(可參考以下程式範例,修改成符合題意的結果)

範例:

s <- 0
for (i in 1:20) {s <- s + (0.2^(i-1))*0.23}
s
## [1] 0.2875

註解:從程式執行結果(加總),不太容易看出每次加入的項為何,因此將程式第兩行調整改寫如下

for (i in 1:20) {print( (0.2^(i-1))*0.23 )}
## [1] 0.23
## [1] 0.046
## [1] 0.0092
## [1] 0.00184
## [1] 0.000368
## [1] 7.36e-05
## [1] 1.472e-05
## [1] 2.944e-06
## [1] 5.888e-07
## [1] 1.1776e-07
## [1] 2.3552e-08
## [1] 4.7104e-09
## [1] 9.4208e-10
## [1] 1.88416e-10
## [1] 3.76832e-11
## [1] 7.53664e-12
## [1] 1.507328e-12
## [1] 3.014656e-13
## [1] 6.029312e-14
## [1] 1.205862e-14

可以由執行的結果裡觀察,找到其變化的規律(從 0.23 開始,公比為 0.2 的等比數列)


不過我們要考慮的數列 \(a_n = 0.23, 0.046, 0.0069, 0.00092, \dots\),並非等比數列 ,可以簡單計算得到

\[\frac{0.046}{0.23} =0.2 ,\frac{0.0069}{0.23} =0.03, \frac{0.00092}{0.23} =0.004, \dots\]


針對觀察所得之規律性,整理並抽象化以後,轉換為下列程式碼並執行其結果,以確認程式碼所控制之變化已符合我們的想法…

for (i in 1:10) {print(0.23*i*10^(1-i))}
## [1] 0.23
## [1] 0.046
## [1] 0.0069
## [1] 0.00092
## [1] 0.000115
## [1] 1.38e-05
## [1] 1.61e-06
## [1] 1.84e-07
## [1] 2.07e-08
## [1] 2.3e-09

確認規律性的觀察無誤後,再撰寫完整之程式碼以計算此數列前50項的和 \(s_{50}\) 與前100項的和 \(s_{100}\),用指令 options(digits=22) 控制結果的有效位數為 22

options(digits=22)
s <- 0
for (i in 1:50) {s <- s + (0.23*i*10^(1-i))}
cat("S_50 =", s)
## S_50 = 0.2839506172839506
s <- 0
for (i in 1:100) {s <- s + (0.23*i*10^(1-i))}
cat("S_100 =", s)
## S_100 = 0.2839506172839506

即使有效位數取至22位,\(s_{50}\)\(s_{100}\) 顯示的結果卻完全一致,表示此數列第51-100項的總和可以忽略(之後的項亦然),計算結果為:

options(digits=22)
s <- 0
for (i in 51:100) {s <- s + (0.23*i*10^(1-i))}
cat("S_51_100 =", s)
## S_51_100 = 1.3061728395061731e-49

A pure nature is steadied by duties.

責任,可以使人性變得單純。(任重道遠)