Secant method 弦截法

Secant method 弦截法

虽然牛顿法收敛速度很快,但它每次迭代要计算两个函数:\(f(x),f^{'}(x)\) .以前计算导函数一般页言是繁琐的,因此产生了一种不需要计臬导数的方法-弦截法。

为避免导数的计算,我们用差商 $ \frac {f(x_k)-f(x_0)}{x_k-x_0}$ 替代牛顿法中的导数$f^{'}(x_k) $,得到 弦截法(单点弦截法) 的迭代公式:

\[X_{k+1} = X_k - \frac{f(x_k)}{f(x_k)-f(x_0)} (x_k-x_0) \]

  • 算法
 def f(x: float) -> float:

 secant_method(
     lower_bound: float,   # 下界
     upper_bound: float,   # 上界
     repeats: int)         #  重复次数
     -> float: 

代码

[secant_method.py]{..\src\arithmetic_analysis\secant_method.py}

"""
Prepare
   1. sys.path 中增加 TheAlgorithms\src 子模块
"""
import sys
sys.path.append('E:\dev\AI\TheAlgorithms\src')

** 案例一

def f(x: float) -> float:

secant_method(1, 3, 2)

from arithmetic_analysis.secant_method import f, secant_method
# f: return 8 * x - 2 * exp(-x)

print(f(5)) #   39.98652410600183
'''
secant_method(1, 3, 2) #  0.2139409276214589
'''

print(f"Example: {secant_method(1, 3, 2) = }")

39.98652410600183
Example: secant_method(1, 3, 2) = 0.2139409276214589

posted @ 2021-06-15 14:39  IT88老兵  阅读(411)  评论(0编辑  收藏  举报