非线性方程(组)的求解

本文介绍了解非线性方程及方程组的几种常见数值方法,包括对分法、迭代法、牛顿法及其变种,以及这些方法在实际计算中的应用特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 非线性方程的求解

1.1 简介

非线性方程是指含有指数和余弦函数等非线性函数的方程,例如,ex−cos(πx)=0e^x-cos(\pi x)=0excos(πx)=0
与线性方程相比,无论是解的存在性,还是求解的计算公式,非线性方程问题都比线性问题要复杂的多,对于一般线性方程f(x)=0f(x)=0f(x)=0,既无直接法可用,也无一定章程可寻。常用的方法有:

  • 实根的对分法
  • 迭代法
  • 牛顿跌迭代法
  • 弦截法

通常,非线性方程的根不止一个,因此在求解非线性方程时,要给定初值或求解范围。

1.2 实根对分法

对分法又称二分法,设函数f(x)f(x)f(x)[a,b][a,b][a,b]上连续,且f(a)f(b)<0f(a)f(b)<0f(a)f(b)<0,则f(x)f(x)f(x)[a,b][a,b][a,b]上至少有一零点,这是微积分中的介值定理,也是使用对分法的前提条件。算 法如下:

对分法求根算法
 注意:对分法算法简单,然而,若[a,b][a,b][a,b]上有几个零点时,只能算出其中一个零点;另一方面,即使[a,b][a,b][a,b]上有零点,也未必有f(a)f(b)<0f(a)f(b)<0f(a)f(b)<0,这就限制了对分法的使用范围;对分法只能计算方程的实根

1.3 不动点迭代法

对给定的非线性方程f(x)=0f(x)=0f(x)=0,将它转换成等价形式:x=φ(x).x=\varphi (x).x=φ(x).给定初始值x0x_0x0,构造迭代序列xk+1=φ(xk),k=1,2,...x_{k+1}=\varphi(x_k), k=1,2,...xk+1=φ(xk),k=1,2,...,如果迭代收敛,
lim⁡k→∞xk+1=lim⁡k→∞φ(xk)=α,\lim_{k\to\infty}x_{k+1}=\lim_{k\to\infty}\varphi(x_k)=\alpha,klimxk+1=klimφ(xk)=α,
α=φ(α),\alpha=\varphi(\alpha),α=φ(α),α\alphaα就是方程f(x)f(x)f(x)的根。在计算中,当∣xk+1−xk∣|x_{k+1}-x_k|xk+1xk小于给定精度控制量时,取xk+1x_{k+1}xk+1为方程的根。
例如,代数方程x3−2x−5=0x^3-2x-5=0x32x5=0的三种等价形式及其迭代格式:
1.等价形式:x3=2x+5,x=2x+53,x^3=2x+5, x=\sqrt[3]{2x+5},x3=2x+5,x=32x+5,
 迭代格式:xk+1=2xk+53x_{k+1}=\sqrt[3]{2x_k+5}xk+1=32xk+5
 
2.等价形式:2x=x3−5,x=x3−522x=x^3-5, x=\frac{x^3-5}{2}2x=x35,x=2x35

3.等价形式:x3=2x+5,x=2x+5x2,x^3=2x+5,x=\frac{2x+5}{x^2},x3=2x+5,x=x22x+5,
迭代形式:xk+1=2xk+5xk2x_{k+1}=\frac{2x_k+5}{x_k^2}xk+1=xk22xk+5

对于非线性方程f(x)=0f(x)=0f(x)=0,构造的各种迭代格式xk+1=φxkx_{k+1}=\varphi{x_k}xk+1=φxk,怎样判断其是否收敛?收敛于迭代的初始值是否有关?
迭代法收敛定理

因此可知,对于上面给出的代数方程x3−2x−5=0x^3-2x-5=0x32x5=0,如果要求在x0=2x_0=2x0=2附近的实根,则只有第一种迭代形式收敛。

1.4 牛顿迭代法

