一、简介
若函数有实根,则函数曲线应当在根x*这一点上与x轴有一个交点,并且由于函数在根附近的左右区间内,函数值的符号应当相反。利用这一特点,可以通过不断将求根区间二分的方法,每次将求根区间缩小为原来的一半,在新的折半后的区间内继续搜索方程的根,对根所在区间继续二分,直到求出方程的根为止。
二、实现
# -*- coding: utf-8 -*-
"""
Created on Fri Dec 16 16:11:55 2016
二分法
@author: Administrator
"""
from numpy import *
from matplotlib import pyplot as plt
def f(x):
return e**x * cos(x) + 2
def binary_solve():
a = 0
b = 4 * pi
while True:
if a >= b:
return
m = (a + b) / 2
if b - a < 1e-5:
break
else:
f_num = f(m)
if f(a) * f_num < 0:
b = m
else:
a = m
return m
if __name__ == '__main__':
ans = binary_solve()
x = linspace(0,4*pi,1000)
y = f(x)
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(111)
ax.plot(x,y,'r')
ax.scatter(ans,f(ans))
fig.show()
fig.savefig('a.png')