import math def fixed_point(x): f=math.log1p(x+1)+1 while abs(f-x)>0.001: return fixed_point(x+0.001) return x print(fixed_point(0.001))
return fixed_point(x+0.001)”
может кто подскажет где ошибка.
спасибо
import math def fixed_point(x): f=math.log1p(x+1)+1 while abs(f-x)>0.001: return fixed_point(x+0.001) return x print(fixed_point(0.001))
FishHookСпасибо большое за подсказку. К сожалению я не смог придумать алгоритм без рекурсии, по этому решил аргумент который возвращает функции увеличивать на f-x. Не знаю на сколько это правильно, но приближение считает довольно точно.
Посмотрите на ошибку внимательнее и увидите “RuntimeError: maximum recursion depth exceeded in cmp”, что дословно с буржуйского означает “Программа достигла максимальной глубины рекурсии”. То есть ваша рекурсивная функция сожрала весь отведенный для неё стек. Выход: избавиться от рекурсии.
jheniaeНу, например, так
К сожалению я не смог придумать алгоритм без рекурсии,
def fixed_point(x): func = lambda x: math.log1p(x+1) + 1 while abs(func(x) - x) > 0.001: x += 0.001 return x print(fixed_point(1))
jheniae
Здравствуйте. Прошу помощи в реализации небольшой функции по нахождению неподвижной точки x = ln(x+1)+1
4kpt_IIIНужно найти не подвижную точку функции, проще говоря найти такое значение “x”, когда f(x)=x с допустимой погрешность.
In [1]: import numpy as np In [2]: from scipy.optimize import fixed_point In [3]: f = lambda x : np.log1p(x) + 1 In [4]: fixed_point(f, [1]) Out[4]: array([ 2.14619322]) In [5]: f(2.14619322) Out[5]: 2.146193220423334