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.