对于非线性方程f(x)=0f(x)=0f(x)=0可构造多种迭代格式xk+1=φ(xk)x_{k+1}=\varphi(x_k)xk+1=φ(xk),牛顿迭代法是借助于对函数f(x)f(x)f(x)x0x_0x0出做泰勒展开,取其线性部分构造的一种迭代格式。
f(x)=0f(x)=0f(x)=0在初始值x0x_0x0做泰勒展开:
f(x)=f(x0)+f′(x0)(x−x0)+f′′(x0)2!(x−x0)2+...f(x)=f(x_0)+f'(x_0)(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+...f(x)=f(x0)+f(x0)(xx0)+2!f(x0)(xx0)2+...
取展开式的线性部分作为f(x)f(x)f(x)的近似,则有,
f(x0)+f′(x0)(x−x0)=0f(x_0)+f'(x_0)(x-x_0)=0f(x0)+f(x0)(xx0)=0,设,f′(x0)≠0f'(x_0)\neq0f(x0)=0,则,
x=x0−f(x0)f′(x0)x=x_0-\frac{f(x_0)}{f'(x_0)}x=x0f(x0)f(x0)
因此得到牛顿迭代法的迭代格式:
xk+1=xk−f(xk)f′(xk),k=1,2,...x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}, k=1,2,...xk+1=xkf(xk)f(xk),k=1,2,...
 题外话:牛顿法不仅可以用于求非线性方程的根,还可以求最优化问题(等价于求目标函数导数/偏导数等于0的根),而且求解精确,一般用牛顿法求得的解称为ground-truth。

1.5 弦截法

