contents

2.5 part 5

キャッシュフロー流列の現在価値を集合論の考えを取り入れて計算する。

(注意)このページはMathJaxを使用しています。JavaScriptを許可して見てください。

松坂和夫:集合・位相入門 新装版、岩波書店、2018、第1章 集合と写像 §5 添数づけられた族、一般の直積、A) 元の無限列、有限列、p.43に次の記述がある。

\(n\)を1つの与えられた自然数とするとき、集合\(\{1, 2,\cdots,n\}\)から集合\(A\)への写像\(a\)を、\(A\)の元の有限列(くわしくは、長さ\(n\)の有限列)といい、これを
\(a_1, a_2, \cdots, a_n\)
あるいは\((a_i|i \in \{1,2,\cdots,n\}), (a_i|i=1,2,\cdots,n), (a_i)_{i=1,2,\cdots,n}\)などと書く。もちろん、\(a_i\)は写像\(a\)による\(i\)の像\(a(i)\)を意味するのである。

同書、第1章 集合と写像 §5 添数づけられた族、一般の直積、B) 元の族、p.44に次の記述がある。

‘元の列’をさらに一般化した概念として、‘元の族’の概念がある。
一般に、ある集合\(\Lambda\)から集合\(A\)への写像\(a\)を、しばしば、\(A\)の元の族、くわしくは、\(\Lambda\)によって添数づけられた\(A\)の元の族という。その場合、\(\Lambda\)の書く元\(\lambda\)の\(a\)による像\(a(\lambda)\)を\(a_\lambda\)と書き、\(a\)を
\((a_\lambda|\lambda \in \Lambda)\) または \((a_\lambda)_{\lambda \in \Lambda}\)
などで表す。\(a=(a_\lambda)_{\lambda \in \Lambda}\)の定義域\(\Lambda\)をこの族の添数集合(\(\Lambda\)の元を添数)ともいう。

これらの記述を練習問題2.5に適用すると、 練習問題のキャッシュフロー流列は、次のように書ける。

\begin{eqnarray} (500\times 10^3,500\times 10^3,\cdots,500\times 10^3) = (a_0, a_1, \cdots, a_{19}) \end{eqnarray}

写像\(a\)は、集合\(I=\{0, 1,\cdots, 19\}\)から実数全体の集合\(\mathbb{R}\)への写像であり、具体的には次式で表される。

\begin{eqnarray} a(i)=500 \times 10^3 \end{eqnarray}

集合\(I\)からキャッシュフロー流列\(A\)を作成し、キャッシュフロー流列\(A\)、期の集合\(I\)、金利\(r\)からキャッシュフロー流列\(A\)の現在価値\(PV\)を求めるプログラムを作成する。


上の考えで作成したPythn3のプログラムを次に示す。

# 2.5.5.py
# 2025-06-07
# r   : a rate
# I   : a period stream
# A   : a cash flow stream
# pvs : a present value stream
# pv  : a present value   

# function
def a(i): #  a : I -> R
    return 500e3
def pv(a, r, i): 
    return a / (1 + r) ** i

# input
r   = 0.1
I   = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
A   = list(map(a, I))

# calculation
pvs = list(map(lambda ai, i: pv(ai, r, i), A, I))
pv  = sum(pvs)

# output
print("2.5.5.py")
print("r=", r)
print("%10s%10s%10s" % ("i", "a", "pv"))
print("------------------------------")
for i in range(len(I)):
    print("%10d%10d%10d" % (I[i], A[i], pvs[i]))
print("------------------------------")
print("%10s%10s%10d" % (" ", "PV=", pv))
# end

上の考えで作成したGaucheのプログラムを次に示す。

; 2.5.5.scm
; 2025-06-7
;
; r : rate
; I : index of period
; A : cash flow stream
; pvs : present value stream
; pv : present value

(define r    0.1)
(define I   (list 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19))
(define a   (lambda (i) 500e3))
(define A   (map a I))
(define pv  (lambda (a r i) (/ a (expt (+ 1 r) i))))
(define pvs (map (lambda (ai i) (pv ai r i)) A I))
(define sum (lambda (x) (fold + 0 x)))
(define pv  (sum pvs))

(print "2.2.5.scm")
(print "r=" r)
(format #t "~10@a~10@a~10@a\n" "i" "a" "pv")
(print "------------------------------")
(for-each 
    (lambda (i ai pvsi)
        (format #t "~10d~10d~10d\n" i (x->integer ai) (x->integer pvsi)))
I A pvs)
(print "------------------------------")
(format #t "~20@a~10d\n" "PV=" (x->integer pv))
; end

history

2025-06-07 create.