Mutui a rata costante

Appunti per i Licei Scientifici
(a cura di Roberto Bigoni)


1. Montante in capitalizzazione composta

Chi, disponendo di un capitale finanziario C, lo rende disponibile ad altri per un periodo prefissato, solitamente stipula un contratto che, come remunerazione del servizio, prevede alla scadenza del periodo, oltre alla restituzione del capitale C, il pagamento di un importo aggiuntivo I.

Un contratto di questo genere è detto contratto di mutuo; chi concede il capitale è detto mutuante; chi lo riceve è detto mutuatario; il capitale concesso C è detto mutuo; l'importo aggiuntivo I è detto interesse; la somma di capitale e interesse Eqn1.gif è detta montante.

L'interesse I solitamente è proporzionale al mutuo C: Eqn2.gif. La costante di proporzionalità i è detta tasso unitario di interesse relativo al periodo prefissato, detto periodo di capitalizzazione .

Usualmente il tasso di interesse è espresso in percentuale. Per ottenere il tasso unitario il tasso percentuale va diviso per 100.

Al termine di un periodo di capitalizzazione si ha quindi che il montante è espresso da

Eqn3.gif

Se la durata del mutuo comprende due periodi di capitalizzazione, il montante al termine del secondo periodo dovrà essere calcolato assumendo come capitale iniziale il montante maturato al termine del primo periodo. Si ha quindi

Eqn4.gif

In generale, per n periodi di capitalizzazione si ha

1) Eqn5.gif

Questo metodo di calcolo del montante è noto come regime di capitalizzazione composta.

 


2. Tasso periodico equivalente

Il periodo di capitalizzazione cui risulta più conveniente riferirsi è l'anno civile, quindi usualmente si indica con il simbolo i il tasso unitario annuo di capitalizzazione composta. È tuttavia frequente il caso in cui la capitalizzazione avviene con un ritmo più frequente e viene quindi calcolata k volte all'anno:

In generale, se con ik si indica il tasso unitario di interesse relativo al sottomultiplo di ordine k dell'anno, perché una capitalizzazione eseguita k volte in un anno produca lo stesso montante di una capitalizzazione eseguita solo una volta al termine dell'anno, deve essere

Eqn8.gif

e quindi

Eqn9.gif

In definitiva

2) Eqn10.gif

ik è detto tasso unitario periodico equivalente al tasso annuo unitario i.

Se un contratto di mutuo a capitalizzazione periodica k dura n anni, si ha

3) Eqn11.gif

 


3. Valore attuale in capitalizzazione composta

Il mutuante si priva del capitale C per tornare in possesso del montante Mn tra n anni. Volendo, potrebbe oggi scambiare con un terzo il proprio diritto alla riscossione futura di Mn, richiedendo in contraccambio esattamente il capitale mutuato C. In questa prospettiva, si dice che C è il valore attuale di Mn. Dalla 1) si ha

Eqn6.gif

Cambiando il simbolismo, se con C si indica un capitale disponibile tra n anni e con An il suo valore attuale, si può dire che

4) Eqn7.gif

Analogamente, se la capitalizzazione è calcolata k volte all'anno, dalla 3) si ha

5) Eqn12.gif

 


4. Ammortamento a rata costante

Uno dei più frequenti contratti di mutuo prevede che il mutuatario, invece di restituire al mutuante il montante M al termine della durata del contratto, provveda ad estinguere gradualmente il proprio debito con pagamenti periodici, k volte all'anno, di uguale importo R. Ognuno di questi pagamenti è detto rata di ammortamento e questo metodo di estinzione del mutuo è detto ammortamento a rata costante (o francese).

Il calcolo della rata R si basa sul fatto che la somma dei valori attuali di tutte le rate future, valutati al momento del contratto, deve coincidere con il capitale mutuato C. Deve cioè essere

Eqn13.gif

Gli addendi della somma tra parentesi quadre sono nk e sono in successione geometrica di ragione Eqn14.gif. La loro somma è quindi

Eqn15.gif

In definitiva si ottiene

Eqn16.gif

e quindi

6) Eqn17.gif

Questa espressione può essere facilmente implementata come funzione in un linguaggio di programmazione. Ad esempio in Javascript

  function calcoloRata(m,n,i,k)
    {
      var m = parseInt(m); //capitale mutuato
      var n = parseInt(n); // n. anni
      i = parseFloat(i)/100; // dal tasso percentuale a quello unitario
      k = parseInt(k); // periodizzazione
      var kn = k*n;
      var ik = i/k;
      var ikpiu1 = ik+1;
      var rata = m*ik/(1-Math.pow(ikpiu1,-kn));
      return arrotonda(rata);
    }

//funzione ausiliaria per l'arrotondamento al centesimo
  function arrotonda(x)
    {
      return Math.round(x*100)/100;
    }

Il codice XHTML di una form che interagisca con la funzione può essere il seguente.

