gpt4 book ai didi

python - 二分查找函数函数、域和最大迭代次数作为参数

转载 作者:行者123 更新时间:2023-12-05 02:29:48 26 4
gpt4 key购买 nike

我是 python 和算法的新手,我正在努力使用以下函数。有人可以帮忙吗?:

对于这道题,你将需要使用二分查找法,通过连续平分域来找到域 𝑥∈[𝑎,𝑏] 上某个函数 𝑓(𝑥) 的根。在我们的例子中,函数的根可以定义为函数将返回 0 的 x 值,即 𝑓(𝑥)=0例如,对于函数:𝑓(𝑥)=𝑠𝑖𝑛2(𝑥)𝑥2−2 在域 [0,2] 上,可以在 𝑥≈1.43 处找到根。

约束

停止标准:||𝑓(𝑟𝑜𝑜𝑡)||<0.0001 或您达到最多 1000 次迭代。将您的答案四舍五入到小数点后两位。功能规范

参数:

f (function) → lambda 函数形式的数学表达式。域(元组)→给定一组两个整数的函数域。MAX (int) → 函数将执行的最大迭代次数。

我目前的解决方案还不够:

### START FUNCTION
def binary_search(f, domain, MAX = 1000):

### END FUNCTION```

---------------------------------

Required input:

f = lambda x:(np.sin(x)**2)*(x**2)-2
domain = (0,2)
x = binary_search(f,domain)
x

----------------------------------

Expected output:
1.43

最佳答案

您的代码唯一遗漏的是变量 MAX 的重新分配:

MAX = MAX - 1

然后我得到了预期的 1.43。

正如@Stef 所注意到的,在 while 循环中包含条件比在中间使用 return 更清晰。目前,您的循环相当于 while True 因为 start 将始终小于 end (假设传递的域顺序正确).

这应该更简洁一些:

def binary_search(f, domain, MAX = 1000):
start, end = domain
if start >= end:
raise ValueError("Domain is empty")
mid = (start + end) / 2
fmid = f(mid)
step = 0
while abs(fmid) > 0.0001 and step < MAX:
if fmid < 0:
start = mid
else:
end = mid
mid = (start + end) / 2
fmid = f(mid)
step += 1
return round(mid, 2)

关于python - 二分查找函数函数、域和最大迭代次数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72043866/

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