Я пытаюсь решить эту проблему:
Первоначальный взнос имущества составляет $ 2500000. Я собираюсь накопить на эту сумму через 36 месяцев. Программа должна запросить у пользователя стартовую годовую зарплату. Ежемесячно зарплата будет повышаться каждые 6 месяцев. Сберегательный счет обеспечивает возврат 4% от текущей суммы на счете.
Мне придется использовать метод деления пополам, чтобы приблизить норму сбережений (часть месячной зарплаты), которая будет зачислена на сберегательный счет. abs (account - down_payment) <= 100 будет в порядке. </p>
Моя идея заключается в том, что программе необходимо выяснить общее количество месяцев, взятых с учетом нормы сбережений, которую она выбирает на каждом шаге деления пополам, принимая во внимание полугодовое повышение, затем сравните его с 36 и улучшите диапазон.
Я действительно запутался в последовательности вычислений, а также в структуре метода деления пополам. Пока что мое понимание этого вопроса таково: общее время l oop выполняет серию делений пополам, чтобы определить точную норму сбережений; ближе к концу оператор if-else используется для фиксации нормы сбережений слишком высокой или низкой; В середине мне нужно рассчитать количество месяцев, чтобы сбережения были достаточно близки к первоначальному взносу.
portion_down_payment = .25
current_savings = 0
number_of_months = 0
semi_annual_raise = .07
total_cost = 100000000
epsilon = 100
annual_salary = float(input('Enter your starting annual salary:'))
down_payment = total_cost*portion_down_payment
monthly_salary = annual_salary/12
steps = 0
low=0
high=10000
while abs(current_savings - down_payment) >= epsilon:
saving_rate = (low+high)/(2*10000)
while current_savings <= down_payment:
while number_of_months % 6 == 0 and number_of_months > 0: # find out timings when salary raise is applied
monthly_salary += monthly_salary * semi_annual_raise
break
current_savings += (monthly_salary * saving_rate + current_savings*0.04/12)
number_of_months += 1
if number_of_months < 36:
high = saving_rate
else:
low = saving_rate
steps += 1
print('best saving rate:', saving_rate)
print('steps in bisection search:', steps)
Любая помощь приветствуется!