如何計算 \(1+2+3+\cdots+10,000\) 的結果? 拜科技之賜,這個問題的答案上網就可以查得到了。
也可以用公式來處理: \[1+2+\cdots+n=\frac{n(n+1)}{2} \Rightarrow 1+2+3+\cdots+10,000 = \frac{10,000(10,001)}{2} = 50,005,000\]
不過問題稍微變化一下,就沒那麼容易,也不容易找到公式了: \[51^{0.5}+52^{0.5}+\cdots+555^{0.5} = ?\] 以下用R的簡單迴圈來進行上式的計算:
sum <- 0
for (i in 51:555){sum <- sum + i^0.5}
cat("加總結果為", sum)
## 加總結果為 8489.159
或是用Python:
install.packages("reticulate", repos = "http://cran.us.r-project.org")
## package 'reticulate' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\User\AppData\Local\Temp\Rtmp2tqIvO\downloaded_packages
library(reticulate)
載入套件後可執行以下Python程式碼:
sum = 0
for i in range(51,555):
sum = sum + i**0.5
print(sum)
## 8465.600914981951
也可以控制印出每一次加總的結果(以下僅列出前十項,即\(\sqrt{51}+\sqrt{52}+\cdots+\sqrt{60}\))
sum <- 0
for (i in 51:60){sum <- sum + i^0.5 ; print(sum)}
## [1] 7.141428
## [1] 14.35253
## [1] 21.63264
## [1] 28.98111
## [1] 36.39731
## [1] 43.88062
## [1] 51.43046
## [1] 59.04623
## [1] 66.72738
## [1] 74.47334
cat
較 print
指令更有彈性之處的在於可以將字串與變數並呈。
Python作法:
sum = 0
for i in range(51,61):
sum = sum + i**0.5
print("累積至第 %d 項的總合為 %f" %(i-50,sum))
## 累積至第 1 項的總合為 7.141428
## 累積至第 2 項的總合為 14.352531
## 累積至第 3 項的總合為 21.632641
## 累積至第 4 項的總合為 28.981110
## 累積至第 5 項的總合為 36.397309
## 累積至第 6 項的總合為 43.880623
## 累積至第 7 項的總合為 51.430458
## 累積至第 8 項的總合為 59.046231
## 累積至第 9 項的總合為 66.727377
## 累積至第 10 項的總合為 74.473343
print("全部的總合為 %f" %(sum))
## 全部的總合為 74.473343
考慮以下變化:
\[2^{0.3}+4^{0.3}+6^{0.3}+\cdots+198^{0.3} = ?\] \[2^{0.3}+4^{0.6}+6^{0.9}+\cdots+198^{29.7} = ?\]
參考提示分別為:
options(digits=15)
sum <- 0
for (i in 1:99){sum <- sum + (2*i)^0.3}
cat("加總結果為", sum)
## 加總結果為 374.209953395939
以及
sum <- 0
for (i in 1:99){sum <- sum + (2*i)^(0.3*i)}
cat("加總結果為", sum)
## 加總結果為 1.91654366141522e+68
請注意我們用了指令 options(digits=15)
控制結果的有效位數。