Dejemos que $r$ denotan la TAE que pretendemos establecer, y los pagos se realizan cada $\frac{1}{n}$ del año (es decir $n=12$ para los pagos mensuales, y $n=26$ para la quincena). Deje que $a_k$ sea el importe principal del préstamo al principio del $k$ -a período de tiempo. Entonces $a_0 = a$ y $$ a_{k+1} = a_k (1+r)^{1/n}-p $$ Esta ecuación de recurrencia no es difícil de resolver utilizando la técnica de la función generadora, es decir, multiplicando ambos lados de la ecuación por $x^k$ (para un número indeterminado de $x$ ) y formando $g(x) = \sum_{k=0}^\infty a_k x^k$ : $$\begin{eqnarray} \sum_{k=0}^\infty a_{k+1} x^k &=& (1+r)^{1/n} \sum_{k=0}^\infty a_k x^k - p \sum_{k=0}^\infty x^k \\ \frac{f(x)-a_0}{x} &=& (1+r)^{1/n} f(x) - p \frac{1}{1-x} \\ f(x) &=& \frac{1}{(1+r)^{1/n}-1} \left( \frac{p}{1-x} - \frac{a + p - a(1+r)^{1/n}}{1 - (1+r)^{1/n} x} \right) \\ a_{k} &=& \frac{1}{(1+r)^{1/n}-1} \left( p - \left( a + p - a (1+r)^{1/n} \right) (1+r)^{k/n} \right) \end{eqnarray} $$ Requisito de que después de $m$ pagos iguales el préstamo es pagado da la ecuación para la tasa de porcentaje anual efectiva $r$ : $$ p = \left( a + p - a (1+r)^{1/n} \right) (1+r)^{m/n} $$ Como se trata de una ecuación no lineal, la resolución de $r$ tendrá que hacerse numéricamente. Aquí hay un código en Mathematica :
In[63]:= FindAPR[a0_, p_, m_, n_] :=
Block[{sol},
sol = FindRoot[
p == (a0 + p - a0 (1 + r)^(1/n)) ((1 + r)^(m/n)), {r, 1/2}];
If[sol === {}, Indeterminate, r /. First[sol]]]
In[64]:= FindAPR[1000, 256, 4 (* payments *), 12 (* paid monthly *)]*100
Out[64]= 12.0876
Si el tiempo hasta el primer pago es diferente, $a_0$ debe ser sustituido por un importe de capital efectivo diferente, $a_0^\ast = a_0 \left(1 + r \right)^{d/n}$ , donde $d$ es la duración del periodo de no pago, expresada como una fracción de los intervalos de pago. Por ejemplo, si los pagos se realizan mensualmente $n=12$ hay que hacer 4 pagos $m=4$ en la cantidad de $p=\$ 260.00 $ on the loan of $\$1000.00$ con 1 mes de carencia, la TAE efectiva es
In[3]:= FindAPR2[a0_, p_, m_, n_, d_] :=
Block[{sol},
sol = FindRoot[
p == (p - a0 (1 + r)^(d/n) ( (1 + r)^(1/n) - 1)) ((1 + r)^(m/
n)), {r, 1/2}];
If[sol === {}, Indeterminate, r /. First[sol]]]
In[5]:= FindAPR2[1000, 260, 4, 12, 1]*100
Out[5]= 14.4241