avevo un po' di tempo ed ho provato così (caso mai servisse a qualcuno)
partendo dalle funzioni implementate da br1 per il calcolo della rata dato l'interesse, queste funzioni fanno il contrario, calcolano l'interesse per una data rata.
codice:
function calcola_interesse()
{
/*
data la funzione r = f(i) voglio trovare i per un dato r
r è il valore cercato
i è il valore iniziale approssimato
f è l'indirizzo della funzione di calcolo
*/
var c = parseFloat("0"+document.myForm.capitale.value); // capitale
var a = parseFloat("0"+document.myForm.anni.value); // numero anni
var n = parseFloat("0"+document.myForm.nrateanno.value); // N.rate all'anno
var r = parseFloat("0"+document.myForm.rata.value); // rata data
var i = 0.01; //Valore iniziale di interesse annuale in %
var f = calcola_rata;//f(x) è più facile di calcola_rata(x)
var e = 0.0000000001;//differenza massima tra due valori successivi di calcolo
var h = 0.1; //rapporto incrementale
var j, a, a1;
a = i - ((f(i) - r) * h) / ((f(i+h) - r) - (f(i) - r));
//alert(a);
for(j = 1; j <= 10; j++)
{
a1 = a - ((f(a)-r)*h) / ((f(a+h)-r)-(f(a)-r));
//alert(a1);
if(Math.abs(a1-a) < e) return Math.round(a1 * 100) / 100;
a = a1;
}
return "SUPERATE LE ITERAZIONI CONSENTITE";
}
function calcola_rata(i)
{
var c = parseFloat("0"+document.myForm.capitale.value); // capitale
//var i = parseFloat("0"+document.myForm.interesse.value); // interesse
var a = parseFloat("0"+document.myForm.anni.value); // numero anni
var n = parseFloat("0"+document.myForm.nrateanno.value); // N.rate all'anno
var r = parseFloat(rata_CP(c,i,a,n)); // rata calcolata
return r;
}