Форум сайта python.su
0
Здравствуйте. Прошу помощи в реализации небольшой функции по нахождению неподвижной точки x = ln(x+1)+1
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))
Офлайн
568
Посмотрите на ошибку внимательнее и увидите “RuntimeError: maximum recursion depth exceeded in cmp”, что дословно с буржуйского означает “Программа достигла максимальной глубины рекурсии”. То есть ваша рекурсивная функция сожрала весь отведенный для неё стек. Выход: избавиться от рекурсии.
Офлайн
0
FishHookСпасибо большое за подсказку. К сожалению я не смог придумать алгоритм без рекурсии, по этому решил аргумент который возвращает функции увеличивать на f-x. Не знаю на сколько это правильно, но приближение считает довольно точно.
Посмотрите на ошибку внимательнее и увидите “RuntimeError: maximum recursion depth exceeded in cmp”, что дословно с буржуйского означает “Программа достигла максимальной глубины рекурсии”. То есть ваша рекурсивная функция сожрала весь отведенный для неё стек. Выход: избавиться от рекурсии.
Офлайн
568
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))
Офлайн
39
jheniae
Здравствуйте. Прошу помощи в реализации небольшой функции по нахождению неподвижной точки x = ln(x+1)+1
Офлайн
0
4kpt_IIIНужно найти не подвижную точку функции, проще говоря найти такое значение “x”, когда f(x)=x с допустимой погрешность.
Офлайн
39
Для того, чтобы решать такую задачу методами оптимизации необходимо определится с механизмом оценки качества того или иного решения, т.н. функционалом оценивания. Вот имеем 2 решения. Как определить, что первое лучше второго?
Отредактировано 4kpt_III (Апрель 6, 2015 20:09:56)
Офлайн
4
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
Офлайн