Python利用二分法求解函数极值与内部收益率

青禾
青禾
发布时间:2026-10-15| 5人浏览过
原创

本文介绍利用Python实现二分法查找连续函数底值的方法。通过设定精度阈值,迭代逼近目标函数值。文中以一年期季度投资为例,计算内部收益率,展示了从区间选择到结果输出的完整逻辑与代码实现。

二分法查找函数底值原理

假设连续函数f(x)在区间(a,b)上存在一个极值点m,且该点的函数输出值为M,即满足f(m)=M。我们可以利用二分法来查找这个极值点m,其中s代表一个足够小的误差阈值。

计算步骤如下:首先取区间中点t=(a+b)/2。判断|f(t)-M|是否小于等于s,若满足则m=t即为所求。若不满足且|f(t)-M|>s,需判断(f(t)-M)与(f(a)-M)是否同号。若同号,则更新左边界a=t;否则更新右边界b=t。随后继续执行t=(a+b)/2进行下一次二分,直到|f(t)-M|<=s成立,此时m=t。

内部收益率计算实例

具体应用场景如:一项为期一年的投资,每个季度初投入10000元,期满时总收入为44163.225元。现需计算其内部收益率,已知该收益率约为0.04。

对应的收益函数表达式如下:

在区间(0,1)内查找内部收益率。使用二分法,初始令t=(0+1)/2=0.5。比较发现|f(t)-44163.225|>10**(-10),且f(t)-44163.225与f(1)-44163.225同号,因此更新左边界,令t=(0+0.5)/2=0.25。重复此过程,最终查找到内部收益率为0.03999999445689362,该结果约等于0.04。

Python代码实现


def f(i):
    y = 10000 * (1 + i) ** 4 + 10000 * (1 + i) ** 3 + 10000*(1+i)**2+10000*(1+i)**1
    return y
def division(a,b,M,n):
    #a,b为自选值范围,(f(a)-M)*(F(b)-M)<或=0
    #M为f(x)输出值,n为输出值精度要求小数位数
    while True:
        t = (a + b) / 2
        if abs(f(t) - M) <= 10 ** (-n):
            m = t
            break
        if (f(t) - M) / abs(f(t) - M) == (f(a) - M) / abs(f(a) - M):
            a = t
        else:
            b = t
    return m
y=division(0,1,44163.225,10)
print(y)

以上即为利用Python二分法查找函数底值及计算内部收益率的完整介绍。如需了解更多相关Python函数知识,可搜索本站历史文章或继续浏览后续内容,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。