<form id="dati" name="dati" style="text-align:center">
<p><label for="mutuo">mutuo</label>
<input type="text" name="mutuo" id="mutuo" size="10" value="100000" 
  style="text-align:right"/>&euro;
</p>
<p><label for="durata">durata</label>
<input type="text" name="durata" id="durata" size="3" value="10" 
  style="text-align:right"/>anni
   
<label for="tasso">tasso</label>
<input type="text" name="tasso" id="tasso" size="5" value="5" 
  style="text-align:right"/>%
</p>
<p>
<label for="periodo">periodicità</label>
<select id="periodo" name="periodo">
  <option value="12">mensile</option>
  <option value="6">bimestrale</option>
  <option value="4">trimestrale</option>
  <option value="3">quadrimestrale</option>
  <option value="2">semestrale</option>
  <option value="1">annuale</option>
</select>
</p>
<p>
<input type="button" value=" calcolo della rata " 
onclick="rata.value=calcoloRata(mutuo.value,durata.value,tasso.value,periodo.value)"/>
</p>
<p><label for="rata">rata</label>
<input type="text" name="rata" id="rata" size="12" value="" 
  style="text-align:right"/>&euro;
</p>
</form>

anni     %

 


5. Calcolo del tasso effettivo annuo

Un mutuatario che desideri comparare contratti di mutuo proposti da varie finanziarie, è sicuramente interessato a dedurre, dati l'importo di un mutuo C e l'importo R della rata periodica necessario ad estinguerlo, il tasso effettivo annuo di interesse applicato sull'ammortamento del mutuo stesso.

Un problema analogo si pone quando un mutuatario contrae un mutuo a tasso variabile e, osservando che la finanziaria ha cambiato l'importo della rata periodica, desidera valutare la variazione del tasso di interesse.

In questo caso bisogna risolvere l'equazione 6) rispetto all'incognita ik per poi ricavare dal tasso periodico, tramite la relazione inversa alla 2) il valore del tasso effettivo annuo.

L'equazione 6), posta nella forma equivalente

Eqn18.gif

appare piuttosto complicata da risolvere analiticamente. Conviene approssimarne la soluzione ad una precisione finanziariamente sufficiente con un metodo numerico, ad esempio con il semplice algoritmo di bisezione.

Il codice Javascript da utilizzare a questo scopo può essere il seguente.

//variabili globali
var rapporto = 0;
var nk = 0;

//implementazione della funzione
function f(x)
  {
    return (1-rapporto*x)*Math.pow(1+x,nk)-1;
  }

//funzione di i/o con la pagina XHTML
function calcoloTasso(mutuo,rata,anni,periodo)
  {
    var m = parseFloat(mutuo);
    var r = parseFloat(rata);
    var n = parseInt(anni)
    var k = parseInt(periodo);
    rapporto = m/r;
    var nk = n*k;
    if (rapporto>=nk)
      {
        alert("dati incongruenti");
        return undefined;
      }
    var ik = bisezione(0.00001,1); // algoritmo di bisezione
    var ia = Math.pow(1+ik,k)-1; // calcolo del tasso effettivo annuo
    ia *=100; // sua espressione in percentuale
    return attotonda(ia);  //arrotondamento al centesimo
  }

//implementazione ricorsiva dell'algoritmo di bisezione
function bisezione(a,b)
  {
    var fa = f(a);
    if (fa==0) return a;
    var fb = f(b);
    if (fb==0) return b;
    var m = (a+b)/2;
    var fm = f(m);
    if (fm==0) return m;
    if ((b-a)<1e-8) return m;
    if (fa*fm<0) 
      return bisezione(a,m)
    else
      return bisezione(m,b);
  }

La form nella pagina XHTML può essere confezionata così.

<form action="form_action.asp" method="get" id="dati1" name="dati1" 
  style="text-align:center">
<p><label for="mutuo1">mutuo</label>
<input type="text" name="mutuo1" id="mutuo1" size="10" value="100000" 
  style="text-align:right"/>&euro;
</p>
<p><label for="rata">rata</label>
<input type="text" name="rata1" id="rata1" size="12" value="1100" 
  style="text-align:right"/>&euro;
</p>
<p>
<label for="periodo1">periodicità</label>
<select id="periodo1" name="periodo1">
  <option value="12">mensile</option>
  <option value="6">bimestrale</option>
  <option value="4">trimestrale</option>
  <option value="3">quadrimestrale</option>
  <option value="2">semestrale</option>
  <option value="1">annuale</option>
</select>
</p>
<p><label for="durata1">durata</label>
<input type="text" name="durata1" id="durata1" size="3" value="10" 
  style="text-align:right"/>anni
</p>
<p>
<input type="button" value=" calcolo del tasso " 
onclick="tasso1.value=calcoloTasso(mutuo1.value,rata1.value,durata1.value,periodo1.value)"/>
<p>
<label for="tasso1">tasso</label>
<input type="text" name="tasso1" id="tasso1" size="10" value=" " 
  style="text-align:right"/>%
