非线性方程(组):高维方程解法
非线性方程的高维情形和一维情形既有相似处也有差异。首当其中的区别即在高维情形中不再存在介值定理,从而使得二分法不再可推广到高维。不过,仍然有许多方法可以推广。
1. 不动点迭代(高维)
寻找方程 $\boldsymbol{x}=\boldsymbol{g}(\boldsymbol{x})$ 的解。其中 $\boldsymbol{g}:\mathbb{R}^n\rightarrow \mathbb{R}^n$ 为一个n维空间上的变换。迭代形式:$\boldsymbol{x}_{k+1}=\boldsymbol{g}(\boldsymbol{x}_k)$ 。不动点在高维空间的表现为点,经过迭代后位置不变。
项目 | 一维不动点迭代 | 高维不动点迭代 | 高维解释 |
迭代形式 | $x_{k+1}=g(x_k)$ | $\boldsymbol{x}_{k+1}=\boldsymbol{g}(\boldsymbol{x}_k)$ | |
收敛条件 | $x=g(x), |g'(x)|<1$ | $\boldsymbol{g}(\boldsymbol{x}), \rho(\boldsymbol{G}(\boldsymbol{x}^*))<1$ |
$\delta \boldsymbol{x}_{k+1}\approx \boldsymbol{G}(\boldsymbol{x}^*)\delta \boldsymbol{x}_k$ $||\delta \boldsymbol{x}_{k+1}|| \leq \rho(\boldsymbol{G}(\boldsymbol{x}^*)) \boldsymbol{x}_k$ |
收敛速度 |
线性收敛(当 $g'(x)\neq 0$ ); 至少二次收敛(当 $g'(x)=0$ ); |
线性收敛(当 $\rho (\boldsymbol{G}(\boldsymbol{x}^*))\neq 0$ ); 至少二次收敛(当 $\rho (\boldsymbol{G}(\boldsymbol{x}^*))=0$ ); |
|
迭代复杂度 |
一次标量函数求值 |
一次n维矢量函数求值,等价于n个标量函数求值 |
$\boldsymbol{G}(\boldsymbol{x})$ 是函数变换 $\boldsymbol{g}$ 在x处的Jacobi矩阵,$\rho$ 表示矩阵的谱半径,即矩阵特征值的最大模长(对于实数即绝对值)。正如 非线性方程(组):计算基本理论 中提到的,Jacobi矩阵是高维情形下导数的等价形式,更确切地说是线性主部的系数;线性代数的知识可知,特征值的几何意义是矩阵对于特征值对应特征向量方向的向量的伸缩比,如特征值为2的特征方向的向量被矩阵左乘以后方向不变、长度翻倍。综上所述,Jacobi矩阵的谱半径可作为微分系数的大小在高维下的等价。
2. 牛顿法(高维)
在一维情况下,牛顿法用零点附近的微分公式,利用上一个点的值和微商值估算下一个零点的估计值。
在高维情况下,同样使用零点附近的微分公式:$\boldsymbol{f}(\boldsymbol{x+\Delta x})=\boldsymbol{f}(\boldsymbol{x})+\boldsymbol{J}_f(\boldsymbol{x})\boldsymbol{\Delta x}$ ,带入 $\boldsymbol{f}(\boldsymbol{x+\Delta x})=\boldsymbol{0}$ ,则得到方程:$\boldsymbol{f}(\boldsymbol{x})+\boldsymbol{J}_f(\boldsymbol{x})\boldsymbol{\Delta x}$ 。若Jacobi矩阵非奇异(对于合理的问题,在零点附近的矩阵也理应是非奇异的,除非是重根)则方程的解可以写作:$\boldsymbol{\Delta x}=-\boldsymbol{J}_f(\boldsymbol{x})^{-1}\boldsymbol{f}(\boldsymbol{x})$ 。
此即高维牛顿方法的迭代方程:$\boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\boldsymbol{J}_f(\boldsymbol{x}_k)^{-1}\boldsymbol{f}(\boldsymbol{x}_k)$ 。注意到这里的 $\boldsymbol{f}$ 是一个向量,由Jacobi矩阵左乘仍为一个向量。数值方法中,不用显示地生成Jacobi矩阵的逆,只需要用Jacobi矩阵作为系数矩阵,$\boldsymbol{f}$ 作为右端项,用矩阵分解求解一个线性方程组即可,这样复杂度明显更低。
项目 | 一维牛顿法 | 高维牛顿法 | 解释 |
迭代形式 | $x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}$ |
$\boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\boldsymbol{J}(\boldsymbol{x}_k)^{-1}\boldsymbol{f}(\boldsymbol{x}_k)$ 在计算中一般求出 $\boldsymbol{J}(\boldsymbol{x}_k)\boldsymbol{s}_k=-\boldsymbol{f}(\boldsymbol{x}_k)$ 的解,然后 $\boldsymbol{x}_{k+1}=\boldsymbol{x}_k+\boldsymbol{s}_k$ |
|
收敛速度 |
对应不动点迭代: $g'(x^*)=\frac{f(x^*)f''(x^*)}{(f'(x^*))^2}=0$ 二次收敛 |
对应不动点迭代: $\boldsymbol{G}(\boldsymbol{x^*})=\boldsymbol{I}-\boldsymbol{J}(\boldsymbol{x}^*)^{-1}\boldsymbol{J}(\boldsymbol{x}^*) - \sum\limits_{i=1}^n f_i(\boldsymbol{x}^*)\boldsymbol{H}_i(\boldsymbol{x}^*)=\boldsymbol{O}$ 二次收敛 |
$\boldsymbol{I}-\boldsymbol{J}(\boldsymbol{x}^*)^{-1}-\sum\limits_{i=1}^nf_i(\boldsymbol{x}^*)\boldsymbol{H}_i=\boldsymbol{I}-\boldsymbol{I}-\boldsymbol{O}(f的各个分量均为零)=\boldsymbol{O} $ |
迭代步复杂度 |
两次函数求值(导数+原函数),固定四则运算两次; 另需要求导函数; |
n维向量函数 $\boldsymbol{f}$ 求值 + Jacobi矩阵 $\boldsymbol{J} 求值,即攻击 $n^2+n$ 次标量函数求值; 求 $\boldsymbol{J}(\boldsymbol{x}_k)\boldsymbol{s}_k=\boldsymbol{f}(\boldsymbol{x}_k)$ 的解系解n维线性方程组,$T(n)\approx n^3/3, O(n)=n^3$; 另需要求雅可比矩阵关于x的函数。 |
3. 布洛伊登(Broyden)方法(高维拟牛顿法和割线更新法的一种实现)
在一维中,割线法通过前两个点的坐标做出过前两个点的割线,将割线与横轴的交点坐标作为下一个零点估计值,实质上是利用线性插值的方法代替牛顿法中的求导给出了切线的估计。割线法的好处是不用计算导函数。计算导函数所要求的符号求导运算可以说时间开销等价于大量的浮点运算,且随着函数的形式变复杂而越来越“昂贵”。对于非符号表达式的函数,计算导函数还需要插值,同样非常昂贵。
牛顿法的这一缺陷在高维情况下更为严重:求导数的运算变成了求雅可比矩阵关于x的函数,原本只有一个标量函数符号求导变成了 $n^2$ 个符号求导,更不用说非符号表达式的函数求导函数。除此之外,每一步迭代中解线性方程组要求的 $n^3/3$ 的复杂度更产生了迭代复杂度的最高次项。因此高维的牛顿法尤为昂贵。
同时解决这两个问题的一种方法称为割线更新(Secant Updating)法。类似于一维的割线法,它的具体思路包括利用连续几次的取点及其函数值生成Jacobi矩阵的估计值,而不需要先进行符号求导而后每迭代一次再耗费 $n^2$ 次标量函数求值生成。同时,所谓的“更新”是说每一次迭代只需要将之前Jacobi矩阵的分解(factorization)稍作更新改动即可,不用全盘重来,因此就可以每次省下 $n^3$ 量级的运算成本。由于基本框架继承牛顿法,它也称为拟牛顿法(Quasi-Newton Method)。
余下的问题即,如何确定这样的Jacobi矩阵的近似矩阵,使得它既可以作为一个估计值,又可以使得每次迭代矩阵分解的变化尽可能少(并且易得)呢?选取近似矩阵是有自由度的,而实现割线更新方法的一种算法就是布罗伊登(Broyden)方法。对于以上两个条件,Broyden方法要求Jacobi的近似矩阵以两个形式满足:
可以作为估计值 $\Leftrightarrow $ $\boldsymbol{B}_k$ 满足割线方程 $\boldsymbol{B}_{k+1}(\boldsymbol{x}_{k+1}-\boldsymbol{x}_k)=\boldsymbol{f}(\boldsymbol{x}_{k+1})-\boldsymbol{f}(\boldsymbol{x}_k)$
新矩阵分解可以用较少的计算获得 $\Leftrightarrow$ 相邻的 $\boldsymbol{B}_k$ 满足秩一变换 $\boldsymbol{B}_{k+1}=\boldsymbol{B}_k+\boldsymbol{u}\boldsymbol{v}^T$
于是最终选择的迭代式:$$\boldsymbol{B}_{k+1}=\boldsymbol{B}_k+\frac{\boldsymbol{f}(\boldsymbol{x}_{k+1})\boldsymbol{s}_k^T}{\boldsymbol{s}_k^T\boldsymbol{s}_k}$$ 其中,$\boldsymbol{s}_k$ 为线性方程组 $\boldsymbol{B}_k\boldsymbol{s}_k=-\boldsymbol{f}(\boldsymbol{x}_k)$ 的解,而 $\boldsymbol{x}_{k+1}=\boldsymbol{x}_k+\boldsymbol{s}_k$ 。
转载于:https://www.cnblogs.com/gentle-min-601/p/9658495.html
非线性方程(组):高维方程解法相关推荐
- Matlab 编程 《计算流体力学基础及应用(约翰D安德森)》 全亚声速等熵喷管流动CFD解法 拉瓦尔喷管 非守恒形式方程解法
Matlab 编程 <计算流体力学基础及应用(约翰D安德森)> 全亚声速等熵喷管流动CFD解法 拉瓦尔喷管 非守恒形式方程解法 问题之 全亚声速等熵喷管流动的CFD解法 初始化参数 迭代过 ...
- 非线性方程(组):计算基本理论
1. 非线性方程(组)及其解 对于非线性函数 $f(x)$ ,方程 $f(x)=0$ 为非线性方程( $f:\mathbb{R} \rightarrow \mathbb{R}$ ). 对于n维向量 $ ...
- 常微分方程与常微分方程组的特征值解法总结笔记
来源链接:https://www.docin.com/p-2690426712.html 文章目录 常微分方程特征值解法 常微分方程组特征值解法 常微分方程特征值解法 设 nnn 次常微分方程为 x( ...
- 非线性方程(组):一维非线性方程(一)二分法、不动点迭代、牛顿法 [MATLAB]...
1. 二分法(Bisection) 1) 原理 [介值定理] 对于连续的一元非线性函数,若其在两个点的取值异号,则在两点间必定存在零点. [迭代流程] 若左右两端取值不同,则取其中点,求其函数值,取中 ...
- 2015年第六届蓝桥杯 - 省赛 - C/C++大学A组 - A. 方程整数解
方程整数解 方程: a^2 + b^2 + c^2 = 1000 (或参见[图1.jpg]) 这个方程有正整数解吗?有:a,b,c=6,8,30 就是一组解. 你能算出另一组合适的解吗? 请填写该解中 ...
- python解不等式组_LintCode Python解法
3.统计数字(Digit Count) 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. 首先是,惯用思维,2个循环解决,这样做的时间复杂度为O(n*2) 1 classS ...
- 【蓝桥杯 迷宫 2019省赛javaA组】BFS解法该死的Excel竟如此甜美
试题 D: 迷宫 本题总分:10 分 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方. 010000 000100 001001 110000 迷宫 ...
- 分糖果【第五届】【省赛】【B组】 C++解法
资源限制 时间限制:1.0s 内存限制:256.0MB 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有 ...
- matlab多元方程整数解,matlab多元非线性方程组解法
流放之路一天赚几百是真的吗 你想太多了.如果是搬砖收入的话一天能有2E就不错了.当然脸正的时候也可以一次就赚上10E.5173上1E=3+. 用MATLAB解多元非线性方程组,CSS布局HTML小编今 ...
最新文章
- cluster maintain manager Software群集管理软件
- python读取邮件发送日期和时间_Python读取指定日期邮件的实例
- maven工程如何引用css和js文件
- 标机电脑上安装yarn
- nvm用标准sata ahci码_能者多劳!让NVMe固态硬盘做系统盘的同时,加速SATA数据盘...
- Spring Boot开发Web应用
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败
- add in Web.config
- 避免uicollection view被错误的移动
- Linux diff diff3 diffstat
- java如何看jdk文档_如何在IntelliJ IDEA中查看JDK外部文档?
- PLC编程语言都在这里了!
- JavaScript 实现页面跳转的几种方式
- 怎样将视频mp4转换成flac无损音乐
- 图片上传时,显示格式错误怎么办?
- 计算机音乐谱毛不易,中国内地流行男歌手毛不易歌曲简谱精选
- 2.Paper小结——《Privacy-preserving blockchain-based federated learning for traffic flow prediction》
- 如何设置按组分页同时每页的行数为固定的行数
- 读H.265/HEVC编码笔记(一)
- Win7 Wifi和安卓端连接