《PHP与MySQL程序设计(第四版)》中第73页4.2.6节分期还贷计算器数学原理分析

    技术2022-07-11  108

    -----------------------------《PHP与MySQL程序设计(第四版)》中第73页4.2.6节分期还贷计算器数学原理分析。 《PHP与MySQL程序设计(第四版)》中73页4.2.6节,代码清单4-1是还贷计算器函数amortizationTable,代码如下。 其使用的是等额本息分期还款模型。要理解这段代码,关键是理解月还款额b的计算公式背后的数学原理。 设本金a,还款月数n,月利率r,每月还款b。还款计算如下: 首月利息a*r,还款后,余额a1=a(1+r)-b;次月利息a1*r,次月还款后余额a2=a1(1+r)-b=(a(1+r)-b)(1+r)-b=a(1+r)^2-b[(1+r)+1], 如此类推,最后一个月还清,有余额an=a(1+r)^n-b[(1+r)^(n-1)+(1+r)^(n-2)+……1]=0。 可见中括号内为等比数列,根据等比数列计算公式可得an=a(1+r)^n-b((1+r)^n-1)/r = 0,所以有b=ar(1+r)^n/((1+r)^n-1)。 代码中,$periodicPayment即b,$balance即a,$intCalc即1+r,$totalPayments即n,所以有 $periodicPayment = $balance * pow($intCalc,$totalPayments) * ($intCalc - 1) /                                     (pow($intCalc,$totalPayments) - 1); 回过头再看计算器函数,根据以上原理分析,每月的计算如下: 设上期贷款余额a1,本期余额a2,则有:a2=a1(1+r)-b=a1-(b-a1×r),也就是本期还款剔除利息,剩余的就是上期余额扣除部分, 得到本期余额,如此迭代。体现在代码上就是:     $paymentInterest = round($balance * $monthlyInterest, 2);     $paymentPrincipal = round($periodicPayment - $paymentInterest, 2);     $newBalance = round($balance - $paymentPrincipal, 2);

    分期还贷计算器完整代码 <?php

    function amortizationTable($pNum, $periodicPayment, $balance, $monthlyInterest) {     // Calculate payment interest     $paymentInterest = round($balance * $monthlyInterest, 2);

        // Calculate payment principal     $paymentPrincipal = round($periodicPayment - $paymentInterest, 2);

        // Deduct principal from remaining balance     $newBalance = round($balance - $paymentPrincipal, 2);

        // If new balance < monthly payment, set to zero     if ($newBalance < $paymentPrincipal) {         $newBalance = 0;     }

        printf("<tr><td>%d</td>", $pNum);     printf("<td>$%s</td>", number_format($newBalance, 2));     printf("<td>$%s</td>", number_format($periodicPayment, 2));     printf("<td>$%s</td>", number_format($paymentPrincipal, 2));     printf("<td>$%s</td></tr>", number_format($paymentInterest, 2));

        # If balance not yet zero, recursively call amortizationTable()     if ($newBalance > 0) {          $pNum++;          amortizationTable($pNum, $periodicPayment,                             $newBalance, $monthlyInterest);     } else {         return 0;     }

    }

       // Loan balance    $balance = 10000.00;

       // Loan interest rate    $interestRate = .0575;

       // Monthly interest rate    $monthlyInterest = $interestRate / 12;

       // Term length of the loan, in years.    $termLength = 5;

       // Number of payments per year.    $paymentsPerYear = 12;

       // Payment iteration    $paymentNumber = 1;

       //还款月数m    // Determine total number payments    $totalPayments = $termLength * $paymentsPerYear;

       //复利1+r    // Determine interest component of periodic payment     $intCalc = 1 + $interestRate / $paymentsPerYear;

       //计算月还款额b    // Determine periodic payment      $periodicPayment = $balance * pow($intCalc,$totalPayments) * ($intCalc - 1) /                                     (pow($intCalc,$totalPayments) - 1);

       // Round periodic payment to two decimals    $periodicPayment = round($periodicPayment,2);

       // Create table    echo "<table width='50%' align='center' border='1'>";    echo "<tr>          <th>Payment Number</th><th>Balance</th>          <th>Payment</th><th>Principal</th><th>Interest</th>          </tr>";

       // Call recursive function    amortizationTable($paymentNumber, $periodicPayment, $balance,                      $monthlyInterest);

       // Close table    echo "</table>";

    ?>

    //以上代码贷款1万元5年还清,年息(5.75%),代码运行结果得出的还款逐月情况如下: Payment Number    Balance    Payment    Principal    Interest 1    $9,855.75    $192.17    $144.25    $47.92 2    $9,710.81    $192.17    $144.94    $47.23 3    $9,565.17    $192.17    $145.64    $46.53 4    $9,418.83    $192.17    $146.34    $45.83 5    $9,271.79    $192.17    $147.04    $45.13 6    $9,124.05    $192.17    $147.74    $44.43 7    $8,975.60    $192.17    $148.45    $43.72 8    $8,826.44    $192.17    $149.16    $43.01 9    $8,676.56    $192.17    $149.88    $42.29 10    $8,525.97    $192.17    $150.59    $41.58 11    $8,374.65    $192.17    $151.32    $40.85 12    $8,222.61    $192.17    $152.04    $40.13 13    $8,069.84    $192.17    $152.77    $39.40 14    $7,916.34    $192.17    $153.50    $38.67 15    $7,762.10    $192.17    $154.24    $37.93 16    $7,607.12    $192.17    $154.98    $37.19 17    $7,451.40    $192.17    $155.72    $36.45 18    $7,294.93    $192.17    $156.47    $35.70 19    $7,137.71    $192.17    $157.22    $34.95 20    $6,979.74    $192.17    $157.97    $34.20 21    $6,821.01    $192.17    $158.73    $33.44 22    $6,661.52    $192.17    $159.49    $32.68 23    $6,501.27    $192.17    $160.25    $31.92 24    $6,340.25    $192.17    $161.02    $31.15 25    $6,178.46    $192.17    $161.79    $30.38 26    $6,015.90    $192.17    $162.56    $29.61 27    $5,852.56    $192.17    $163.34    $28.83 28    $5,688.43    $192.17    $164.13    $28.04 29    $5,523.52    $192.17    $164.91    $27.26 30    $5,357.82    $192.17    $165.70    $26.47 31    $5,191.32    $192.17    $166.50    $25.67 32    $5,024.03    $192.17    $167.29    $24.88 33    $4,855.93    $192.17    $168.10    $24.07 34    $4,687.03    $192.17    $168.90    $23.27 35    $4,517.32    $192.17    $169.71    $22.46 36    $4,346.80    $192.17    $170.52    $21.65 37    $4,175.46    $192.17    $171.34    $20.83 38    $4,003.30    $192.17    $172.16    $20.01 39    $3,830.31    $192.17    $172.99    $19.18 40    $3,656.49    $192.17    $173.82    $18.35 41    $3,481.84    $192.17    $174.65    $17.52 42    $3,306.35    $192.17    $175.49    $16.68 43    $3,130.02    $192.17    $176.33    $15.84 44    $2,952.85    $192.17    $177.17    $15.00 45    $2,774.83    $192.17    $178.02    $14.15 46    $2,595.96    $192.17    $178.87    $13.30 47    $2,416.23    $192.17    $179.73    $12.44 48    $2,235.64    $192.17    $180.59    $11.58 49    $2,054.18    $192.17    $181.46    $10.71 50    $1,871.85    $192.17    $182.33    $9.84 51    $1,688.65    $192.17    $183.20    $8.97 52    $1,504.57    $192.17    $184.08    $8.09 53    $1,319.61    $192.17    $184.96    $7.21 54    $1,133.76    $192.17    $185.85    $6.32 55    $947.02    $192.17    $186.74    $5.43 56    $759.39    $192.17    $187.63    $4.54 57    $570.86    $192.17    $188.53    $3.64 58    $381.43    $192.17    $189.43    $2.74 59    $191.09    $192.17    $190.34    $1.83 60    $0.00    $192.17    $191.25    $0.92  

    Processed: 0.012, SQL: 9