Bisection search in Python cant find the answer? Why does it result in negative balance?











up vote
0
down vote

favorite












This code get down to -73535 and exits the loop. I can't figure out what's wrong.



balance = 999999   
annualInterestRate = 0.18
epsilon = 0.05

monthlyInterestRate = annualInterestRate / 12
lowerBound = balance / 12
upperBound = (balance * ((1 + monthlyInterestRate)**12)) / 12.0
print(upperBound, lowerBound)
currentBalance = balance
middle = (upperBound + lowerBound) / 2

while abs(round(upperBound - lowerBound,2)) >= epsilon:
currentBalance = balance
for i in range(12):
unpaidBalance = currentBalance - middle
currentBalance= unpaidBalance - (monthlyInterestRate * unpaidBalance)
print(currentBalance)
if abs(unpaidBalance) < 0.05:
print("hahaha")
break
elif currentBalance < 0:
upperBound = middle
elif currentBalance > 0:
lowerBound = middle
middle = (upperBound + lowerBound) / 2









share|improve this question




















  • 2




    In future, I would recommend following the PEP8 Style Guide as it is much more readable. Specifically, take a look at Naming conventions and whitespace in expressions and statements.
    – Modelmat
    Nov 7 at 8:44










  • Can you explain the meaning of the value you are apparently trying to converge, perhaps with a reference to the algorithm?
    – tripleee
    Nov 7 at 10:19










  • This is to try to figure out the minimum lowest payment I need to pay every month to pay off my credit card debt.I have to use bisection search.
    – Debora
    Nov 8 at 5:49















up vote
0
down vote

favorite












This code get down to -73535 and exits the loop. I can't figure out what's wrong.



balance = 999999   
annualInterestRate = 0.18
epsilon = 0.05

monthlyInterestRate = annualInterestRate / 12
lowerBound = balance / 12
upperBound = (balance * ((1 + monthlyInterestRate)**12)) / 12.0
print(upperBound, lowerBound)
currentBalance = balance
middle = (upperBound + lowerBound) / 2

while abs(round(upperBound - lowerBound,2)) >= epsilon:
currentBalance = balance
for i in range(12):
unpaidBalance = currentBalance - middle
currentBalance= unpaidBalance - (monthlyInterestRate * unpaidBalance)
print(currentBalance)
if abs(unpaidBalance) < 0.05:
print("hahaha")
break
elif currentBalance < 0:
upperBound = middle
elif currentBalance > 0:
lowerBound = middle
middle = (upperBound + lowerBound) / 2









share|improve this question




















  • 2




    In future, I would recommend following the PEP8 Style Guide as it is much more readable. Specifically, take a look at Naming conventions and whitespace in expressions and statements.
    – Modelmat
    Nov 7 at 8:44










  • Can you explain the meaning of the value you are apparently trying to converge, perhaps with a reference to the algorithm?
    – tripleee
    Nov 7 at 10:19










  • This is to try to figure out the minimum lowest payment I need to pay every month to pay off my credit card debt.I have to use bisection search.
    – Debora
    Nov 8 at 5:49













up vote
0
down vote

favorite









up vote
0
down vote

favorite











This code get down to -73535 and exits the loop. I can't figure out what's wrong.



balance = 999999   
annualInterestRate = 0.18
epsilon = 0.05

monthlyInterestRate = annualInterestRate / 12
lowerBound = balance / 12
upperBound = (balance * ((1 + monthlyInterestRate)**12)) / 12.0
print(upperBound, lowerBound)
currentBalance = balance
middle = (upperBound + lowerBound) / 2

while abs(round(upperBound - lowerBound,2)) >= epsilon:
currentBalance = balance
for i in range(12):
unpaidBalance = currentBalance - middle
currentBalance= unpaidBalance - (monthlyInterestRate * unpaidBalance)
print(currentBalance)
if abs(unpaidBalance) < 0.05:
print("hahaha")
break
elif currentBalance < 0:
upperBound = middle
elif currentBalance > 0:
lowerBound = middle
middle = (upperBound + lowerBound) / 2









share|improve this question















This code get down to -73535 and exits the loop. I can't figure out what's wrong.



balance = 999999   
annualInterestRate = 0.18
epsilon = 0.05

monthlyInterestRate = annualInterestRate / 12
lowerBound = balance / 12
upperBound = (balance * ((1 + monthlyInterestRate)**12)) / 12.0
print(upperBound, lowerBound)
currentBalance = balance
middle = (upperBound + lowerBound) / 2

while abs(round(upperBound - lowerBound,2)) >= epsilon:
currentBalance = balance
for i in range(12):
unpaidBalance = currentBalance - middle
currentBalance= unpaidBalance - (monthlyInterestRate * unpaidBalance)
print(currentBalance)
if abs(unpaidBalance) < 0.05:
print("hahaha")
break
elif currentBalance < 0:
upperBound = middle
elif currentBalance > 0:
lowerBound = middle
middle = (upperBound + lowerBound) / 2






python payment bisection






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 7 at 19:36









halfer

14.2k757105




14.2k757105










asked Nov 7 at 8:33









Debora

41




41








  • 2




    In future, I would recommend following the PEP8 Style Guide as it is much more readable. Specifically, take a look at Naming conventions and whitespace in expressions and statements.
    – Modelmat
    Nov 7 at 8:44










  • Can you explain the meaning of the value you are apparently trying to converge, perhaps with a reference to the algorithm?
    – tripleee
    Nov 7 at 10:19










  • This is to try to figure out the minimum lowest payment I need to pay every month to pay off my credit card debt.I have to use bisection search.
    – Debora
    Nov 8 at 5:49














  • 2




    In future, I would recommend following the PEP8 Style Guide as it is much more readable. Specifically, take a look at Naming conventions and whitespace in expressions and statements.
    – Modelmat
    Nov 7 at 8:44










  • Can you explain the meaning of the value you are apparently trying to converge, perhaps with a reference to the algorithm?
    – tripleee
    Nov 7 at 10:19










  • This is to try to figure out the minimum lowest payment I need to pay every month to pay off my credit card debt.I have to use bisection search.
    – Debora
    Nov 8 at 5:49








2




2




In future, I would recommend following the PEP8 Style Guide as it is much more readable. Specifically, take a look at Naming conventions and whitespace in expressions and statements.
– Modelmat
Nov 7 at 8:44




In future, I would recommend following the PEP8 Style Guide as it is much more readable. Specifically, take a look at Naming conventions and whitespace in expressions and statements.
– Modelmat
Nov 7 at 8:44












Can you explain the meaning of the value you are apparently trying to converge, perhaps with a reference to the algorithm?
– tripleee
Nov 7 at 10:19




Can you explain the meaning of the value you are apparently trying to converge, perhaps with a reference to the algorithm?
– tripleee
Nov 7 at 10:19












This is to try to figure out the minimum lowest payment I need to pay every month to pay off my credit card debt.I have to use bisection search.
– Debora
Nov 8 at 5:49




This is to try to figure out the minimum lowest payment I need to pay every month to pay off my credit card debt.I have to use bisection search.
– Debora
Nov 8 at 5:49

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














 

draft saved


draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53185853%2fbisection-search-in-python-cant-find-the-answer-why-does-it-result-in-negative%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















 

draft saved


draft discarded



















































 


draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53185853%2fbisection-search-in-python-cant-find-the-answer-why-does-it-result-in-negative%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()