Есть ли ошибка в строке
x0 = a, xi = pxx-1 + q, i = 1, 2, 3 ...
Дано положительное челое число n и действительное число a, c, d, p, q.
Найти принадлежит ли число xn интервалу (c, d).
n = int(input("n = "))
a = float(input("a = "))
c = float(input("c = "))
d = float(input("d = "))
p = float(input("p = "))
q = float(input("q = "))
xn = a * p ** n + q * (1 - p ** n) / (1 - p) #Интересует эта строка
print(xn)
if c <= xn <= d:
print('yes')
else:
print('no')
Правильно ли будет считать xn, у меня есть какие-то опасения в строке где есть коментарий
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
ну формула то с небольшим дефектом :)
действительно
xn = a * p^n + q * (p^(n - 1) + p^(n-2) + ... + p + 1)
и (p^(n - 1) + p^(n-2) + ... + p + 1) как сумма геометрической прогрессии сворачивается в
(p^n - 1) / (p - 1)
но что делать, когда p = 1?
тогда эта сумма сворачивается в n
Поэтому или учитывайте 2 случая в вычислениях или считайте сумму напрямую, а не через формулу суммы геометрической прогрессии
типа такого:
nx = (a * p**n + q * (1 - p**n) / (1 - p)) if p != 1 else (a * p**n + q * n)