</p>
</p>
</form>

anni

%

 


6. Piano di ammortamento

Ognuna delle rate R pagate nell'ammortamento di un mutuo adempie a due funzioni:

Ai fini fiscali è importante conoscere la quota Ik della rata destinata al pagamento degli interessi; questa quota è data dall'interesse che bisognerebbe pagare sul valore del debito Dk-1 all'inizio del periodo di capitalizzazione considerato.

Nella prima rata D0 coincide con C, per cui

Eqn19.gif

La quota C1 di rimborso del capitale è

Eqn20.gif

Dopo il pagamento della prima rata il debito residuo D1 è quindi

Eqn21.gif

L'interesse nel secondo periodo risulta

Eqn22.gif

la quota di capitale nella seconda rata è

Eqn23.gif

e il debito rimanente è

Eqn24.gif

Proseguendo in questo modo è possibile compilare una tabella, detta piano di ammortamento, in ogni riga della quale, in corrispondenza del pagamento di ogni rata, compare la quota interessi, la quota capitale, il debito rimanente e il debito estinto.

Il codice Javascript per calcolare il piano di ammortamento può essere il seguente.


//variabile globale
  tabella = "";

  function calcoloPiano(m,n,i,k)
    {
      m = parseInt(m);
      n = parseInt(n);
      i = parseFloat(i)/100;
      k = parseInt(k);

//numero di rate
      var kn = k*n;

//interesse periodico equivalente
      var ik = i/k;
      var ikpiu1 = ik+1

//calcolo della rata costante 
      var rata = m*ik/(1-Math.pow(ikpiu1,-k*n));
      var r = arrotonda(rata); //arrotondamento al centesimo

      i=0; //contatore

      var Ii = 0; //quota interessi
      var Ci = 0; //quota capitale
      var Di = m; //debito residuo
      var Ei = 0; //debito estinto

//intestazione della tabella
      tabella = "  k           rata         q.cap.         q.int.         d.res.         d.est.\n"; 
      var riga = format(0,3,false)+format(0,15,true)+format(Ci,15,true)+format(Ii,15,true)+format(Di,15,true)+format(Ei,15,true)+"\n";
      tabella += riga;

//righe successive
      for (i=1; i<=kn; i++)
        {
          Ii = ik*Di;
          Ci = rata-Ii;
          Di = Di-Ci;
          Ei += Ci;
          riga = format(i,3,false)+format(r,15,true)+format(Ci,15,true)+format(Ii,15,true)+format(Di,15,true)+format(Ei,15,true)+"\n";    
          tabella += riga;
        } 
    }

//funzione ausiliaria per normalizzare la rappresentazione dei dati in output
  function format(n,campo,decimale)
    {
      var l = 0;
      var s; 
      if (decimale)
        {
          n = arrotonda(n);
          s = String(n);
          l = s.length;
          var punto = s.indexOf('.');
          if (punto<0) s +='.00';
          if (punto==l-1) s +='00';
          if (punto==l-2) s +='0';
          punto = s.indexOf('.');
          s = s.substr(0,punto+3);
        }
      else
        s = String(n);
      l = s.length;
      while (l<campo)
        {
          s = " "+s;
          l++;
        }
      return s;
    }


La form nella pagina XHTML può essere confezionata così.

<form action="form_action.asp" method="get" style="text-align:center">
<p><label for="mutuo">mutuo</label>
<input type="text" name="mutuo" id="mutuo" size="10" value="100000" 
  style="text-align:right"/>&euro;
</p>
<p><label for="durata">durata</label>
<input type="text" name="durata" id="durata" size="3" value="10" 
  style="text-align:right"/>anni
   
<label for="durata">tasso</label>
<input type="text" name="tasso" id="tasso" size="5" value="5" 
  style="text-align:right"/>%
</p>
<p>
<label for="periodo">periodicità</label>
<select name="periodo">
  <option value="12">mensile</option>
  <option value="6">bimestrale</option>
  <option value="4">trimestrale</option>
  <option value="3">quadrimestrale</option>
  <option value="2">semestrale</option>
  <option value="1">annuale</option>
</select>
</p>
<p>
<input type="button" value=" calcolo " 
onclick="calcoloPiano(mutuo.value,durata.value,tasso.value,periodo.value); 
  c_piano.value=tabella"/>
</p>
<p>piano di ammortamento</p>
<textarea id="c_piano" rows="10" cols="100" readonly="readonly">
  </textarea>
</p>
</form>

anni     %

piano di ammortamento


Se gli utenti non sono interessati agli aspetti matematici e informatici, gli stessi risultati possono più direttamente essere ottenuti nella pagina Mutui di questo sito.

ultimo aggiornamento: Ottobre 2016