Calcolo dell'estinzione di un prestito

di il
5 risposte

Calcolo dell'estinzione di un prestito

Sto seguendo un corso sulla piattaforma edx.org.
Il corso 'demo', che serve a imparare come usare la piattaforma, mi propone un problema informatico da sottoporre al loro 'code grader', cioè un valutatore di programmi automatico (tipo una unit test).
Nessun problema con il linguaggio da usare (Python), ma mi riesce difficile capire il soggetto. Questo è il testo:
We are searching for the smallest monthly payment such that we can pay off the entire balance of a loan within a year.

The following values might be useful when writing your solution

Monthly interest rate
= (Annual interest rate) / 12
Monthly payment lower bound
= Balance / 12
Monthly payment upper bound
= (Balance x (1 + Monthly interest rate)12) / 12

The following variables contain values as described below:

balance
- the outstanding balance on the credit card
annualInterestRate
- annual interest rate as a decimal

Write a program that uses these bounds and bisection search (for more info check out the Wikipedia page on bisection search) to find the smallest monthly payment to the cent such that we can pay off the debt within a year.
Sarà che gli americani imparano a chiedere un prestito già alle elementari, ma non riesco a capire quale funzione dovrei usare per applicare la bisezione.
Come test propongono i seguenti valori:
Test Case 1:
          balance = 320000
          annualInterestRate = 0.2

          Result Your Code Should Generate:
          -------------------
          Lowest Payment: 29157.09
Guardando qua e là, ho trovato una formula, che fa così:
rata = Capitale * tasso * (1 + tasso)^n/((1 + tasso)^n – 1)
tasso equivale a tasso mensile, n vale 12. Applicando i valori ottengo una rata da 29643,04$, che è vicina ma non uguale.
E comunque sono tutte formule 'fisse', non prevedono aggiustamenti, ed è qui che non capisco come si possa trovare una rata minima, dato che il tasso sembra fisso...

5 Risposte

  • Re: Calcolo dell'estinzione di un prestito

    Aggiornamento: cercando il testo del problema con Google, sono capitato su questo PDF che contiene una spiegazione più dettagliata del problema...
  • Re: Calcolo dell'estinzione di un prestito

    Ciao

    Premetto che provo ad interpretare quanto hai scritto, però non mi sono messo a scrivere il codice per verificare se i numeri tornano.

    Da quello che ho capito, la richiesta iniziale è abbastanza semplice: se ti prestano 320.000 euro ad un tasso dello 0,2 annuo, qual è il tuo costo mensile sapendo che devi restituirlo entro i 12 mesi e che ti addebitano gli interessi mensilmente?

    Ora, dal punto di vista finanziario, il calcolo può essere fatto con la formula che hai riportato tu (ci sono diversi siti che la spiegano, per cui non sto a perdere tempo).

    Nel tuo caso, però, dicono di calcolare la rata usando il "Bisection method" e che se non lo conosci puoi guardare su Wikipedia.

    Ho guardato su Wikipedia (in inglese) e parlano di un metodo di calcolo che si basa su due numeri, uno minimo e uno massimo (nell'esempio di Wikipedia si chiamano A e B).

    Su Wikipedia c'è anche un pezzo di codice in cui fanno vedere la funzione da usare (credo in C)

    Hai provato a riscrivere la funzione nel tuo linguaggio passandogli come valori:
    • A = Lower boud = Capitale / mesi = 320.000 / 12
    • B = Upper bound = (Capitale * (1 + interesse mensile)12) / 12 = (320000×(1+(0,2÷12))×12)÷12 = 325333,33


    Fammi sapere che sono curioso!
  • Re: Calcolo dell'estinzione di un prestito

    Seguendo il pdf che ho trovato, che contiene lo stesso esercizio, sono riuscito a fare il programmello, ma i test case del pdf hanno risultati diversi da quello del tema di test, pur essendo lo stesso problema: infatti il mio programma correttamente trova i risultati del pdf, ma fallisce i test del 'code grader'. . Il programma è questo:
    # Paga il debito di una c/c in 1 anno
    # con metodo della bisezione
    
    balance = float(input("Credit card initial balance: "))
    annualInterestRate = float(input("Annual interest rate: "))
    
    monthlyinterestrate = annualInterestRate / 12
    
    new_balance = balance
    lower_bound = balance / 12
    upper_bound = (balance * (1 + monthlyinterestrate) ** 12) / 12
    
    while abs(new_balance) > 0.01:
        mesi = 0
        new_balance = balance
        rata = (upper_bound + lower_bound) / 2
        while mesi < 12:
           new_balance = new_balance * (1 + monthlyinterestrate) - rata
           mesi += 1
    
        if new_balance > 0.0:
            lower_bound = rata
    
        if new_balance < 0.0:
            upper_bound = rata
    
    
    print("Monthly payment: {}".format(round(rata, 2)))
    print("Final balance: {}".format(round(new_balance, 2)))
    Comunque, credo di avere il programma corretto, perché usando Calc con i miei valori i debiti si azzerano in 12 mesi.
  • Re: Calcolo dell'estinzione di un prestito

    Sarà il solito scam americano... io lascerei perdere se il livello è questo
  • Re: Calcolo dell'estinzione di un prestito

    Weierstrass ha scritto:


    Sarà il solito scam americano... io lascerei perdere se il livello è questo
    Teoricamente sono parte della Linux Foundation... Comunque non ci perdo niente.
Devi accedere o registrarti per scrivere nel forum
5 risposte