目录
1 原理
弦截法是在牛顿法的基础上进行了改良。牛顿法迭代公式如下:
从迭代公式可以看出,牛顿迭代法的一个较强的要求是:存在且不为0。弦截法的思想就是用弦斜率去近似代替
。
弦截法的迭代公式有两种:
① 定端点迭代法,用点和点
连线的斜率 近似代替
。
② 变端点迭代法,又叫快速弦截法, 用点和点
连线的斜率 近似代替
。
弦截法和牛顿法的异同点:
相同点 | 不同点 |
都是线性化方法 | 牛顿法在计算 弦截法在计算 |
弦截法不需要计算导函数,运算量更小 |
2 弦截法的求解过程
① 求解迭代函数;
② 构造迭代公式(一般采用变端点弦截法);
② 确定迭代初值;
③ 确定迭代终止条件。
3 弦截法的几何解释
3.1 定端点弦截法
迭代过程如下:
- 定端点为
;
- 起始迭代点为
;
- 连接P0、P1,两点的连线与x轴的交点的横坐标为
;
- 更新迭代起始点为
;
- 连接P0、P2,两点的连线与x轴的交点的横坐标为
;
- ......
- 如此循环P0与Pn连线与x轴的交点会无限接近于真实解
。
3.2 变端点弦截法
迭代过程如下:
- 起始迭代点有两个点
和
;
- 连接P0、P1,两点的连线与x轴的交点的横坐标为
;
- 更新起始迭代点为
和
;
-
连接P1、P2,两点的连线与x轴的交点的横坐标为
;
-
......
-
如此循环,
与
连线与x轴的交点会无限接近于真实解
。
4 案例&Python实现
用快速弦截法求解方程
的根,精度要求
。
输出近似解以及迭代次数。
程序流程:
Python代码:
#----弦截法求根-----#
import numpy as np
def f(x):
y=x**3-x-1#求根方程的表达式
return y
def main():
x0=0;x1=np.pi/2 #取初值
e=10**(-9) #误差要求
N=10000 #迭代次数上限
L=0 #初始化迭代次数
while abs((f(x1)-0))>e: #采用残差来判断
x2=x1-(x1-x0)/(f(x1)-f(x0))*f(x1) #迭代公式
x0=x1
x1=x2
L=L+1 #统计迭代次数
if L>N:
print("超出迭代次数上限")
break
print(f"x2={x2}") #输出数值解
print(f(x2)-0) # 验证解的正确性
print(f"L={L}") #输出迭代次数
if __name__ == '__main__':
main()
运行结果:
x2=1.324717957244748
8.881784197001252e-15
L=9