#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
# @Time : 2019/9/10 13:47
# @Author: Jtyoui@qq.com
from jtyoui.error import MathValueWarning
import math
import warnings
[文档]def theorem_Zero(function, x1: float, x2: float) -> float:
"""零点定理
定义一个函数:x^3-2x-5=0,求x等于多少。x的值域:[1,1000]
原理利用二分法不断的逼近,求出答案
:param function: 定一个函数
:param x1: 开始值
:param x2: 结束值
:return: 返回零点的值
"""
if function(x1) == 0:
return x1
elif function(x2) == 0:
return x2
elif function(x1) * function(x2) > 0:
warnings.warn('[a,b]区间的值应该满足:f(a)*f(b)<0', category=MathValueWarning)
return math.inf
else:
mid = x1 + (x2 - x1) / 2.0
while abs(x1 - mid) > math.pow(10, -9): # x值小于10亿分之一
if function(mid) == 0:
return mid
elif function(mid) * function(x1) < 0:
x2 = mid
else:
x1 = mid
mid = x1 + (x2 - x1) / 2.0
return mid
if __name__ == '__main__':
# 定义一个函数:x^3-2x-5=0,求x等于多少。x的值域:[1,1000]
print(theorem_Zero(lambda x: x ** 2 - 1, 0, 1000))