NB.============================================================= NB. 財務計算-基本関数  2011.01.17 NB. (期間と金利の陽関数を除く) NB. i 利率 Intrest INT NB. n 期間 Period PER NB. S 終価 Future Value FV NB. P 現価 Present Value PV NB. M 年価 Payment PMT NB. Fre 年複利回数 Frequency 1,2,3,4,6,12 NB. Left Arguments NB. option OPT NB. 0 期末 Arrears ARR NB. 1 期首 Advance ADV NB. 2 無無 NB. 3 有有 NB. 使い方 SINP i;n;P NB. PINS i;n;S NB. opt MINS i;n;S;Fre NB. opt SINM i;n;M;Fre NB. opt MINP i;n;P;Fre NB. opt PINM i;n;M;Fre NB. NB. 例1.100万円を金利7%で10年間据え置いたとき満期での元利合計金額 NB. SINP 0.07;10;100 答:約196万7,000円 NB. 例2.金利7%で10年間で100万円にするにはいくら預けたらいいか NB. PINS 0.07;10;100  答:50万8,349円 NB. 例3.金利7%で10年間積立て満期で100万円受け取るための毎月積立金 NB. 0 MINS 0.07;10;100;12 答:期末で解くと、5,778円 NB. 例4.1000万円を借り、金利7%、期首、10年間、月払いで返済 NB. 1 MINP 0.07;10;1000;12 答:11万5,435円 NB. 例5.1000万円を借り、金利7%、期首、10年間、年払いで返済 NB. 1 MINP 0.07;10;1000;1  答:133万0,631円 NB. 例6.金利3%、10年間、毎月4万円積立てると満期で幾ら貯まるか NB. 0 SINM 0.03;10;4;12  答:期末で解くと、558万9,657円 NB. 例7.金利3%、10年間月払いで4万円返済するとすれば幾ら借りられるか NB. 0 PINM 0.03;10;4;12  答:期末で解くと、414万2,470円 SINP=:3 : 'p*(>:i)^n=.n[i=.i[''i n p''=.y' PINS=:3 : 's%(>:i)^n=.n[i=.i[''i n s''=.y' MINS=:3 : 0 0 MINS y : if. x>:4 do. '** x is over 4 **' return. end. 'bb0 bn'=.2 2#:x{0 3 2 1 s*i%((>:i)^(n+bn))-(1+bb0*i)[n=.n*f[i=.i%f['i n s f'=.y ) SINM=:3 : 0 0 SINM y : if. x>:4 do. '** x is over 4 **' return. end. 'bb0 bn'=.2 2#:x{0 3 2 1 m%i%((>:i)^(n+bn))-(1+bb0*i)[n=.n*f[i=.i%f['i n m f'=.y ) MINP=:3 : 0 0 MINP y : if. x>:4 do. '** x is over 4 **' return. end. 'bb0 bn'=.2 2#:x{0 3 2 1 p*((>:i)^n)*i%((>:i)^(n+bn))-(1+bb0*i)[n=.n*f[i=.i%f['i n p f'=.y ) PINM=:3 : 0 0 PINM y : if. x>:4 do. '** x is over 4 **' return. end. 'bb0 bn'=.2 2#:x{0 3 2 1 m%((>:i)^n)*i%((>:i)^(n+bn))-(1+bb0*i)[n=.n*f[i=.i%f['i n m f'=.y ) NB.============================================================= NB.============================================================= NB. 財務計算-基本計算2  2011.01.19 NB. (期間と年利の式) NB. P 現価 Present Value PV NB. S 終価 Future Value FV NB. M 年価 Payment PMT NB. i 利率 Intrest INT NB. n 期間 Period PER NB. Option OPT NB. 0 期末 Arrears ARR NB. 1 期首 Advance ADV NB. 2 無無 NB. 3 有有 NB. 1~12 1,2,3,4,6,12 Fre 年複利回数 NB. 使い方 INPS n;P;S NB.     NIPS i;n;S NB.   opt NISM i;S;M;Fre NB.   opt NIPM i;P;M;Fre NB.   opt INSM n;S;M;Fre NB.   opt INPM n;P;M;Fre NB. NB. 例1.100万円を預け10年後に200万円になるための年利は? NB. INPS 10;100;200 答:約7.177% NB. 例2.100万円を預け金利7%で200万円になるには何年かかるか? NB. NIPS 0.07;100;200 答:10.245年だから約10年と3ヶ月 NB. 例3.年利7%で毎月期末1万5,000円を預け何年後に1,000万円となるか NB. 0 NISM 0.07;1000;1.5;12 答:約22.74年 NB. 例4.年利3%で1,000万円借り毎月期末で4万円を返済するときの年数は NB. 0 NIPM 0.03;1000;4;12 答:約32.735年 NB. 例5.年利3%で,1000万円借り毎年期末で48万円を返済するときの年数は NB. 0 NIPM 0.03;1000;48;1 答:約33.18年 NB. 例6.毎月期末で1万5,000円を預け30年後に1,000万円となる年利は NB. 0 INSM 30;1000;1.5;12 答:約3.77% NB. 例7.1000万円借り毎月期末で4万円を30年間返済するときの年利は NB. 0 INPM 30;1000;4;12 答:約2.59% INPS=:3 : 0 if. (#y)~:3 do. '** y must be 3 elements **' return. end. <:1%~(S%P)^%N[N=.n['n P S'=.y ) NIPS=:3 : 0 if. (#y)~:3 do. '** y must be 3 elements **' return. end. (^.S%P)%^.>:I=.i['i P S'=:y ) NISM=: 4 : 0 if. (#y)~:4 do. '** y must be 4 elements **' return. end. 'bb0 bn'=.2 2#:x{0 3 2 1[I=.i%f['i S M f'=.y f%~((^.(>:bn*I)+S*I%M)%^.(>:I))-bb0 ) NIPM=: 4 : 0 if. (#y)~:4 do. '** y must be 4 elements **' return. end. 'bb0 bn'=.2 2#:x{0 3 2 1[I=.i%f['i P M f'=.y f%~(^.(>:bb0*I)%(>:bn*I)-P*I%M)%^.(>:I) ) NB.================= 二分探索法(Binery Search) =============== NB.======= Fはyの単純増加関数、解は上限と下限の間にある ====== bisearch=:4 : 0 NB. F bisearch lower;higher NB. F is increasing,and root must be between lower and higher 'y1 y2'=:y[i=.0 NB. To avoid Global variables, Add the extra arguments if. (_4{.>0{x)='P' do. 'F x N P M'=.x else. 'F x N S M'=.x end. label_L1. if.30:i do. goto_owari.end. z=.".F,'y0=.-:+/y1,y2' if.z>0 do.y2=.y0 else.y1=.y0 end. if.0.000001>|z do.goto_owari.end. goto_L1. label_owari. y0 ) NB.==== 二分探索法出で使う関数は右引数をy(金利)だけにする ==== MS_1=: 3 : 0 NB. Usage : (xx;n;Fre) MS_1 I 'Not Use a Monadic Form' : 'bb0 bn'=.2 2#:xx{0 3 2 1[N=.n*f['xx n f'=.x if. y=0 do. %N+(1*bn)+(_1*bb0) return. end. y%((>:y)^(N+bn))-(1+bb0*y) ) NB.===== 二分探索法で使う関数は右引数をy(金利)だけにする ===== MP_1=: 3 : 0 NB. Usage : (xx;n;Fre) MP_1 I 'Not Use a Monadic Form' : N=.n*f['xx n f'=.x ((>:y)^N)*(xx;N;1)MS_1 y ) INSM=:4 : 0 NB. 積立金利 NB. INSM N;S;M;Fre if. (#y)~:4 do. 'members of y is not 4' return. end. N=.n*f['n S M f'=.y if. S<:N*M do. 'S is less than total payments !!' return. end. NB. To avoid Global variables, Add the extra arguments x;N;S;M f*('M-S*(x;N;1)MS_1 ';x;N;S;M) bisearch 0;1 ) INPM=:4 : 0 NB. 内部金利(IRR)、投資限界金利 NB. INPM N;P;M;Fre if. (#y)~:4 do. 'members of y is not 4' return. end. N=.n*f['n P M f'=.y if. P>N*M do. 'P is greater than total earnest !!' return. end. NB. To avoid Global variables, Add the extra arguments x;N;P;M f*('M-~P*(x;N;1)MP_1 ';x;N;P;M) bisearch 0;1 ) NB.=============================================================