Python二分法求方程的根
对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
注意双击代码框可以横屏,更方便查看:)
下面用二分法求解方程x3-x2+x-1=0
def func(x):
return x**3-x**2+x-1
a=-1
b=2
fa=func(a)
fb=func(b)
while a<=b:
x0=(a+b)/2
fx0=func(x0)
if abs(fx0)<10e-6:
print('x0:',x0,fx0,'<10e-6')
print(x0,'是用二分法求解方程的根')
break`在这里插入代码片`
if fa*fx0<0:
b=x0
fb=fx0
print('解在左侧,a:',a,' b:',b,' x0:',x0)
elif fb*fx0<0:
a=x0
fa=fx0
print('解在右侧,a:',a,' b:',b,' x0:',x0)
运行结果
解在右侧,a: 0.5 b: 2 x0: 0.5
解在左侧,a: 0.5 b: 1.25 x0: 1.25
解在右侧,a: 0.875 b: 1.25 x0: 0.875
解在左侧,a: 0.875 b: 1.0625 x0: 1.0625
解在右侧,a: 0.96875 b: 1.0625 x0: 0.96875
解在左侧,a: 0.96875 b: 1.015625 x0: 1.015625
解在右侧,a: 0.9921875 b: 1.015625 x0: 0.9921875
解在左侧,a: 0.9921875 b: 1.00390625 x0: 1.00390625
解在右侧,a: 0.998046875 b: 1.00390625 x0: 0.998046875
解在左侧,a: 0.998046875 b: 1.0009765625 x0: 1.0009765625
解在右侧,a: 0.99951171875 b: 1.0009765625 x0: 0.99951171875
解在左侧,a: 0.99951171875 b: 1.000244140625 x0: 1.000244140625
解在右侧,a: 0.9998779296875 b: 1.000244140625 x0: 0.9998779296875
解在左侧,a: 0.9998779296875 b: 1.00006103515625 x0: 1.00006103515625
解在右侧,a: 0.999969482421875 b: 1.00006103515625 x0: 0.999969482421875
解在左侧,a: 0.999969482421875 b: 1.0000152587890625 x0: 1.0000152587890625
解在右侧,a: 0.9999923706054688 b: 1.0000152587890625 x0: 0.9999923706054688
x0: 1.0000038146972656 7.629423635080457e-06 <10e-6
1.0000038146972656 是用二分法求解方程的根