X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Ffinancial-0.4.0%2Fnper.m;fp=octave_packages%2Ffinancial-0.4.0%2Fnper.m;h=891188d9ed7f8200a5b203adcfed2e222ba1e5f5;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/financial-0.4.0/nper.m b/octave_packages/financial-0.4.0/nper.m new file mode 100644 index 0000000..891188d --- /dev/null +++ b/octave_packages/financial-0.4.0/nper.m @@ -0,0 +1,75 @@ +## Copyright (C) 1995-1998, 2000, 2002, 2004-2007 Kurt Hornik +## +## This program is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free Software +## Foundation; either version 3 of the License, or (at your option) any later +## version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +## details. +## +## You should have received a copy of the GNU General Public License along with +## this program; if not, see . + +## -*- texinfo -*- +## @deftypefn {Function File} {} nper (@var{r}, @var{p}, @var{a}, @var{l}, @var{method}) +## Return the number of regular payments of @var{p} necessary to +## amortize @var{a} loan of amount @var{a} and interest @var{r}. +## +## The optional argument @var{l} may be used to specify an additional +## lump-sum payment of @var{l} made at the end of the amortization time. +## +## The optional argument @var{method} may be used to specify whether +## payments are made at the end (@var{"e"}, default) or at the beginning +## (@var{"b"}) of each period. +## +## Note that the rate @var{r} is specified as a fraction (i.e., 0.05, +## not 5 percent). +## @seealso{pv, pmt, rate, npv} +## @end deftypefn + +function n = nper (r, p, a, l, m) + + if (nargin < 3 || nargin > 5) + print_usage (); + endif + + if (! (isscalar (r) && r > -1)) + error ("nper: r must be a scalar > -1"); + elseif (! isscalar (p)) + error ("nper: p must be a scalar"); + elseif (! isscalar (a)) + error ("nper: a must be a scalar"); + endif + + if (nargin == 5) + if (! ischar (m)) + error ("nper: `method' must be a string"); + endif + elseif (nargin == 4) + if (ischar (l)) + m = l; + l = 0; + else + m = "e"; + endif + else + m = "e"; + l = 0; + endif + + if (strcmp (m, "b")) + p = p * (1 + r); + endif + + q = (p - r * a) / (p - r * l); + + if (q > 0) + n = - log (q) / log (1 + r); + else + n = Inf; + endif + +endfunction