Найти - Пользователи
Полная версия: Неподвижная точка функция
Начало » Python для новичков » Неподвижная точка функция
1
jheniae
Здравствуйте. Прошу помощи в реализации небольшой функции по нахождению неподвижной точки 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))
компилятор выдает ошибку “line 5, in fixed_point
return fixed_point(x+0.001)”
может кто подскажет где ошибка.
спасибо
FishHook
Посмотрите на ошибку внимательнее и увидите “RuntimeError: maximum recursion depth exceeded in cmp”, что дословно с буржуйского означает “Программа достигла максимальной глубины рекурсии”. То есть ваша рекурсивная функция сожрала весь отведенный для неё стек. Выход: избавиться от рекурсии.
jheniae
FishHook
Посмотрите на ошибку внимательнее и увидите “RuntimeError: maximum recursion depth exceeded in cmp”, что дословно с буржуйского означает “Программа достигла максимальной глубины рекурсии”. То есть ваша рекурсивная функция сожрала весь отведенный для неё стек. Выход: избавиться от рекурсии.
Спасибо большое за подсказку. К сожалению я не смог придумать алгоритм без рекурсии, по этому решил аргумент который возвращает функции увеличивать на f-x. Не знаю на сколько это правильно, но приближение считает довольно точно.
FishHook
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))

только это плохой алгоритм сам по себе, перебор в подобных задачах очень накладен, гуглите, например, метод деления пополам
4kpt_III
jheniae
Здравствуйте. Прошу помощи в реализации небольшой функции по нахождению неподвижной точки x = ln(x+1)+1

И что это должно значить? Экстремум нужен?
jheniae

4kpt_III
Нужно найти не подвижную точку функции, проще говоря найти такое значение “x”, когда f(x)=x с допустимой погрешность.
4kpt_III
Для того, чтобы решать такую задачу методами оптимизации необходимо определится с механизмом оценки качества того или иного решения, т.н. функционалом оценивания. Вот имеем 2 решения. Как определить, что первое лучше второго?
kamisama
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB