gpt4 book ai didi

python - 创建一个 python 函数,该函数采用初始猜测和参数来生成以单个值终止的猜测

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:53 24 4
gpt4 key购买 nike

尝试创建一个接受初始猜测和 3 个其他参数的函数,以生成收敛于单个值的猜测。

尝试制作一个接受 4 个参数的 python 函数:

  • 一个 python 函数,它接受一个数字作为输入,并返回一个 float 作为输出。使用这个:def f(x): return 2 - exp(-x)

  • 对定点、 float 的初始猜测

  • 公差值,正值 float

  • 允许算法运行的最大迭代次数

为了衡量最近的猜测与定点的接近程度,我取了 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.8419828720850742214, 7.1982872085074214, 7.198267 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 小于指定的容差值,或者直到产生的猜测次数(包括初始猜测)匹配/超过最大迭代次数。它应该返回所有猜测的列表。在评估容差之前需要进行三个猜测。

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

代码中的两个修改 -

  1. for i in range(len(zap)): ,你需要在 length - 2 处停止,因为公差值非常高,否则它会超出范围 - for i in range(len(zap)-2):

  2. 当收敛速度比迭代次数快得多时添加条件 - if len(zap)>3: return zap[:3];

此外,由于您要对列表进行排序,因此只有在 x <f(x) or x>f(x) for x in your space 时才有效。 .

您的完整代码将如下所示 -

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)

#print(legit)

zap = list(OrderedDict.fromkeys(legit))
#print(legit)
if max_it > 3 and len(zap) >= 3:
mega = zap.copy()

for i in range(len(zap)-2):
print(caltol)
caltol = abs(((zap[-1]-zap[-2])**2)/((2*zap[-2])-zap[-3]-zap[-1]))

if caltol < tol:
zap.pop()
if len(zap)>3:
print("test")
return zap[:3]
numms= len(mega)- len(zap)
if numms != 0 and numms > 0 :
nugget = mega[len(mega)-numms]
zap.append(nugget)

return zap

关于python - 创建一个 python 函数,该函数采用初始猜测和参数来生成以单个值终止的猜测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com