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;

}