解x=g(x)的简单迭代法
有理数的整数次方根近似值的计算方法
因此可取a3或a4为结果,保留至6位小数可得≈ 1.414214,误差不超过10− 6。
【例1.2】计算的近似值,精确到10− 6。
解:这里a= 3,ε0= 10− 6,根据迭代公式(1.7)可得
an=(2an− 1+)(n∈N+),
因为4.913 = 1.73< 5 < 1.83= 5.832,取初值a0= 1.7,代入迭代公式,为精确到10− 6,计算结果均保留至7位小数:
这就是(1.6)式,同理(1.7)式也可以用微分法导出。
【例2.1】计算的近似值,精确到10− 3。
解:根据(2.9)式,≈ 1 +(x→ 0),如果取x= 1,则有
=≈ 1 + 1/2 = 1.5,
这显然是不准确的,因为x取的过大,近似公式不再适用了。
正确的做法是,可取x0= 1.42= 1.96,则Δx= 2 −x0= 0.04,可得
【例2.4】计算e1.02的近似值,精确到0.001。
解:根据(2.13)式,设f(x) =ex,则f'(x) =ex,可得
ex+h≈ex+ ex∙h= ex∙(1 +h)(h→ 0);
令x= 1,h= 0.02,取e≈2.7183,则有
e1.02= e1 + 0.02≈e1∙(1 + 0.02) = 1.02e≈1.02×2.7183≈2.7727≈2.773。
为了应用方便,有时也把(2.3)式或(2.4)式写成另一种简单形式,把x0简写为x,把自变量的增量记为Δx=h,于是上述公式可以简写为
f(x+h) ≈f(x) +f'(x)∙h(h→ 0)(2.13)
7、解非线性方程的迭代法
§3 迭代收敛的加速方法
一、埃特金加速收敛方法
对于收敛的迭代过程,由迭代公式校正一次得 x1 = ϕ ( x0 ),
二分法优、缺点; 用途。
§2
一、不动点迭代
迭代法
将非线性方程f ( x) = 0化为等价形式 x = ϕ ( x).
(2.1)
f ( x*) = 0 ⇔ x* = ϕ ( x*) ; 称x * 为函数ϕ ( x)的一个不动点.
给定初始近似值x0 , 可以得到x1 = ϕ ( x0 ). 如此反复,构造迭代公式 xk +1 = ϕ ( xk ), k = 0,1,2,⋯. 称ϕ ( x)为迭代函数. (2.2)
(ϕ ( x) − x) 2 . ψ ( x) = x − ϕ (ϕ ( x)) − 2ϕ ( x) + x
(3.4)
(3.5)
定理5 定理5 若x * 为ψ ( x)的不动点, 则x * 为ϕ ( x)的不动点. 反之, x * 为ϕ ( x)的不动点,设ϕ ′′( x)存在, ϕ ′( x*) ≠ 1,则x * 为ψ ( x) 的不动点,且斯蒂芬森迭代法(3.3)是2阶收敛的.
k +1
.
(1.ቤተ መጻሕፍቲ ባይዱ)
例2 求x3 − x − 1 = 0在[1.0,1.5]内的一个实根,准确到 小数点后2位.
k ak 0 1.0 1 1.25 2 3 1.3125 4 5 6 1.3203 bk 1.5 1.375 1.3438 1.3281 xk 1.25 1.375 1.3125 1.3438 1.3281 1.3203 1.3242 f(xk)符号 − + − + + − −
第7章.非线性方程迭代法
f
的重根
=
的单根。
➢ 正割法 / Secant Method / :
Newton’s Method 一步要计算 f 和 f ’,相当于2个函数值, 比较费时。现用 f 的值近似 f ’,可少算一个函数值。
割线
/ secant line /
收敛比Newton’s Method 慢, 且对初值要求同样高。
牛顿迭代法的改进与推广
➢ 重根 / multiple root / 加速收敛法:
Q1: 若 f (x*) ,0 Newton’s Method 是否仍收敛? 设 x* 是 f 的 n 重根,则:f ( x) ( x x*)n q( x) 且 q( x*) 0。
因为 Newton’s Method 事实上是一种特殊的不动点迭代,
④
|
x
*
xk
|
1
1
L
|
xk 1
xk
|
?
✓ | xk1 xk | | x * xk | | x * xk1 | | x * xk | L | x * xk |
⑤
|
x*
xk
|
Lk 1 L
|
x1
x0
|
?
可用 | xk1 xk |来 控制收敛精度
| xk1 xk | | g( xk ) g( xk1 ) | | g(ξk )(xk xk1 ) |
3
| g( x) | | x2 | 1
现令 ( x) (1 K )x Kg( x) (1 K )x K ( x3 1)
3
希望 | ( x) | | 1 K Kx2 | 1,即
2 K 0 x2 1
在 (1, 2) 上可取任意 2 K,例0如K = 0.5,则对应
第五章 解线性方程组的迭代解法
定义迭代法为: 定义迭代法为:
x ( k + 1) = G J x ( k ) + g
其中Jacobi迭代矩阵:GJ = D1 ( L + U ) 迭代矩阵: 其中 迭代矩阵
g = D 1b = (7.2, 8.3, 8.4)T 取 x ( 0 ) = (0, 0, 0)T , 代入迭代式,得x(1) = Bx ( 0 ) + g = (7.2, 8.3, 8.4)T x ( 2 ) = Bx (1) + g = (9.71,10.70,11.5)T x (9 ) = (10.9994,11.9994,12.9992) 精确解为 x = (11,12,13)T .
记
A = D L U
其中 D = diag (a11 ,, ann ) , L, U 分别为 A 的 严格下、上三角形部分元素构成的三角阵 严格下、上三角形部分元素构成的三角阵. Gauss-Seidel方法的矩阵形式为 方法的矩阵形式为
x ( k +1) = D1 ( Lx ( k +1) + Ux ( k ) + b)
或者
x ( k +1) = ( D L)1Ux ( k ) + ( D L)1 b
( 这说明Gauss-Seidel方法的迭代矩阵为 D L)1U 方法的迭代矩阵为 这说明
从而有
定理5.2 定理5.2 Gauss-Seidel方法收敛的充分必要条件为 方法收敛的充分必要条件为
ρ (GG ) < 1 或
2.2 迭代法
x k +1 = 3 x k + 1
计算结果如下: 计算结果如下:
k=0,1,2,3…….
计算方法
k 0 1 2 3 4
xk
1.5 1.35721 1.33086 1.32588 1.32494
k 5 6 7 8
xk
1.32476 1.32473 1.32Байду номын сангаас72 1.32472
精确到小数点后五位
x = 1.32472
′( x* ) = ϕ ′′( x* ) = L = ϕ ( p−1) ( x* ) = 0, ϕ ( p ) ( x* ) ≠ 0 ϕ 邻域是p阶收敛的。 则迭代过程在 x * 邻域是p阶收敛的。
证: 由于 ϕ ′( x * ) = 0 * ′( x* ) < 1 , 即在 x 邻域 ϕ ϕ ( xk ) 在 x * 处 有局部收敛性, 所以 xk+1 = ϕ( xk ) 有局部收敛性, 将 泰勒展开
计算方法
一、迭代法的基本思想: 迭代法的基本思想: 为求解非线性方程f(x)=0的根,先将其写成便于 的根, 为求解非线性方程 的根 迭代的等价方程
x = ϕ ( x)
的连续函数。 其中ϕ ( x ) 为x的连续函数。 的连续函数
(2.3)
计算方法
即如果数 α 使 f(x)=0, 则也有 α = ϕ (α ) , 反之, 反之, 若α = ϕ (α ) ,则也有 f (α ) = 0 的右端, 任取一个初值 x ,代入式 x = ϕ ( x ) 的右端, 得到 0
ϕ ′( x ) ≤ L < 1
计算方法
则对于任意的初始值 x0 ∈ S ,由迭代公式 收敛于方程的根。 产生的数列 { xn } 收敛于方程的根。 (这时称迭代法在 α 的S邻域具有局部收敛性。) 邻域具有局部收敛性。)
迭代法求解方程(组)的根
迭代法求解⽅程(组)的根⾸先,迭代法解⽅程的实质是按照下列步骤构造⼀个序列x0,x1,…,xn,来逐步逼近⽅程f(x)=0的解:1)选取适当的初值x0;2)确定迭代格式,即建⽴迭代关系,需要将⽅程f(x)=0改写为x=φ(x)的等价形式;3) 构造序列x0,x1,……,xn,即先求得x1=φ(x0),再求x2=φ(x1),……如此反复迭代,就得到⼀个数列x0, x1,……,xn,若这个数列收敛,即存在极值,且函数 φ(x)连续,则很容易得到这个极限值,x*就是⽅程f(x)=0的根。
举个例⼦:求解⽅程: f(x) =x^3-x-1=0 在区间 (1,1.5)内的根。
⾸先我们将⽅程写成这种形式:⽤初始根x0=1.5带⼊右端,可以得到这时,x0和x1的值相差⽐较⼤,所以我们要继续迭代求解,将x1再带⼊公式得直到我们我们得到的解的序列收敛,即存在极值的时候,迭代结束。
下⾯是这个⽅程迭代的次数以及每次xi的解(i=0,1,2....)我们发现当k=7和8的时候,⽅程的解已经不再发⽣变化了,这时候我们就得到了此⽅程的近似解。
1#define eps 1e-82int main()3{4x0=初始近似根;5do{6x1=x0;7x0=g(x1); //按特定的⽅程计算新的近似根8}while(fabs(x0-x1)>eps);9printf("⽅程的近似根是%f\n",x0);10}注意:如果⽅程⽆解,算法求出的近似根序列就不会收敛,那么迭代过程就会变成死循环。
因此,在使⽤迭代算法前应先考察⽅程是否有解,并在算法中对迭代次数给予限制。
下⾯再写⼀个求解⽅程组的例⼦加深⼀下理解:算法说明:⽅程组解的初值X=(x0,x1,…,xn-1),迭代关系⽅程组为:xi=gi(X)(i=0,1,…,n-1),w为解的精度,maxn为迭代次数。
算法如下:算法核⼼:1int main()2{3for(i=0; i<n; i++)4x[i]=初始近似根;5do6{7k=k+1;8for(i=0; i<n; i++)9y[i]=x[i];10for(i=0; i<n; i++)11x[i]=gi(X); //按特定的⽅程计算新的近似根12c=0;13for(i=0; i<n; i++)14c=c+fabs(y[i]-x[i]);//c要每次重新设初值为015}while(c>eps and k<maxn );16for(i=0; i<n; i++)17print("变量的近似根是",x[i]);18}选取初始向量精确度为1e-8,迭代次数为100求解代码如下:1#include<iostream>2#include<cstdio>3#include<cstring>4#include<cmath>5#define eps 1e-86using namespace std;7const int maxn=100;8double x[10],y[10];9int main()10{11for(int i=1;i<=4;i++)12x[i]=0;13int cnt=0;14double c=0;15do{16for(int i=1;i<=4;i++)17y[i]=x[i];18for(int i=1;i<=4;i++)19{20x[1]=(6+x[2]-2*x[3])/10;21x[2]=(25+x[1]+x[3]-3*x[4])/11;22x[3]=(-11-2*x[1]+x[2]+x[4])/10;23x[4]=(15-3*x[2]+x[3])/8;24}25c=0;26for(int i=1;i<=4;i++)27c+=(fabs(y[i]-x[i]));28}while(c>eps&&cnt<maxn);29for(int i=1;i<=4;i++)30printf("x%d = %.4lf\n",i,x[i]);31}运⾏结果如下:迭代法求解⽅程的过程是多样化的,⽐如⼆分逼近法求解,⽜顿迭代法等。
第7章 非线性方程的数值解法
设 0为给定精 度要求,试确定分半次 数k 使
x* xk
ba 2k
由 于2k , 两 边 取 对 数 , 即 得
ba
k ln(b a) ln
ln 2
数值分析
18/47
§例1: 5.用2 二二分分法 求 法x3 4x2 10 0在[1,2]内 的 根 ,
要 求 绝 对 误 差 不 超 过1 102。 2
第七章 非线性方程的数值解法
数值分析
本章内容
§7.1 方程求根与二分法 §7.2 不动点迭代及其收敛性 §7.4 牛顿法 §7.5 弦截法
数值分析
2/47
本章要求
1. 掌握二分法基本原理,掌握二分法的算法 流程;
2. 掌握理解单点迭代的基本思想,掌握迭代 的收敛条件;
3. 掌握Newton迭代的建立及几何意义,了解 Newton迭代的收敛性;
27/47
§ 7.2 不动点迭代法及其收敛性
不动点迭代的几个重要问题: 1、迭代格式的构造; 2、初值的选取; 3、敛散性的判断;☆ 4、收敛速度的判断。
数值分析
28/47
§ 7.2 不动点迭代法及其收敛性
三.压缩映射原理(整体收敛性)
考虑方程x g( x), g( x) C[a, b], 若
则f (x)=0在[a, b]内必有一根。
二. 过程
将区间对分,判别f (x)的符号,逐步缩小有根区 间。
数值分析
14/47
§7.1.2 二分法
三. 方法
取xmid=0.5*(a+b)
若f(xmid) < (预先给定的精度),则xmid即为根。
否则,若f (a)*f (xmid)<0,则取a1=a,b1=xmid 若f (a)*f (xmid)>0,则取a1=xmid,b1=b 此时有根区间缩小为[a1, b1],区间长度为 b1-a1=0.5*(b-a)
2.2 迭代法
首先用归纳假设证明如下不等式
| x* xk | Lk | x* x1 |
38
当k=1时 x x1 L x x0 ,已证成立。
k 1 x x L x x0 成立,可得 假设 k 1
不动点迭代的几何解释 y=f(x)=x y=g(x)
38
不动点判定定理
设g是一连续函数,且 { pn } 是由不动点迭代 n 0
生成的序列。若 lim pn p ,则p是g(x)的不动点
n
pn 1 p pn p ,则 lim 证:lim n n
g ( p ) g (lim pn ) lim g( pn ) lim pn1 p
1 1 x xk x k 1 x k ( x k ) ( x k 1 ) 1 L 1 L L Lk x k x k 1 x1 x0 1 L 1 L
L越小,收敛越快
38
不动点迭代的图形解释
一般来说从 f ( x ) 0 , 构造 ( x )不止一种,有的
38
由介值定理,存在 x [a , b] 使 f ( x ) 0
即
x ( x ).
②设方程 x ( x ) 还有一根 , 即 a (a ). 则由微分中值定理有
x ( x ) ( ) ( )( x ) L x
x4 2x 2 x 3 0 x 2 ( x)
x 4 1
x 3 ( x) x4 2x2 3
(其中第二式 x4 2 x 2 1=x 4 )
不动点迭代格式
不动点迭代格式
不动点迭代格式是将不动点迭代法公式进行变形得到的形式。
具体来说,不动点迭代法是为了求方程组的根,其等价形式为 x=g(x),迭代形式为
xk+1=g(xk)。
将不动点迭代法应用到求解∇f(x)=0,就是在求极值点。
例如,对于求解∇f(x)=0,将其改造成 x=g(x) 的形式,得到
∇f(x)=0⇒x=x−α(x)∇f(x),其中α(x):Rd→R。
这个公式可以对应梯度下降法。
此外,不动点迭代格式还可以通过不同的变形适用于不同的问题。
例如,在凸优化问题中采用不同的迭代格式可以得到不同的算法,如共轭梯度法等。
以上内容仅供参考,如需更多信息,建议查阅不动点迭代法的相关书籍或论文。
迭代法
2 迭代法2.1 迭代法的一般概念迭代法是数值计算中一类典型方法,不仅用于方程求根,而且用于方程组求解,矩阵求特征值等方面。
迭代法的基本思想是一种逐次逼近的方法。
首先取一个精糙的近似值,然后用同一个递推公式,反复校正这个初值,直到满足预先给定的精度要求为止。
对于迭代法,一般需要讨论的基本问题是:迭代法的构造、迭代序列的收敛性天收敛速度以及误差估计。
这里,主要看看解方程迭代式的构造。
对方程(1.1),在区间],[b a 内,可改写成为:)(x x ϕ= (2.1)取],[0b a x ∈,用递推公式:)(1k k x x ϕ=+, Λ,2,1,0=k(2.2)可得到序列:∞==0210}{,,,,k k k x x x x x ΛΛ(2.3) 当∞→k 时,序列∞=0}{k k x 有极限x ~,且)(x ϕ在x ~附近连续,则在式(2.2)两边极限,得,)~(~x x ϕ=即,x ~为方程(2.1)的根。
由于方式(1.1)和方程(2.1)等价,所以,x x ~*= 即,*lim x x k k =∞→ 式(2.2)称为迭代式,也称为迭代公式;)(x ϕ可称为迭代函数。
称求得的序列∞=0}{k k x为迭代序列。
2.2 程序和实例下面是基于MATLAB 的迭代法程序,用迭代格式)(1n n x g p =+,求解方程)(x g x =,其中初始值为0p 。
**************************************************************************function[p,k,err,P]=fixpt(f1021,p0,tol,max1)% f1021是给定的迭代函数。
% p0是给定的初始值。
% tol 是给定的误差界。
% max1是所允许的最大迭代次数。
% k 是所进行的迭代次数加1。
% p 是不动点的近似值。
% err 是误差。
% P = {p1,p2,…,pn}P(1) = p0;for k = 2:max1P(k) = feval('f1021', P(k-1));k, err = abs(P(k) - P(k-1))p = P(k);if(err<tol),break;endif k == max1disp('maximum number of iterations exceeded');endendP=P;****************************************************************************例2.1 用上述程序求方程0sin 2=-x x 的一个近似解,给定初始值5.00=x ,误差界为510-。
高校工程数学迭代法求方程根教学课件
作迭代格式
xk+1=(2xk3+5)/(3xk2-2) 取x0=2.5,得迭代序 列:x1=2.164179104,x2=2.097135356,x3=2.094555232, X4=2.094551482=x5,故 α x4
补充[例1]
作迭代格式 xk+1=(xk3-5)/2
令x0=2.5,得迭代序列:x1=5.3125,x2=72.46643066,
≤(qp+qp-1+…+q)|xk–xk-1|≤q/(1–q)•|xk–xk-1|
收敛性
令p→∞,由上式可得
|x*–xk|≤q/(1–q)•|xk–xk-1| 这个误差估计式说明,只要迭代值的偏差|xk–xk-1| 相当小,就可以保证迭代误差|x*–xk|足够小,因此 可用条件:
|xk–xk-1|<ε
k
,也就是 x* = g(x* ),即x* 是 g lim x lim g x k 1 k k k
的根,也就是f 的根。若{ xk}发散,则迭代 法失败。
迭代法原理
[例2-3-1] 求方程 f(x0)=x3–x–1=0 在x=1.5附近的一个根。 [解] 将方程(2.3.1)改写成下列形式 (2.3.2) 用所给的初始近似x0=1.5代入(2.3.2)的右端,得到 (2.3.1)
[例2-3-1a]
迭代初值仍取x0=1.5,则有: x1=2.375
x2=12.3976
继续迭代下去已经没有必要,因为结果显然会越 来越大,不可能趋向于某个极限。这种不收敛的 迭代过程称作是发散的。 一个发散的迭代过程,纵使进行了千百次迭代, 其结果也是毫无价值的。
补充[例1]
[例1] 用简单迭代法求区间(2,3)内方程x3-2x-5=0的根
迭代算法
# include
# define MAXN 100
int a[MAXN];
void comb(int m,int k)
{ int i,j;
for (i=m;i>=k;i--)
{ a[k]=i;
if (k>1)
【问题】 编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。
斐波那契数列为:0、1、1、2、3、……,即:
fib(0)=0;
fib(1)=1;
fib(n)=fib(n-1)+fib(n-2) (当n>1时)。
写成递归函数有:
int fib(int n)
{ if (n==0) return 0;
if n 为偶数 then
n=n/2
else
n=n*3+1
end if
这就是需要计算机重复执行的迭代过程。这个迭代过程需要重复执行多少次,才能使迭代变量 n 最终变成自然数 1 ,这是我们无法计算出来的。因此,还需进一步确定用来结束迭代过程的条件。仔细分析题目要求,不难看出,对任意给定的一个自然数 n ,只要经过有限次运算后,能够得到自然数 1 ,就已经完成了验证工作。因此,用来结束迭代过程的条件可以定义为: n=1 。参考程序如下:
设第 1 次分裂之前的个数为 x 0 、第 1 次分裂之后的个数为 x 1 、第 2 次分裂之后的个数为 x 2 、……第 15 次分裂之后的个数为 x 15 ,则有
x 14 =x 15 /2 、 x 13 =x 14 /2 、…… x n-1 =x n /2 (n ≥ 1)
因为第 15 次分裂之后的个数 x 15 是已知的,如果定义迭代变量为 x ,则可以将上面的倒推公式转换成如下的迭代公式:
计算方法 4方程求根的迭代法
这样,我们总可以假设方程(5―1)(a,b)内有且仅有 一个单实根x*。由连续函数的介值定理知
f(a)·f(b)<0 若数值b-a较小,那么我们可在(a,b)上任取一点x0作 为方程的初始近似根。
例如,方程
f(x)=x3-x-1=0 由于f(1)<0,f(1.5)>0,又f(x)在区间(1,1.5)上单调连 续,故可知在(1,1.5)内有且仅有一个实根。于是可取某 个端点或区间内某一个点的值作为根的初始近似值。
方程的形式很多,我们主要讨论一元非线性方程,也 即
f(x)=0
(5―1)
方程(5―1)可以有实根,也可以有复根或者重根等 。本章主要讨论它的实根的数值计算问题。
方程根的数值计算大致可分三个步骤进行: (1) 判定根的存在性。 (2)确定根的分布范围,即将每一个根用区间隔离 开来。 (3)根的精确化,即根据根的初始近似值按某种方 法逐步精确化,直至满足预先要求的精度为止。
设函数f(x)在区间[a,b]上单调连续,且 f(a)·f(b)<0
则方程(5―1)在区间(a,b)内有且仅有一个实根x。 下面在有根区间(a,b)内介绍二分法的基本思想。
计算f(a)与f(x0),若 f(a)·f(x0)<0
则根x∈(a,x0),令
a1=a,b1=x0 否则x∈(x0,b),令
a1=x0,b1=b
该序列必以根x为极限,即
故对于预先给定的精度ε,若有
(5―3)
则结果xk就是方程(5―1)满足预给精度ε的近似根, 也即
由式(5―2)和(5―3)还可得到误差估计式为
(5―4)
对于确定的精度ε,从式(5―4)易求得需要二等分 的次数k。
二分法具有简单和易操作的优点。其计算步骤如 下,框图如图5.3所示。
数值分析第三章线性方程组的迭代法课件
§ 3.3.2 Gauss—Seidel 迭代法的矩阵表示
将A分裂成A =D+L+U,则Ax b 等价于
(D+L+U )x = b
于是,则高斯—塞德尔迭代过程
Dx(k1) Lx(k1) Ux(k) b
因为 D 0 ,所以 D L D 0
故
(D L)x(k1) Ux(k) b
x(k1) (D L)1Ux(k) (D L)1b
e(k) x(k) x* Gx(k1) d (Gx* d) G(x(k1) x* ) Ge(k1)
于是 e(k) Ge(k1) G 2e(k2) Gk e(0)
由于 e (0)可以是任意向量,故 e(k) 收敛于0当且仅
故 (D L)x(k1) (1)D U x(k) b
显然对任何一个ω值,(D+ωL)非奇异, (因为假设 aii 0,i 1,2,, n )于是超松弛迭代公式为
x(k1) (D L)1 (1)D U x(k) (D L)1b
令 L (D L)1 (1)D U
f (D L)1b
则超松弛迭代 公式可写成
称为雅可比迭代公式, B称为雅可比迭代矩阵
雅可比迭代矩阵表示法,主要是用来讨论其收敛 性,实际计算中,要用雅可比迭代法公式的分量 形式。即
x1(k 1)
1 a11
(a12 x2(k )
a13 x3(k )
a1n xn(k )
b1 )
x2(k 1)
1 a 22
(a21 x1(k )
a23 x3(k )
§ 3.4.2超松弛迭代法的矩阵表示 设线性方程组 Ax=b 的系数矩阵A非奇异,且主对角
元素 aii 0(i 1,2,, n) , 则将A分裂成
计算底点纬度Bf的数值迭代算法
计算底点纬度Bf的数值迭代算法作者:吴琼烟来源:《新教育时代》2015年第12期摘要:本文研究了不动点迭代法、斯特芬森迭代法、牛顿-瑞弗森迭代法和割线法等四种数值迭代算法及其在底点纬度计算中的应用,并用MATLAB软件予以实现。
将数值迭代算法结果与经典算法结果进行比较,结果表明:利用数值迭代算法求解底点纬度,简单易行,准确可靠。
关键词:底点纬度数值迭代算法 MATLAB根据子午线弧长反求底点纬度Bf 是椭球大地测量学中的一项重要内容,是高斯投影坐标反算的基础。
底点纬度是高斯反算过程中一个重要的中间变量,当参数Bf 的值确定之后,接下来高斯投影反算的过程就变得非常简单了,从某种程度上讲,高斯投影坐标反算过程的关键就在于求出底点纬度Bf 的值。
底点纬度的求解本质上讲就是一个非线性方程的求根问题,数值分析中对此类问题有成熟的计算方法,即数值迭代算法,同时借助于计算机程序设计进行计算,可得到准确的数值解,涉及的数学技巧较少,简单易行,准确可靠。
一、计算底点纬度的经典算法由子午线弧长反求底点纬度是由纬度值计算子午线弧长的逆问题,下面首先对子午线弧长计算的经典算法进行介绍,在此基础上再对计算底点纬度的经典算法进行说明。
1.子午线弧长计算的经典算法大地测量学经典教材[1]给出了计算子午线弧长的基本公式:从赤道到大地纬度为B处的子午线弧长为(1)式中,M为子午线曲率半径,a为椭球长半轴,e为椭球第一偏心率。
对于(1)式而言,由于被积函数结构复杂,其原函数无法求出,故不能直接用牛顿-莱布尼茨积分进行计算。
在经典教材中,采用近似解析法,即把被积函数M按照牛顿二项式定理展开为e的幂级数,并将正弦的幂函数展开为余弦的倍数函数,然后逐项进行积分,考虑到计算结果的目的和精度,得到以下两个实用计算公式:(2)(3)(4)(5)2.底点纬度计算的经典算法已知从赤道到某点处的子午线弧长X,计算该点的大地纬度Bf ,即为底点纬度计算。
数值计算_第4章 解线性方程组的迭代法
如果用高斯-赛德尔迭代法 迭代72次得:
用SOR迭代法 ,只须迭代25次即得:
逐次超松弛迭代算法
下列算法假定迭代矩阵收敛,否则要在WHILE循环中增加判断条件。
1.定义和输入系数矩阵 与常数项向量 的元素,输入松弛因子 的值。
2.FOR i:=1,2,…,n
//假定 ,形成常数项向量
FOR
当方程组的系数矩阵 具有某些性质时,可直接判定由它生成的雅可比迭代矩阵是收敛的。
定理4.3若方程组 的系数矩阵 ,满足下列条件之一,则其雅可比迭代法是收敛的。
(1) 为行对角占优阵,即
(2) 为列对角占优阵,即
证明:(1)雅可比迭代矩阵 其中
(2) 为列对角优阵,故 为行对角占优阵,由系数矩阵 构造的迭代矩阵 为行对角占优阵,则有
通常,把 的迭代称为亚松弛迭代,把 的迭代称为高斯-塞德尔迭代,而把 的迭代称为松弛迭代。
4.4
在线性代数中逆矩阵是按其伴随矩阵定义的,若 则方阵 可逆,且 ,其中 为 的伴随矩阵。要计算 个 阶的列式才能得到一个伴随矩阵,在数值计算中因其计算工作量大而不被采用。通常对 做行的初等的效换,在将 化成 的过程中得到 。在数值计算中,这仍然是一种行之有效的方法。
事实上,在计算 前,已经得到 的值,不妨将已算出的分量直接代入迭代式中,及时使用最新计算出的分量值。因此 的计算公式可改为:
即用向量 计算出 的值,用向量 计算出 的值 ,用向量 计算出 的值,这种迭代格式称为高斯—塞德尔迭代。
对于方程组AX=y,如果由它构造高斯-塞德尔迭代和雅可比迭代都收敛,那么,多数情况下高斯—塞德尔迭代比雅可比迭代的收敛效果要好,但是情况并非总是如此。
又
得到
而 ,
第4章非线性方程(组)的求解
fixpt.m
y p1 p0
y=x y=g(x)
y p0
y=x
x0 y x1 x* y=x x x0 y y=g(x) p0 x* y=g(x)
p1 y=g(x) x1 y=x x
p0 p1 x1 x0 x*
x x0 x*
p1
x
x1
4.3 Newton法
原理:将非线性方程线性化 —— Taylor 展开 取 x0 x*,将 f (x)在 x0 做一阶Taylor展开: f ( ) 2 f ( x ) f ( x ) f ( x )( x x ) ( x x ) , 在 x0 和 x 之间. 0 0 0 0 2 ! 将 (x* x0)2 看成高阶小量,则有:
割线
切线
收敛比Newton’s Method 慢, 且对初值要求同样高。
x1 x0
切线斜率
割线斜率
f ( x ) f ( x ) k k 1 f( x ) k x x k k 1
f( x )( x x ) k k k 1 x x k 1 k f( x ) f( x ) k k 1
非线性方程组可以看作非线性方程的推广,而非线性方程就是非线性方程组的特 例。非线性方程组的一般数学描述为:
f1 ( x1 , x 2 , f (x , x , 2 1 2 f n ( x1 , x 2 , , xn ) 0 , xn ) 0 , xn ) 0
f(x 0) 0 f ( x *) f ( x ) f ( x )( x * x ) x *x 0 0x k) x k 1 x k f (x 线性 /* linear */ k)
使用Matlab进行迭代计算的方法
使用Matlab进行迭代计算的方法引言:在科学计算和工程领域,迭代计算是一种常用的数值计算方法。
它通过多次迭代逼近解决方案,对于复杂问题具有很高的效率和准确性。
Matlab是一种强大的数值计算软件,具备丰富的工具箱和库,为迭代计算提供了便利。
本文将介绍使用Matlab进行迭代计算的方法,并探讨一些常见的迭代算法。
一、迭代计算的基本原理迭代计算是一种通过逐次逼近解决方案的数值计算方法。
它通常开始于一个近似解,通过多次迭代来逐步改进解的准确性,直到满足收敛条件或达到预设的迭代次数。
迭代计算的基本原理如下:1. 选择合适的初值:迭代计算的结果依赖于初始值的选择。
初值应该接近准确解,以便缩小误差范围。
2. 建立迭代模型:根据问题的特性和数学模型,建立迭代计算的基本形式。
通常,问题可以化为一个方程或者一组方程的求解。
3. 迭代逼近:从初始值开始,通过逐次迭代来逼近准确解。
每一次迭代都会产生一个更加精确的解,直到满足收敛条件。
4. 收敛判断:在每一次迭代之后,需要判断是否满足收敛条件。
常见的收敛条件有解的相对误差小于某个阈值,或者迭代次数达到预设的最大次数。
二、常见的迭代算法Matlab提供了多种迭代算法的函数和工具箱,下面将介绍几种常见的迭代算法以及在Matlab中的应用。
1. 简单迭代法:也称为迭代逼近法,是一种基本的迭代算法。
它适用于函数的连续可导且导数在某个区间内的绝对值小于1的情况。
简单迭代法的公式如下: x(i+1) = g(x(i))其中,g(x)为转化后的原方程,x(i)为第i次迭代的解,x(i+1)为第i+1次迭代的解。
在Matlab中,可以使用fzero函数结合匿名函数实现简单迭代法。
2. 牛顿迭代法:也称为牛顿-拉夫逊方法,是一种高效的迭代算法。
它通过利用函数的局部线性逼近来寻找解的迭代近似。
牛顿迭代法的公式如下: x(i+1) = x(i) - f(x(i))/f'(x(i))其中,f(x)为原方程,f'(x)为f(x)的导数,x(i)为第i次迭代的解,x(i+1)为第i+1次迭代的解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
若等号成立,则表示a是根或者b是根,[a,b]上已有根存在了, 若等号成立,则表示a是根或者b是根,[a,b]上已有根存在了,对于 上已有根存在了 一般情况,由根的存在定理 由根的存在定理, 一般情况 由根的存在定理, h( x) = 0在 [a , b] 上至少存在一个根 x*, 即x = g(x) 在[a,b]上至少存在一个根 x*, 即 h( x* ) = g( x* ) − x* = 0. [a,b]上至少存在一个根 * * * * * 设 [a,b]上另一根 上另一根, 下证唯一性, y 为 x = g(x)在[a,b]上另一根,则 y = g( y ),x = g(x ), 下证唯一性, y* − x* = g( y* ) − g( x* ) ≤ L y* − x*, ∴ y * = x *。 从而 20 由条件(1)知 { xk } 适定的,另外 适定的, 由条件(1)知
定理3 (压缩不动点定理或压缩映象定理) 若迭代函数g(x)满足 定理3 压缩不动点定理或压缩映象定理) 若迭代函数g(x)满足 g(x) (1) g( x ) ∈ [a , b], ∀x ∈ [a , b] (3.3) ( 2)∃0 < L < 1, 使∀x′, x′′ ∈[a, b] 有g( x′) − g( x′′) ≤ L x′ − x′′ (3.4)
k →∞
k ←∞
即 x * 是 ( 3 . 2 )的解 。g(x)把定义域的每个 映成了 把定义域的每个x 把定义域的每个 映成了g(x),因此 ( 3 .2 ) , 的不动点。 的解也称 g ( x ) 的不动点。 也可理解成: 是映射, 也可理解成:g(x ) 是映射,若 x* 满足 x* = g( x* ), 则 x * 称为 g ( x )的不动点。 的不动点。 适定是收敛必要条件 即不适定则一定不收敛 必要条件, 适定则一定不收敛。 注: 适定是收敛必要条件,即不适定则一定不收敛。
a ≤ x ≤b
x ∈[ a , b ]
邻近讨论, 因此有局部收敛定理4 实际计算中往往只在根 x 邻近讨论, 因此有局部收敛定理4: 若 ( 定理4 局部收敛定理) 定理4 局部收敛定理) g ( x ) 在不动点 x * 的 δ 邻域满足 ∀x ∈ [ x* − δ , x* + δ ], 有 g ( x ) − g ( x * ) ≤ L x − x * ,( 3 . 7 ) 0 < L < 1, * ∀x0 ∈ [ x* − δ , x* + δ ], 由 xk +1 = g( xk ) 产生的序列{ x k } 收敛于 x , 则 x* − xk ≤ Lk x* − x0 , k = 0,1,⋯. ( 3 .8 ) 且有误差估计: 且有误差估计: 证明: 证明:∀k ≥ 1, x* − xk = g( x* ) − g( xk −1 ) ≤ L x* − xk −1 ∴ x* − x1 ≤ L x* − x0 ≤ Lδ < δ,
0
1 Lk ( 30 有误差估计 : x * − xk ≤ xk + 1 − xk ≤ x1 − x0 ; 3.5 ) 1− L 1− L * x − xk + 1 0 * 4 若g′( x )存在, 则 lim * = g′( x* ) k →∞ x − x k (3.4) g( x′) − g( x′′) ≤ L x′ − x′′ * g(x ) g(xk ) 证明: 证明:
几何意义 x=g(x)的根 求x=g(x)的根
⇔ 求
0 < g′(x*) <1 y
p0
p1
p2
y=x
y = g ( x)
y
− 1 < g ′( x ) < 0
*
p0
p2
→
xk → x* ⇔ 迭代法收敛 ←
xx*p1来自y=xy = g(x)
* 0 x 0 x1 x 2 x
g ′( x ) > 1
*
h(a ) = g(a ) − a ≥ 0, h(b) = g(b) − b ≤ 0,
x* − xk +1 = g( x* ) − g( xk ) ≤ L x* − xk , k = 0,1,⋯, * ⇒ x* − xk ≤ Lk x* − x0 → 0, ∴ lim x k = x 。 k→∞
k →∞
1 0 x = g ( x ) 在 [ a , b ]内有唯一解 x *; 则 0 2 对∀xo ∈ [a , b]由xk + 1 = g( xk )得到的{ xk } ⊂ [a , b], 且 lim xk = x *; k →∞ 0 证明:1 作 h( x ) = g ( x ) − x ,由(1), 得 h( x ) ∈ C [a , b ], 且 证明:
问题: 由g ( x k ) = x k + 1 , 求 x k + 1,然而 x k 是否是g(x)定义域上的值? 问题: 是否是g(x)定义域上的值? g(x)定义域上的值 定义4 保持有界, 且全在g(x)定义域内, g(x)定义域内 定义4 若迭代序列 { x k } 保持有界, 且全在g(x)定义域内,则 lim xk = x* . 则简单迭代 简单迭代法(3.2)称为适定 (3.2)称为适定的 若进一步有 k → ∞ 简单迭代法(3.2)称为适定的; 称为收敛 法(3.2)称为收敛的。 称为收敛的 迭代公式 x k + 1 = g ( x k ), k = 0,1,⋯ ( 3 . 2 ) 当迭代(3.2)收敛时, 又是g(x)的连续点, g(x)的连续点 当迭代(3.2)收敛时,极限点 x * 又是g(x)的连续点,则 (3.2)收敛时 * = g( lim xk ) = g( x * ) x = limxk +1 = lim g ( xk ) k →∞
x* − xk ≤ x* − xk +1 + xk +1 − xk ≤ L x* − xk + xk +1 − xk 3 ∀ k ≥ 0, 1 * xk+1 − xk . (3.4) ∴ x − xk ≤ 1− L xk +1 − xk = g( xk ) − g( xk −1 ) ≤ L xk − xk −1 ≤ ⋯ ≤ Lk x1 − x0 , 又 Lk ∴ x* − xk ≤ x1 − x0 . 导数的定义) 1− L (导数的定义) * * x − xk +1 g( x ) − g( xk ) 0 lim * = lim = g′( x* ). 4 k # * k →∞ →∞ x − x x − xk k 注: 从定理的结论3知,L越小收敛越快,L叫做渐进收敛因子。 (1)从定理的结论 越小收敛越快, 叫做渐进收敛因子 渐进收敛因子。 (1)从定理的结论3
§3 解x=g(x)的简单迭代法 x=g(x)的简单迭代法
3.1 简单迭代法公式
问题: f(x)实函数 实函数. f(x)=0的近似值 的近似值。 问题: f(x)实函数.求f(x)=0的近似值。 基本思想方法: 基本思想方法: ( 3 .1 ) x = g( x ) (1)先将f(x)=0化为等价方程 (1)先将f(x)=0化为等价方程 先将f(x)=0 (2) 从某 x 0 出发,作序列 { x k } : 出发, 初始近似 x = g ( x ), k = 0,1,⋯ 迭代公式) (迭代公式) ( 3 . 2 ) k +1 k k+1次近似 次 f(x)=0的根 的根。 若 { x k } 收敛于 x* 且 g ( x ) 连续,则 x * 是f(x)=0的根。 连续, 称 (3.2)式称为简单迭代法或单点迭代法或单步迭代法。 g(x)称 (3.2)式称为简单迭代法或单点迭代法或单步迭代法。 式称为简单迭代法 迭代函数。 为迭代函数。 说明: f(x)=0化成等价方程x=g(x)的化法有很多种 化成等价方程x=g(x)的化法有很多种。 说明: 由f(x)=0化成等价方程x=g(x)的化法有很多种。 讨论的问题: 如何选取迭代函数g(x)? 迭代函数g(x) 讨论的问题: (1) 如何选取迭代函数g(x)? g(x)满足什么条件 迭代序列收敛?收敛速度是多少? 满足什么条件, (2) g(x)满足什么条件,迭代序列收敛?收敛速度是多少? 如何加速迭代序列的收敛速度 迭代序列的收敛速度? (3) 如何加速迭代序列的收敛速度?
分析: 结论(1) (1)中 有唯一根,因此想到根的存在性定理, 分析: 结论(1)中 x = g(x)有唯一根,因此想到根的存在性定理, 连续条件。 (3.4)实际是 (3.4)实际是Lip .z .连续条件。
1 0 x = g ( x ) 在 [ a , b ]内有唯一解 x *; 20 对∀xo ∈ [a , b]由xk + 1 = g( xk )得到的{ xk } ⊂ [a , b], 且 lim xk = x *; k →∞ 1 Lk 0 * ( 3 有误差估计 : x − xk ≤ xk + 1 − xk ≤ x1 − x0 ; 3.5 ) 1− L 1− L x * − xk + 1 收敛程度) (收敛程度) 0 ′( x* )存在, 则 lim * ′( x* ) 4 若g =g 收敛速度) (收敛速度) k →∞ x − x k
注: 1 3 3 3 ′( x) = x2在 −1 1] (2)定理 不是必要条件, 定理3 [ , (2)定理3不是必要条件,如 x − 2x = 0 ⇔ x = x ⇒ g 2 2 是解, 只要 x0 取在0 上不满足定理3的条件( ),实际上 取在0 上不满足定理3的条件(2),实际上 x = 0 是解, 可以满足。 附近, (-1 附近,把(-1,1)缩小使 g′( x ) ≤ L < 1可以满足。 3.4)式的条件较难验证,常采用导数来代替。即有推论1 (3.4)式的条件较难验证,常采用导数来代替。即有推论1 : 3.4) 推论1 定理3 推论1 定理3 中(3.4)可用下式替代 max g ′( x ) ≤ L < 1 ( 3.4)′ 证明: 证明: 只证 (3.4)′ ⇒ (3.4), 因 ∀x′, x′′ ∈ [a , b], g( x′) − g( x′′) ≤ g′(ξ ) x′ − x′′ ≤ max g′( x ) x′ − x′′ ≤ L x′ − x′′ . # 思考: 思考:3.4)′不成立时结论是否成立 ? 不一定 ( 因此该推论是充分条件但不是必要条件。 若 ( 3 . 4 )′ 不成立时,则 因此该推论是充分条件但不是必要条件。 不成立时 则 需要判断(3.4) (3.4)。 需要判断(3.4)。