求解非线性方程组的几种方法及程序实现

2021-06-16 01:25:48雍龙泉
湖北工程学院学报 2021年3期

雍龙泉

(陕西理工大学 数学与计算机科学学院, 陕西 汉中, 723001)

考虑非线性方程组

(1)

记x=(x1,x2,…,xn),向量函数F(x)=(f1(x),f2(x),…,fn(x))T,则方程组(1)等价于如下非线性方程

F(x)=0.

(2)

很多复杂的问题都可以转化为非线性方程组的求解问题,其最基本的求解方法是牛顿法[1-7]。近年来,相继出现了五阶牛顿迭代法[8]、七阶牛顿迭代法[9-10]、八阶牛顿迭代法[11-12]、九阶牛顿迭代法等[13-14]。对非线性方程组而言,牛顿迭代法需要计算偏导数矩阵,并依赖于初始点的选取和函数F(x)的性态[15-18],而在一些实际问题中如何选取合适的初始点本身是一个比较困难的问题,因此使用牛顿迭代法时具有一定的局限性[19]。

本文假设非线性方程组的解存在,在给定初始点后,如何把数学公式转变为可以运行的代码,让初学者对编程不再望而生畏;进而提高学生编程的兴趣,最终能够利用程序对实际问题进行求解,培养与提高学生的科学计算能力。

下面通过一个具体的非线性方程组,分别给出其Jacobi迭代、Gauss-Seidel迭代、Newton迭代、五阶牛顿迭代;在给出迭代公式和初始点后,并分别给出了MATLAB代码和对应的计算结果。

算例分别用Jacobi迭代法、Gauss-Seidel迭代法、Newton迭代法、五阶牛顿迭代法求解如下非线性方程组

1 Jacobi迭代

Jacobi迭代法的迭代格式:

表1 Jacobi迭代法的MATLAB代码

表2 Jacobi迭代计算结果

2 Gauss-Seidel迭代

Gauss-Seidel迭代法的迭代格式:

表3 Gauss-Seidel迭代法的MATLAB代码

表4 Gauss-Seidel迭代计算结果

3 Newton迭代

Newton迭代法的迭代格式:

Newton迭代法要求矩阵F′(x)可逆,若F′(x)奇异或接近奇异,可以采用阻尼Newton迭代法进行处理。

表5 Newton迭代法的MATLAB代码

表6 Newton迭代计算结果

4 五阶牛顿法迭代

文献[20]中给出了五阶牛顿迭代法:

登录APP查看全文