Python 二分法函数实现及应用示例
以下是一个可能的实现:
def bisection(f, a, b, eps):
'使用二分法求解方程 f(x) = 0 在 [a, b] 区间内的解。
参数:
f: 函数,接受一个实数参数,返回一个实数。
a, b: 实数,表示区间的左右端点。
eps: 实数,表示解的精度要求,即当区间长度小于 eps 时停止迭代。
返回:
实数,表示方程 f(x) = 0 的近似解。
'
fa, fb = f(a), f(b)
assert fa * fb < 0, 'f(a) 和 f(b) 必须异号'
while b - a > eps:
c = (a + b) / 2
fc = f(c)
if fc == 0:
return c
elif fa * fc < 0:
b, fb = c, fc
else:
a, fa = c, fc
return (a + b) / 2
# 测试
f = lambda x: x**2 - 2
a, b = 0, 2
eps = 1e-6
x = bisection(f, a, b, eps)
print(x) # 1.4142136573791504
# 输出到文件
with open('output.txt', 'w') as f:
f.write(f'{x:.10f} {eps} {a} {b}
')
该实现将二分法封装为一个函数 bisection,接受四个参数:待求解的方程 f,区间的左右端点 a 和 b,以及解的精度要求 eps。返回值为方程的近似解。
在函数内部,首先检查区间的左右端点的函数值是否异号,如果不是则抛出异常。接着进行循环,每次将区间中点的函数值与左右端点的函数值比较,如果与左端点的函数值异号,则说明解在左半区间,反之在右半区间。最后返回区间中点的值作为解的近似值。
在测试代码中,我们使用 lambda 表达式定义了函数 $f(x) = x^2 - 2$,将其作为参数传给 bisection 函数求解。最后,将解和其他参数输出到文件 "output.txt" 中,每行用 tab 分隔。注意,这里使用了 f-string 格式化输出。
原文地址: https://www.cveoy.top/t/topic/lDBT 著作权归作者所有。请勿转载和采集!