非线性方程(组)的求解
1. 非线性方程的求解
1.1 简介
非线性方程是指含有指数和余弦函数等非线性函数的方程,例如, e x − c o s ( π x ) = 0 e^x-cos(\pi x)=0 ex−cos(πx)=0
与线性方程相比,无论是解的存在性,还是求解的计算公式,非线性方程问题都比线性问题要复杂的多,对于一般线性方程 f ( x ) = 0 f(x)=0 f(x)=0,既无直接法可用,也无一定章程可寻。常用的方法有:
- 实根的对分法
- 迭代法
- 牛顿跌迭代法
- 弦截法
通常,非线性方程的根不止一个,因此在求解非线性方程时,要给定初值或求解范围。
1.2 实根对分法
对分法又称二分法,设函数 f ( x ) f(x) f(x)在 [ a , b ] [a,b] [a,b]上连续,且 f ( a ) f ( b ) < 0 f(a)f(b)<0 f(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 ) < 0 f(a)f(b)<0 f(a)f(b)<0,这就限制了对分法的使用范围;对分法只能计算方程的实根。
1.3 不动点迭代法
对给定的非线性方程 f ( x ) = 0 f(x)=0 f(x)=0,将它转换成等价形式: x = φ ( x ) . x=\varphi (x). x=φ(x).给定初始值 x 0 x_0 x0,构造迭代序列 x k + 1 = φ ( x k ) , k = 1 , 2 , . . . x_{k+1}=\varphi(x_k), k=1,2,... xk+1=φ(xk),k=1,2,...,如果迭代收敛,
lim k → ∞ x k + 1 = lim k → ∞ φ ( x k ) = α , \lim_{k\to\infty}x_{k+1}=\lim_{k\to\infty}\varphi(x_k)=\alpha, k→∞limxk+1=k→∞limφ(xk)=α,
有 α = φ ( α ) , \alpha=\varphi(\alpha), α=φ(α),则 α \alpha α就是方程 f ( x ) f(x) f(x)的根。在计算中,当 ∣ x k + 1 − x k ∣ |x_{k+1}-x_k| ∣xk+1−xk∣小于给定精度控制量时,取 x k + 1 x_{k+1} xk+1为方程的根。
例如,代数方程 x 3 − 2 x − 5 = 0 x^3-2x-5=0 x3−2x−5=0的三种等价形式及其迭代格式:
1.等价形式: x 3 = 2 x + 5 , x = 2 x + 5 3 , x^3=2x+5, x=\sqrt[3]{2x+5}, x3=2x+5,x=32x+5 ,
迭代格式: x k + 1 = 2 x k + 5 3 x_{k+1}=\sqrt[3]{2x_k+5} xk+1=32xk+5
2.等价形式: 2 x = x 3 − 5 , x = x 3 − 5 2 2x=x^3-5, x=\frac{x^3-5}{2} 2x=x3−5,x=2x3−5
3.等价形式: x 3 = 2 x + 5 , x = 2 x + 5 x 2 , x^3=2x+5,x=\frac{2x+5}{x^2}, x3=2x+5,x=x22x+5,
迭代形式: x k + 1 = 2 x k + 5 x k 2 x_{k+1}=\frac{2x_k+5}{x_k^2} xk+1=xk22xk+5
对于非线性方程 f ( x ) = 0 f(x)=0 f(x)=0,构造的各种迭代格式 x k + 1 = φ x k x_{k+1}=\varphi{x_k} xk+1=φxk,怎样判断其是否收敛?收敛于迭代的初始值是否有关?
因此可知,对于上面给出的代数方程 x 3 − 2 x − 5 = 0 x^3-2x-5=0 x3−2x−5=0,如果要求在 x 0 = 2 x_0=2 x0=2附近的实根,则只有第一种迭代形式收敛。
1.4 牛顿迭代法
对于非线性方程 f ( x ) = 0 f(x)=0 f(x)=0可构造多种迭代格式 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk),牛顿迭代法是借助于对函数 f ( x ) f(x) f(x)在 x 0 x_0 x0出做泰勒展开,取其线性部分构造的一种迭代格式。
将 f ( x ) = 0 f(x)=0 f(x)=0在初始值 x 0 x_0 x0做泰勒展开:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 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)(x−x0)+2!f′′(x0)(x−x0)2+...
取展开式的线性部分作为 f ( x ) f(x) f(x)的近似,则有,
f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) = 0 f(x_0)+f'(x_0)(x-x_0)=0 f(x0)+f′(x0)(x−x0)=0,设, f ′ ( x 0 ) ≠ 0 f'(x_0)\neq0 f′(x0)=0,则,
x = x 0 − f ( x 0 ) f ′ ( x 0 ) x=x_0-\frac{f(x_0)}{f'(x_0)} x=x0−f′(x0)f(x0)
因此得到牛顿迭代法的迭代格式:
x k + 1 = x k − f ( x k ) f ′ ( x k ) , k = 1 , 2 , . . . x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}, k=1,2,... xk+1=xk−f′(xk)f(xk),k=1,2,...
题外话:牛顿法不仅可以用于求非线性方程的根,还可以求最优化问题(等价于求目标函数导数/偏导数等于0的根),而且求解精确,一般用牛顿法求得的解称为ground-truth。
1.5 弦截法
在牛顿迭代法中: x k + 1 = x k − f ( x k ) f ′ ( x k ) , k = 1 , 2 , . . . x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}, k=1,2,... xk+1=xk−f′(xk)f(xk),k=1,2,...需要求解函数 f ( x ) f(x) f(x)的一阶导数,通常比较耗时,因此可用差商代替导数:
f ′ ( x k ) = f ( x k ) − f ( x k − 1 ) x k − x k − 1 f'(x_k)=\frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}} f′(xk)=xk−xk−1f(xk)−f(xk−1)
给定初始值 x 0 x_0 x0和 x 1 x_1 x1,那么弦截法的迭代格式为:
x k + 1 = x k − ( x k − x k − 1 ) f ( x k ) f ( x k ) − f ( x k − 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=xk−f(xk)−f(xk−1(xk−xk−1)f(xk),k=1,2,...
2. 非线性方程组的求解
设含有n个未知数的n个方程的非线性方程组为,
F ( x ) = 0 F(x)=0 F(x)=0
其中, x = ( x 1 , x 2 , . . . , x n ) T x=(x_1,x_2,...,x_n)^T x=(x1,x2,...,xn)T为n维列向量,
F ( x ) = ( f 1 ( x ) , f 2 ( x ) , . . . , f n ( x ) ) T F(x)=(f_1(x),f_2(x),...,f_n(x))^T F(x)=(f1(x),f2(x),...,fn(x))T
f i ( x ) ( i = 1 , 2 , . . . , n ) f_i(x)(i=1,2,...,n) fi(x)(i=1,2,...,n)中至少有一个是 x x x的非线性函数,并假设自变量和函数值都是实数。
2.1 不动点迭代法
多元非线性方程组与一元非线性方程 f ( x ) = 0 f(x)=0 f(x)=0具有相同的形式,可以与一元非线性方程并行地讨论它的迭代解法,例如不动点迭代法和Newton型迭代法。
把方程组的每一个方程改写成合适的迭代形式,即可得方程组的不动点迭代形式。
例如,有非线性方程组
{ x 1 2 − 10 x 1 + x 2 2 + 8 = 0 x 1 x 2 2 + x 1 − 10 x 2 + 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} {x12−10x1+x22+8=0x1x22+x1−10x2+8=0
写成等价形式:
{ x 1 = φ 1 ( x 1 , x 2 ) = 1 10 ( x 1 2 + x 2 2 + 8 ) x 2 = φ 2 ( x 1 , x 2 ) = 1 10 ( x 1 x 1 2 + x 1 + 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)
由此构造不动点迭代法:
{ x 1 ( k + 1 ) = φ 1 ( x 1 ( k ) , x 2 ( k ) ) = 1 10 [ ( x 1 ( k ) ) 2 + ( x 2 ( k ) ) 2 + 8 ] x 2 ( k + 1 ) = φ 2 ( x 1 ( k ) , x 2 ( k ) ) = 1 10 [ x 1 ( k ) ( x 1 ( k ) ) 2 + x 1 ( 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 展开式近似每一个分量函数 f i ( x ∗ ) = 0 f_i(x^*)=0 fi(x∗)=0值 ,有,
f i ( x ∗ ) ≈ f i ( x ( k ) + ∑ j = 1 n ∂ f i ( x ( k ) ) ∂ x j ( x j ∗ − x j ( k ) ) , i = 1 , 2 , . . . , n f_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,...,n fi(x∗)≈fi(x(k)+j=1∑n∂xj∂fi(x(k))(xj∗−xj(k)),i=1,2,...,n
写成向量形式有 F ( x ∗ ) ≈ F ( x ( k ) + F ′ ( x ( k ) ) ( x j ∗ − x ( k ) ) F(x^*)\approx F(x^{(k)}+F'(x^{(k)})(x_j^*-x^{(k)}) F(x∗)≈F(x(k)+F′(x(k))(xj∗−x(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 ) ) ) − 1 F ( 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 ) ) + μ k I ] △ 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称为阻尼因子, μ k I \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
非线性方程(组)的求解相关推荐
- 非线性方程(组):高维方程解法
非线性方程的高维情形和一维情形既有相似处也有差异.首当其中的区别即在高维情形中不再存在介值定理,从而使得二分法不再可推广到高维.不过,仍然有许多方法可以推广. 1. 不动点迭代(高维) 寻找方程 $\ ...
- 最大连续子数组和求解问题
题目:最大连续子数组和求解问题 一.背景: 问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所 ...
- fick第二定律matlab求解,(最新整理)实验二MATLAB数值计算常微分方程(组)的求解
<(最新整理)实验二MATLAB数值计算常微分方程(组)的求解>由会员分享,可在线阅读,更多相关<(最新整理)实验二MATLAB数值计算常微分方程(组)的求解(19页珍藏版)> ...
- 阿当姆斯校正程序代码MATLAB,全区间积分的阿当姆斯预报校正法(常微分方程组的求解)...
/* 代码作者:不详 代码整理者:设计天下 MySDN网站 算法天下工作室 功能:全区间积分的阿当姆斯预报校正法(常微分方程组的求解) */ #include "stdio.h" ...
- 非线性方程(组):计算基本理论
1. 非线性方程(组)及其解 对于非线性函数 $f(x)$ ,方程 $f(x)=0$ 为非线性方程( $f:\mathbb{R} \rightarrow \mathbb{R}$ ). 对于n维向量 $ ...
- 多元一次方程组的求解
求解多元一次方程组: f(1,1)x1+f(1,2)x2+f(1,3)x3+...=f(1,n) f(2,1)x1+f(2,2)x2+f(2,3)x3+...=f(2,n) f(3,1)x1+f(3, ...
- 非线性方程(组):一维非线性方程(一)二分法、不动点迭代、牛顿法 [MATLAB]...
1. 二分法(Bisection) 1) 原理 [介值定理] 对于连续的一元非线性函数,若其在两个点的取值异号,则在两点间必定存在零点. [迭代流程] 若左右两端取值不同,则取其中点,求其函数值,取中 ...
- MATLAB-非线性方程(组)求解
求非线性方程或方程组解的问题也就是求函数零点的问题.对于任意函数,在求解范围内可能有零点,也可能没有;可能只有一个零点,也可能有多个甚至无数个零点.MATLAB没有可以求解所有函数零点的通用命令,下面 ...
- 最大公因数等于 K 的子数组数目求解全过程
题目:给你一个整数数组 nums 和一个整数 k ,请你统计并返回 nums 的子数组中元素的最大公因数等于 k 的子数组数目. 子数组 是数组中一个连续的非空序列. 数组的最大公因数(Greates ...
- 常微分方程求解在MATLAB,MatLab常微分方程及常微分方程组的求解
最近参加了数学建模,对于老师说的Euler算法的不同步长的精度不一样,编写了一个M函数文件来实现这个精度的比较,把函数附上: function [x,y]= Euler(varargin) %这里使用 ...
最新文章
- 软件测试工程师怎样有效记录缺陷(Bug)功能测试面试经常问到
- 腾讯视频会议使用测试
- 在Servlet中使用开源fileupload包实现文件上传功能
- Python看程序执行时间(time模块)
- 【采用】反欺诈之四大杀器
- 联盟链赛道上,微众、蚂蚁、百度、京东等“正规军”能崛起吗?
- 2.1.3 操作系统之原语实现对进程的控制
- 5kb大小的云洗衣机HTML源码 朋友圈在线洗衣服
- 【转】企业网站建设方法论
- 人员梯度培养_人员管理 | 生产班组员工队伍管理及制度建立
- Codeforces Round #159 (Div. 2)
- RTP包里面得到H.264数据和AAC数据的方法
- [知识竞赛策划方案] 【图】关于知识竞赛抢答器的问题
- varchar(10)与nvarchar(10)有什么区别
- TIT 数据库实验一 在SQL Server中创建数据库(SQL入门教学一 从0到1)
- 网络安全实验室 脚本关 解析
- 西门子s300编程实例_plc西门子s300编程 西门子编程1000例
- 区块链入门系列之P2P
- 网站歌曲播放器php,推荐漂亮的flash网页MP3音乐播放器
- ARTS打卡10-抓住海森堡Bug
热门文章
- 2022-2027年中国海参行业市场调研及未来发展趋势预测报告
- 华为设备配置静态路由与静态BFD联动
- 管理知识型员工:德鲁克日志之五月一日
- android无法加载sd卡上的字体,[Android]AnkiDroid 0.6 版暂时不支持(某些)音标字体的显示,附解决办法 | 古意人...
- 给hacke拨乱反正 黑客、红客、蓝客究竟是什么--来自:互联网实验室
- X4扭曲字体或图形 coreldraw_CorelDRAW X4下载
- 为什么只有奇次谐波_什么是奇次谐波和偶次谐波?_学小易找答案
- 华为NAT的命令总结
- docker指定网桥和网段
- 苹果字体怎么改_苹果手机:普及:此次Filzajailed ROOT和越狱工具的区别