Попытка создать функцию, которая принимает начальное предположение и 3 других параметра, чтобы получить догадки, которые сходятся к одному значению.
Попытка создать функцию python, которая принимает 4 аргумента:
функция python, которая принимает число в качестве ввода и возвращает число с плавающей точкой в качестве вывода.Используя это: def f(x): return 2 - exp(-x)
начальное предположение для фиксированной точки, число с плавающей точкой
значение допуска, aположительное число с плавающей запятой
максимальное число итераций, которые разрешено выполнять алгоритму
Чтобы измерить, насколько близка последняя догадкас фиксированной точкой, я беру 3 самых последних значения и использую это уравнение (zap
- это список, к которому в этом случае осуществляется доступ): caltol = abs(((zap[-1]-zap[-2])**2)/((2*zap[-2])-zap[-3]-zap[-1]))
Это код, который я уже пробовал, но кажетсячтобы получить ошибки вне диапазона в nugget = mega[len(mega)-numms]
.Кроме того, при использовании некоторых значений для параметров код не может вернуть правильные значения, один пример: guess_finder(f, xo=83.30748524231714, tol=0.0013756415772893204, max_it=232)
должен вернуть [83.30748524231714, 2.0, 1.8646647167633872]
, но вместо этого возвращает [83.30748524231714, 2.0, 1.8646647167633872, 1.8450518473052135, 1.8419828720850022]
Другой пример: выполнение guess_finder(f, xo=91.0, tol=1e-10, max_it=10)
должно выдать [91.0, 2.0, 1.8646647167633872, 1.8450518473052135, 1.8419828720850022, 1.8414971765224537, 1.8414201737059899, 1.8414079621425745, 1.8414060254740223, 1.8414057183297619]
from math import exp
from collections import OrderedDict
def f(x):
return 2 - exp(-x)
def guess_finder(func, xo, tol, max_it):
legit=[]
legit.append(xo)
caltol = 0
guesses = []
mega = []
for x in range(max_it-1):
xo = func(xo)
legit.append(xo)
zap = list(OrderedDict.fromkeys(legit))
if max_it > 3 and len(zap) >= 3:
mega = zap.copy()
for i in range(len(zap)):
print(caltol)
caltol = abs(((zap[-1]-zap[-2])**2)/((2*zap[-2])-zap[-3]-zap[-1]))
if caltol < tol:
zap.pop()
numms= len(mega)- len(zap)
if numms != 0 and numms > 0 :
nugget = mega[len(mega)-numms]
zap.append(nugget)
return zap
Функция должна генерировать догадки до тех пор, пока ϵn не станет меньше указанного значения допуска, или пока количество произведенных догадок (включая исходное предположение) не совпадет с максимальным числом итераций или превысит его.Следует вернуть список всех догадок.Потребуется иметь три предположения, прежде чем он сможет оценить допуск.
Любая помощь по этому вопросу будет принята с благодарностью.Спасибо.