在牛顿迭代法中:xk+1=xk−f(xk)f′(xk),k=1,2,...x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}, k=1,2,...xk+1=xkf(xk)f(xk),k=1,2,...需要求解函数f(x)f(x)f(x)的一阶导数,通常比较耗时,因此可用差商代替导数:
f′(xk)=f(xk)−f(xk−1)xk−xk−1f'(x_k)=\frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}}f(xk)=xkxk1f(xk)f(xk1)
给定初始值x0x_0x0x1x_1x1,那么弦截法的迭代格式为:
xk+1=xk−(xk−xk−1)f(xk)f(xk)−f(xk−1,k=1,2,...x_{k+1}=x_k - \frac{(x_k-x_{k-1})f(x_k)}{f(x_k)-f(x_{k-1}}, k=1,2,...xk+1=xkf(xk)f(xk1(xkxk1)f(xk),k=1,2,...

2. 非线性方程组的求解

设含有n个未知数的n个方程的非线性方程组为,
F(x)=0F(x)=0F(x)=0
其中,x=(x1,x2,...,xn)Tx=(x_1,x_2,...,x_n)^Tx=(x1,x2,...,xn)T为n维列向量,
F(x)=(f1(x),f2(x),...,fn(x))TF(x)=(f_1(x),f_2(x),...,f_n(x))^TF(x)=(f1(x),f2(x),...,fn(x))T
fi(x)(i=1,2,...,n)f_i(x)(i=1,2,...,n)fi(x)(i=1,2,...,n)中至少有一个是xxx的非线性函数,并假设自变量和函数值都是实数。

2.1 不动点迭代法

多元非线性方程组与一元非线性方程f(x)=0f(x)=0f(x)=0具有相同的形式,可以与一元非线性方程并行地讨论它的迭代解法,例如不动点迭代法和Newton型迭代法。
把方程组的每一个方程改写成合适的迭代形式,即可得方程组的不动点迭代形式。
例如,有非线性方程组
{x12−10x1+x22+8=0x1x22+x1−10x2+8=0 \begin{cases} x_1^2-10x_1+x_2^2+8=0\\ x_1x_2^2+x_1-10x_2+8=0 \end{cases} {x1210x1+x22+8=0x1x22+x110x2+8=0
写成等价形式:
{x1=φ1(x1,x2)=110(x12+x22+8)x2=φ2(x1,x2)=110(x1x12+x1+8) \begin{cases} x_1=\varphi_1(x_1,x_2)=\frac{1}{10}(x_1^2+x_2^2+8)\\ x_2=\varphi_2(x_1,x_2)=\frac{1}{10}(x_1x_1^2+x_1+8) \end{cases} {x1=φ1(x1,x2)=101(x12+x22+8)x2=φ2(x1,x2)=101(x1x12+x1+8)
由此构造不动点迭代法:
{x1(k+1)=φ1(x1(k),x2(k))=110[(x1(k))2+(x2(k))2+8]x2(k+1)=φ2(x1(k),x2(k))=110[x1(k)(x1(k))2+x1(k)+8] \begin{cases} x_1^{(k+1)}=\varphi_1(x_1^{(k)},x_2^{(k)})=\frac{1}{10}[(x_1^{(k)})^2+(x_2^{(k)})^2+8]\\ x_2^{(k+1)}=\varphi_2(x_1^{(k)},x_2^{(k)})=\frac{1}{10}[x_1^{(k)}(x_1^{(k)})^2+x_1^{(k)}+8] \end{cases} {x1(k+1)=φ1(x1(k),x2(k))=101[(x1(k))2+(x2(k))2+8]x2(k+1)=φ2(x1(k),x2(k))=101[x1(k)(x1(k))2+x1(k)+8]

2.1 牛顿法

对于非线性方程组,也可以构造类似于一元方程的Newton迭代法。设x∗x^*x是方程组的解,x(k)x^{(k)}x(k)是方程组的一个近似解。
用点x(k)x^{(k)}x(k)处的一阶 Taylaor 展开式近似每一个分量函数fi(x∗)=0f_i(x^*)=0fi(x)=0值 ,有,
fi(x∗)≈fi(x(k)+∑j=1n∂fi(x(k))∂xj(xj∗−xj(k)),i=1,2,...,nf_i(x^*)\approx f_i(x^{(k)}+\sum_{j=1}^n\frac{\partial f_i(x^{(k)})}{\partial x_j}(x_j^*-x_j^{(k)}), i=1,2,...,nfi(x)fi(x(k)+j=1nxjfi(x(k))(xjxj(k)),i=1,2,...,n
写成向量形式有F(x∗)≈F(x(k)+F′(x(k))(xj∗−x(k))F(x^*)\approx F(x^{(k)}+F'(x^{(k)})(x_j^*-x^{(k)})F(x)F(x(k)+F(x(k))(xjx(k))
其中F′(x(k))F'(x^{(k)})F(x(k))F(x)F(x)F(x)的Jacobi矩阵F′(x)F'(x)F(x)x(k)x^{(k)}x(k)的值,若F′(x(k))F'(x^{(k)})F(x(k))非奇异,可得牛顿迭代法
x(k+1)=x(k)−(F′(x(k)))−1F(x(k)),x^{(k+1)}=x^{(k)}-(F'(x^{(k)}))^{-1}F(x^{(k)}),x(k+1)=x(k)(F(x(k)))1F(x(k)),
在实际计算中,由于计算矩阵的逆十分耗时,因此牛顿法的第k步是先解线性方程组
F′(x(k))△x(k)=−F(x(k))F'(x^{(k)})\triangle x^{(k)}=-F(x^{(k)})F(x(k))x(k)=F(x(k))
解出△x(k)\triangle x^{(k)}x(k)后,再令x(k+1)=x(k)+△x(k)x^{(k+1)}=x^{(k)}+\triangle x^{(k)}x(k+1)=x(k)+x(k),其中的计算量包括计算向量F(x(k))F(x^{(k)})F(x(k))和矩阵F′(x(k)F'(x^{(k)}F(x(k)

2.2 阻尼牛顿法

虽然Newton法具有二阶局部收敛性,但它要求F′(x∗)F'(x^*)F(x)非奇异。如果矩阵F′(x∗)F'(x^*)F(x)奇异或病态,那么F′(x(k)F'(x^{(k)}F(x(k)也可能奇异或病态,从而可能导致数值计算失败或产生数值不稳定。这时可使用阻尼牛顿法,即把牛顿法的迭代公式改成,
[F′(x(k))+μkI]△x(k)=−F(x(k)),k=0,1,...[F'(x^{(k)}) + \mu_k I]\triangle x^{(k)}=-F(x^{(k)}), k=0,1,...[F(x(k))+μkI]x(k)=F(x(k)),k=0,1,...
其中的参数μk\mu_kμk称为阻尼因子,μkI\mu_k IμkI称为阻尼项。增加阻尼项的目的,是使线性方程的系数矩阵非奇异并良态。当μk\mu_kμk选得很合适时,阻尼Newton法是线性收敛的。

2.3 拟牛顿法

类似于弦截法,导数F′(x)F'(x)F(x)需要近似。
比较流行的有DFP,BFGS,L-BFGS。
to be continued.

3.总结

本文介绍了非线性方程(组)常用的解法。

4.参考资料

中科大精品课程:
http://www.bb.ustc.edu.cn/jpkc/xiaoji/szjsff/jsffkj/chapt4_1.htm
中南大学数学科学与计算技术学院
http://netclass.csu.edu.cn/jpkc2008/China/09WebMaths/Teach_Method/Coursesppt/6/6.4%20%E9%9D%9E%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%E7%BB%84%E7%9A%84%E6%95%B0%E5%80%BC%E8%A7%A3%E6%B3%95.pdf

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值