割线法(Secant Method)是一种数值求解方程的方法,特别是单变量函数的零点求解。它是一种迭代方法,不像二分法那样需要函数在区间两端异号,而是利用函数在两个点上的函数值来迭代逼近零点。以下是割线法数值求解方程的求解步骤:


求解步骤

割线法求解多元方程的步骤如下:

步骤1: 选择初始点,选取两个初始点
步骤2: 计算割线斜率,
步骤3: 构造迭代公式,利用割线斜率和区间端点值构造迭代公式:

步骤4: 迭代,重复步骤2和步骤3,利用迭代公式计算 ,并检查是否满足停止准则,比如函数值的改变小于某个预设的阈值或者迭代次数超过预设的最大值。


Mathematica

  • 使用二分法数值解方程 的近似根。首先令 ,画出 的图形:

In[]:=
1
2
f[x_] = x^2 - x;
Plot[f[x], {x, -1, 2}]
Out[]:=

xf(x)-11212f(x)=x2-x


可以看出方程有两个根,大致在 0 和 1 附近,我们选取 0.4 和 1.5 为例在 mathematica 中数值求解:

In[]:=
1
2
3
4
5
6
7
8
9
x[-1] = 0.4; x[0] = 1.5; error = 1;
n = 0;
(*n 为迭代次数,为防止遇到不收敛的情况,将最大迭代次数设为 1000。
计算精度要求 0.0001,可以自行设定为需要精度*)
While[error > 10^-4 && n < 1000,
x[n + 1] = x[n] - (x[n] - x[n - 1])/(f[x[n]] - f[x[n - 1]]) f[x[n]];

error = Abs[f[x[n + 1]]];
n++]

迭代次数和误差为:

In[]:=
1
2
n
error
Out[]:=


解为:

In[]:=
1
Table[x[i], {i, 1, n}]
Out[]:=

我们发现解不在 0.4 和 1.5 之间。再取初始值 0.6 和 1.5 在 mathematica 中数值求解:

In[]:=
1
2
3
4
5
6
7
8
9
x[-1] = 0.6; x[0] = 1.5; error = 1;
n = 0;
(*n 为迭代次数,为防止遇到不收敛的情况,将最大迭代次数设为 1000。
计算精度要求 0.0001,可以自行设定为需要精度*)
While[error > 10^-4 && n < 1000,
x[n + 1] = x[n] - (x[n] - x[n - 1])/(f[x[n]] - f[x[n - 1]]) f[x[n]];

error = Abs[f[x[n + 1]]];
n++]

迭代次数和误差为:

In[]:=
1
2
n
error
Out[]:=

解为:

In[]:=
1
Table[x[i], {i, 1, n}]
Out[]:=


优缺点

优点有:

  • 割线法在接近根点时收敛速度较快。
  • 割线法不需要函数在区间两端异号,因此在函数值符号未知或者在区间端点函数值同号时仍然适用。
  • 割线法不需要求解函数的导数,而是通过割线的斜率来逼近零点,因此可以应用于一些无法求导或求导困难的函数。

缺点包括:

  • 对于某些函数,割线法可能会发散或不稳定。
  • 选择合适的初始点 可能需要一定的经验或启发式方法,如果初始值离根太远,则不能保证割线法收敛,最好先画图。


请大家多多关注、点赞、收藏、转发,让更多有需要的人可以看到,以后会分享更多实用的算法。

万分感谢!🙏