contents

2.5 part 2

Julia codes

for loop

code


# 2.5.for.jl
# 2022-05-05
  
r = 0.1
cfs = [500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3,
       500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3]
i =   [    0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
          10,    11,    12,    13,    14,    15,    16,    17,    18,    19]

function pv(r, cfs, i)
  v = 0
  for (x, k) in zip(cfs, i)
    v += x / (1 + r) ^ k
  end
  return v
end

println("2.5.for.jl")
println("pv = ", round(Int, pv(r, cfs, i)))
# eof

内包(comprehension)

code


# 2.5.comprehension.jl
# 2022-05-05

r = 0.1
cfs = [500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3,
       500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3]
i =   [    0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
          10,    11,    12,    13,    14,    15,    16,    17,    18,    19]

function pv(r, cfs, i)
  sum([x / (1 + r) ^ k for (x, k) in zip(cfs, i)])
end

println("2.5.comprehension.jl")
println("pv = ", round(Int, pv(r, cfs, i)))
# eof

output

ジェネレータ式(generator expression)

code


# 2.5.generator.jl
# 2022-05-05

r = 0.1
cfs = [500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3,
       500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3]
i =   [    0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
          10,    11,    12,    13,    14,    15,    16,    17,    18,    19]

function pv(r, cfs, i)
  sum(x / (1 + r) ^ k for (x, k) in zip(cfs, i))
end

println("2.5.generator.jl")
println("pv = ", round(Int, pv(r, cfs, i)))
# eof

function map

code


# 2.5.map.jl
# 2022-05-05
  
r = 0.1
cfs = [500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3,
       500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3]
i =   [    0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
          10,    11,    12,    13,    14,    15,    16,    17,    18,    19]
  
function pv(r, cfs, i)
  sum(map((x, k)-> x / (1 + r) ^ k, cfs, i))
end
  
println("2.5.map.jl")
println("pv = ", round(Int, pv(r, cfs, i)))
# eof

ドット演算子("dot" operator)

code


# 2.5.dot.jl
# 2022-05-05

r = 0.1
cfs = [500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3,
       500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3]
i =   [    0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
          10,    11,    12,    13,    14,    15,    16,    17,    18,    19]

function pv(r, cfs, i) # simple
  sum(cfs ./ (1 + r) .^ i)
end

println("2.5.dot.jl")
println("pv = ", round(Int, pv(r, cfs, i)))
# eof

function sum(f, itr)

code


# 2.5.sum.jl
# 2022-05-05

r = 0.1
cfs = [500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3,
       500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3]
i =   [    0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
          10,    11,    12,    13,    14,    15,    16,    17,    18,    19]

function pv(r, cfs, i)
  function f((x, k))
    x / (1 + r) ^ k
  end
  sum(f, zip(cfs, i))
end

println("2.5.sum.jl")
println("pv = ", round(Int, pv(r, cfs, i)))
# eof

dot syntax for vectorizing function

code


# 2.5.dot_f.jl
# 2022-5-5

function pv(r, x, k)
    x / (1 + r) ^ k
end
  
# input
r = 0.1
cfs = [500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3,
       500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3, 500e3]
i = 0:19

# dot syntax for vectorizing function
sum_pv = sum(pv.(r, cfs, i)) # dot syntax for vectorizing function

# output
println("2.5.dot_f.jl")
println("pv = $(round(Int, sum_pv))")
# eof

参考文献

  1. 近藤裕之、佐藤建太:1から始めるJuliaプログラミング、コロナ社、2020.
  2. Julia公式ページ:https://julialang.org/

history

2022-05-05 revise julia codes.
2021-05-30 add 2.5.6.jl.
2021-02-14 move history.
2020-10-24 revise.
2020-10-17 create this page.