弦截法及Python实现

目录

1 原理

2 弦截法的求解过程

3 弦截法的几何解释

3.1 定端点弦截法

3.2 变端点弦截法

4 案例&Python实现


1 原理

弦截法是在牛顿法的基础上进行了改良。牛顿法迭代公式如下:

x_{n+1}=x_n-\frac{f(x)}{f'(x)}

从迭代公式可以看出,牛顿迭代法的一个较强的要求是:f'(x)存在且不为0。弦截法的思想就是用弦斜率去近似代替f'(x)

弦截法的迭代公式有两种:
① 定端点迭代法,用点(x_0,f(x_0))和点(x_n,f(x_n))连线的斜率 近似代替f'(x) 。

x_{n+1}=x_n-\frac{x_n-x_0}{f(x_n)-f(x_0)}f(x_n)

② 变端点迭代法,又叫快速弦截法, 用点(x_n,f(x_n))和点(x_{n+1},f(x_{n+1}))连线的斜率 近似代替f'(x) 。

x_{n+1}=x_n-\frac{x_n-x_{n-1}}{f(x_n)-f(x_{n-1})}f(x_n)

弦截法和牛顿法的异同点:

相同点不同点
都是线性化方法

牛顿法在计算x_{n+1}时,只用到了x_n,所以称之为单点迭代法;

弦截法在计算x_{n+1}时,用到了x_nx_{n-1},所以称之为多点迭代法;

弦截法不需要计算导函数,运算量更小

2 弦截法的求解过程

① 求解迭代函数;

② 构造迭代公式(一般采用变端点弦截法);

② 确定迭代初值;

③ 确定迭代终止条件。

3 弦截法的几何解释

3.1 定端点弦截法

迭代过程如下:

  • 定端点为P_0(x_0,f(x_0))
  • 起始迭代点为P_1(x_1,f(x_1))
  • 连接P0、P1,两点的连线与x轴的交点的横坐标为x_2
  • 更新迭代起始点为P_2(x_2,f(x_2))
  • 连接P0、P2,两点的连线与x轴的交点的横坐标为x_3
  • ......
  • 如此循环P0与Pn连线与x轴的交点会无限接近于真实解x*

3.2 变端点弦截法

迭代过程如下:

  • 起始迭代点有两个点P_0(x_0,f(x_0))P_1(x_1,f(x_1))
  • 连接P0、P1,两点的连线与x轴的交点的横坐标为x_2
  • 更新起始迭代点为P_1(x_1,f(x_1))P_2(x_2,f(x_2))
  • 连接P1、P2,两点的连线与x轴的交点的横坐标为x_3

  • ......

  • 如此循环,P_nP_{n+1}连线与x轴的交点会无限接近于真实解x*

4 案例&Python实现

用快速弦截法求解方程x^3-x-1=0的根,精度要求\varepsilon =10^{-9}

输出近似解以及迭代次数。

程序流程:

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
  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dfreedom.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值