2012-10-11 38 views
-2

我試圖找出如何使用平分搜索來查找:平分搜索使用不同高低

作出明確貸款金額

每月支付

  • 月利率=(年利率)/12
  • 每月付款下界=平衡/ 12
  • 每月付款上限=(餘額×(1 +每月利率)12)/ 12

目前我有:

balance = 6758 
annualInterestRate = 0.20 
monthlyRate = annualInterestRate/12 
numGuesses = 0 
lo = balance/12 
hi = (balance)*((1+monthlyRate)**12)/12 
monthPay = (hi + lo)/2.0 
NuBalance = balance 
while abs((NuBalance)*(1+monthlyRate))-(monthPay) >= 0.01: 
    print('low = ' + str(lo) + ' high = ' + str(hi) + ' MonthPay = ' + str(monthPay)) 
    numGuesses += 1 
    if ((NuBalance)*(1+monthlyRate))-(monthPay) <= 0.01: 
     print('Month Pay LO = ' + str(monthPay)) 
     lo = monthPay 
    else: 
     print('Month Pay HI = ' + str(monthPay)) 
     hi = monthPay 
    monthPay = (hi + lo)/2.0 
print('numGuesses = ' + str(numGuesses)) 
print('Month Pay = ' + str(monthPay)) 

我要去哪裏錯了,將不勝感激任何幫助。

+0

什麼不起作用? – 2012-10-11 10:16:32

+0

它並沒有正確地計算出搜索結果,它使用hi來平分和減少它自己,有時它應該使用lo來對分使用正確的一半。 –

回答

1

它應該是:

while abs((NuBalance)*(1+monthlyRate)-(monthPay)) >= 0.01: 
            ^  ^

,並始終存在

(hi + lo)/2.0 < (NuBalance)*(1+monthlyRate) 

True因爲hilo都小於(NuBalance)*(1+monthlyRate)

In [9]: print 'lo:', lo 
lo: 563 

In [10]: print 'hi:', hi 
hi: 686.720412649 

In [11]: print 'monthPay:', monthPay 
monthPay: 624.860206325 

In [12]: print '(NuBalance)*(1+monthlyRate):', (NuBalance)*(1+monthlyRate) 
(NuBalance)*(1+monthlyRate): 6870.63333333 
+0

感謝您的回覆,我看到我在數學中犯了錯誤,我不確定我還是很明白。 –

+0

我需要計算12個月的中期「月付」,看看它是否已經將餘額減少到0.01,並考慮到餘額下降時的利息。然後重複每次使用平分搜索給我一個新的'monthPay'。然後輸出結果 –

+0

我已經想通了,謝謝你的幫助 –