総乗をいい感じに実装する
総乗、つまり$ \prodを綺麗に実装したい
英語だとproduct of sequenceというらしい
総乗関数
計算用の関数を別に定義しておく
関数の引数は
sequence: ベクトル
または
start : 総乗の下限
end: 総乗の上限
func: 計算する関数
...: funcに渡す引数(任意)
code:R
prod.seq = function(sequence, func, ...) {
res = sequence %>% purrr::map_dbl(func, ...) %>% prod()
return(res)
}
code:code.R
prod.seq = function(start, end, func, ...) {
range = start:end
res = range %>% purrr::map_dbl(func, ...) %>% prod()
return(res)
}
例
$ \prod_{i=1}^{5} f(i) where$ f(x; \alpha) = (x+\alpha)^2
テスト用の関数
code:R
f1 = function(x, alpha=2) {
(x+alpha)^2
}
普通にforで実装した場合
code:R
res = 1
for (i in 1:5) {
res = res * f1(i, alpha=3)
}
print(res)
code:example.R
prod.seq(start=1, end=5, func=f1, alpha=3)
=====
総和バージョンも
code:sum_seq.R
sum.seq = function(start, end, func, ...) {
range = start:end
res = range %>% purrr::map_dbl(func, ...) %>% sum()
return(res)
}
総乗 R
20230112
public