! 3.10.f90 ! 2016-12-29 ! $Id: 3.10.f90 1.2 2024/11/01 13:04:23 s Exp $ ! ! a : year ! b : payment ! c : coupon a year, f*r/2 ! cc : discount factor ! d : b*cc ! e : weight ! f : face value ! ff : a * e ! du : duration, sum of ff ! la : interest rate ! m : ! n : sum of periods ! pr : price of bond, sum of d ! r : coupon rate implicit none character(100) :: fmt1, fmt2, ruler integer :: i, k, m, n integer, dimension(0:20) :: j double precision, dimension(0:20) :: a, b, cc, d, e, ff double precision :: c, du, f, la, pr, r ! input la = 0.1d0 n = 10 r = 0.08d0 m = 2 f = 100d0 k = m * n j(0:k) = (/(i,i=0,k)/) ! calculate c = f * r / 2 a(0:k) = 0.5d0 * j(0:k) b(0:k) = [0d0, c, c, c, c, c, c, c, c, c, c, & c, c, c, c, c, c, c, c, c, c + 100d0] cc(0:k) = 1 / (1 + la / m) ** j(0:k) d(0:k) = b(0:k) * cc(0:k) pr = sum(d(0:k)) e(0:k) = d(0:k) / pr ff(0:k) = a(0:k) * e(0:k) du = sum(ff(0:k)) ! output print *, '3.10.f90' fmt1 = '(a10,a10,a10,a15,a10,a10)' print fmt1,'A', 'B', 'C', 'D', 'E', 'F' print fmt1, '', '', 'Discount', 'Present Value' print fmt1, '', '', 'factor', 'of payment', 'Weight' print fmt1, 'Year', 'Payment', '(@10%)', '(BxC)', '(D/Price)', '(AxE)' ruler='-----------------------------------------------------------------' print *, ruler fmt2 = '(f10.1,f10.0,f10.3,f15.3,f10.3,f10.3)' print fmt2, (a(i), b(i), cc(i), d(i), e(i), ff(i), i=0,k) print *,ruler print '(a10,20x,f15.3,f10.3,f10.3)', 'total', pr ,sum(e), du print '(a45,a20)',"Price", "Duration" end