Python Bisection搜索超越了目标

时间:2013-09-04 15:09:38

标签: python bisection

我必须创建一个代码来查找确切的付款,以及使用二分法在12个月内还清贷款所需的分数。我为此创建的代码有效,但它超出了它的目标。贷款将在12个月内偿还,但在支付12笔款项后,最终余额应为0左右。但这是一个更大的负数。

我使用的代码是:

StartBalance = float(raw_input('Credit Balance in $: '))
AnnualRate = float(raw_input('Annual interest rate in decimals: '))
MonthlyRate = AnnualRate / 12.0
MinPaymentLow = StartBalance / 12.0
MinPaymentHigh = (StartBalance*(1+MonthlyRate)**12.0)/12.0
cent = 0.01
Payment = (MinPaymentHigh+MinPaymentLow)/2.0

while (Payment*12-StartBalance) >= cent:
    for month in range(0, 12):
        Balance = (StartBalance-Payment)/10*(1+MonthlyRate)   
    if Balance < 0:
        MinPaymentLow = Payment
    elif Balance > 0:
        MinPaymentHigh = Payment
    Payment = (MinPaymentHigh + MinPaymentLow)/ 2.0

print 'RESULT'           
print 'Number of months needed: 12'
print 'Montly pay: $', round(Balance,2)

2 个答案:

答案 0 :(得分:0)

你的代码似乎对我来说很好,但是如果你得到的结果“离开”,可能是因为你使用的是float数据类型。浮动是不可信的,因为它在每次操作时都是圆的。如果有足够的迭代次数,你可以获得大量资金。请尝试使用decimal。此模块将小数跟踪为索引的整数值。

答案 1 :(得分:0)

看起来像这些行:

for month in range(0, 12):
    Balance = (StartBalance-Payment)/10*(1+MonthlyRate)   

应该是:

Balance = StartBalance
for month in range(0, 12):
    Balance = (Balance-Payment) * (1 + MonthlyRate)  

或类似的东西,取决于您想要计算利息的方式,以及您是否考虑在月初或月末发生的付款。