数值分析_迭代法

合集下载

数值分析--第6章 解线性方程组的迭代法

数值分析--第6章 解线性方程组的迭代法

数值分析--第6章解线性方程组的迭代法第6章 解线性方程组的迭代法直接方法比较适用于中小型方程组。

对高阶方程组,即使系数矩阵是稀疏的,但在运算中很难保持稀疏性,因而有存储量大,程序复杂等不足。

迭代法则能保持矩阵的稀疏性,具有计算简单,编制程序容易的优点,并在许多情况下收敛较快。

故能有效地解一些高阶方程组。

1 迭代法概述迭代法的基本思想是构造一串收敛到解的序列,即建立一种从已有近似解计算新的近似解的规则。

由不同的计算规则得到不同的迭代法。

迭代法的一般格式(1)()(1)()(,,,),0,1,k k k k m kF k +--==x x x x式中(1)k +x 与()(1)(),,,k k k m --x x x 有关,称为多步迭代法。

若(1)k +x 只与()k x 有关,即(1)()(),0,1,k k kF k +==x x称为单步迭代法。

再设kF 是线性的,即(1)(),0,1,k kk kk +=+=x B x f式中n nk ⨯∈B R ,称为单步线性迭代法。

kB 称为迭代矩阵。

若k B 和kf 与k 无关,即(1)(),0,1,k k k +=+=x Bx f称为单步定常线性迭代法。

本章主要讨论具有这种形式的各种迭代方法。

1.1 向量序列和矩阵序列的极限由于nR 中的向量可与nR 的点建立——对应关系,由点列的收敛概念及向量范数的等价性,可得到向量序列的收敛概念。

定义6.1 设(){}k x 为n R 中的向量序列,nx R ∈,如果()lim 0k k x x →∞-=其中为向量范数,则称序列(){}k x 收敛于x ,记为()lim k k x x →∞=。

定理6.1 nR 中的向量序列(){}k x 收敛于nR 中的向量x 当且仅当()lim (1,2,,)k i i k x x i n →∞==其中()()()()1212(,,,),(,,,)k k k k T Tnnx x x x x x x x ==。

数值分析第四章 解非线性方程的迭代法

数值分析第四章  解非线性方程的迭代法


(xk+1-α)2≈(xk-α)(xk+2-α) xk+12-2xk+1α+α2≈xkxk+2-(xk+xk+2)α+α2
解得
x k x k + 2 x k2+1 α≈ x k + 2 2 x k +1 + x k
( x k +1 x k ) 2 = xk x k + 2 2 x k +1 + x k
可见,|xk-xk-1|充分小可保证|xk-α|充分小, 而且对任 一ε>0,要使|xk-α|<ε, 只要 k > ln ε (1 L) ÷ ln L x1 x 0
证 记(x)=(x)-x,则(a)=(a)-a≥0, (b)=(b)b≤0, 由(x)的连续性,必存在α∈[a,b]使(α)=(α)-α=0, 即α=(α), 又′(x)=′(x)-1<0, 所以x=(x)的根唯一. |xk+1-xk|=|(xk)-(xk-1)| =|′(ξ)(xk-xk-1)|≤L|xk-xk-1| |xk+1-α|=|(xk)-(α)|=|′(ξ)(xk-α)|≤L|xk-α| |xk-α|=|(xk-xk+1)+(xk+1-α)| ≤|xk-xk+1|+|xk+1-α|≤L|xk-xk-1|+L|xk-α| 于是有:
k 0 1 2 3 4 5 xk 0.5 0.60653 0.54524 0.57970 0.56006 0.57117 |xk-xk-1| 0.10653 0.06129 0.03446 0.01964 0.01111 k 6 7 8 9 10 xk 0.56486 0.56844 0.56641 0.56756 0.56691 |xk-xk-1| 0.00631 0.00358 0.00203 0.00115 0.00065

数值分析非线性方程的数值解法

数值分析非线性方程的数值解法

数值分析非线性方程的数值解法数值分析是一种应用数学方法来分析和解决数学问题的领域。

非线性方程是数值分析中一类重要的问题,其解法包括了迭代法、牛顿法、割线法等。

本文将详细介绍这些数值解法及其原理和应用。

一、迭代法迭代法是解非线性方程的一种常用数值方法。

该方法的基本思想是通过不断迭代逼近方程的根,直到达到所需精度或满足停止准则为止。

迭代法的求根过程如下:1.选择适当的初始值x0。

2. 利用迭代公式xn+1 = g(xn),计算下一个近似根。

3.重复步骤2,直到满足停止准则为止。

常用的迭代法有简单迭代法、弦截法和牛顿法。

简单迭代法的迭代公式为xn+1 = f(xn),其中f(x)为原方程的一个改写形式。

该方法的收敛性要求函数f(x)在解附近有收敛性且导数在一个区间内收敛。

弦截法的迭代公式为xn+1 = xn - f(xn) * (xn-xn-1) / (f(xn)-f(xn-1))。

该方法通过连接两个点上的函数值的割线来逼近方程的根。

牛顿法的迭代公式为xn+1 = xn - f(xn) / f'(xn),其中f'(x)为f(x)的导数。

该方法通过用切线来逼近方程的根。

二、牛顿法牛顿法是解非线性方程的一种常用迭代法。

该方法通过使用方程的导数来逼近方程的根。

迭代过程如下:1.选择适当的初始值x0。

2. 利用迭代公式xn+1 = xn - f(xn) / f'(xn),计算下一个近似根。

3.重复步骤2,直到满足停止准则为止。

牛顿法的收敛速度较快,但要求方程的导数存在且不为0。

三、割线法割线法是解非线性方程的另一种常用迭代法。

该方法通过连接两个点上的函数值的割线来逼近方程的根。

迭代过程如下:1.选择适当的初始值x0和x12. 计算下一个近似根xn+1 = xn - f(xn) * (xn-xn-1) / (f(xn)-f(xn-1))。

3.重复步骤2,直到满足停止准则为止。

割线法的收敛速度介于简单迭代法和牛顿法之间。

第六章 迭代法-数值分析

第六章 迭代法-数值分析
1 j n
由极限存在准则得 即
k
lim xi( k ) xi =0
k
(i 1, 2, , n)
, n)
lim xi( k ) xi
(i 1, 2,
定义:设{ A( k ) }为n阶方阵序列,A为n阶方阵,如果 lim A( k ) A 0
k
其中 为矩阵范数,则称序列{ A( k ) }收敛于矩阵A,记为 lim A( k ) A


g
n
其中bij
aij aii
, (i j , i, j 1, 2,
, n), g i
bi (i 1, 2, aii
, n).
迭代公式x ( k 1) Bx ( k ) g (k 0,1, 2, )用方程组表示为
(k ) (k ) (k ) ( k 1) b13 x 3 b1n x n g x b 1 12 x 2 1 (k ) (k ) (k ) ( k 1) b 23 x 3 b 2 n x n g x2 b 21 x 1 2 ( k 1) (k ) (k ) (k ) b n1 x1 b n 2 x 2 b n,n 1 x n 1 g x n n 因此,在Jacobi迭代法的计算过程中,需同时保留两个
k k
即x是方程组Ax b的解。
引入误差向量
k
(k ) (k ) lim x x lim 0 所以 等价于 k

( k 1)
x
( k 1)
x

x ( k 1) Mx ( k ) g
x Mx g
则可得

( k 1)

数值分析第三章线性方程组迭代法

数值分析第三章线性方程组迭代法

数值分析第三章线性方程组迭代法线性方程组是数值分析中的重要问题之一,涉及求解线性方程组的迭代法也是该领域的研究重点之一、本文将对线性方程组迭代法进行深入探讨。

线性方程组的一般形式为AX=b,其中A是一个n×n的系数矩阵,x和b是n维向量。

许多实际问题,如电路分析、结构力学、物理模拟等,都可以归结为求解线性方程组的问题。

然而,当n很大时,直接求解线性方程组的方法计算量很大,效率低下。

因此,我们需要寻找一种更高效的方法来求解线性方程组。

线性方程组迭代法是一种基于迭代思想的求解线性方程组的方法。

其基本思想是通过构造一个序列{xn},使得序列中的每一项都逼近解向量x。

通过不断迭代,可以最终得到解向量x的一个近似解。

常用的线性方程组迭代法有雅可比迭代法、高斯-赛德尔迭代法和逐次超松弛迭代法等。

雅可比迭代法是其中的一种较为简单的迭代法。

其基本思想是通过分解系数矩阵A,将线性方程组AX=b转化为x=Tx+c的形式,其中T是一个与A有关的矩阵,c是一个常向量。

然后,通过不断迭代,生成序列xn,并使序列中的每一项都逼近解向量x。

高斯-赛德尔迭代法是雅可比迭代法的改进方法。

其核心思想是利用当前迭代步骤中已经求得的近似解向量的信息。

具体而言,每次迭代时,将前一次迭代得到的近似解向量中已经计算过的分量纳入计算,以加速收敛速度。

相比于雅可比迭代法,高斯-赛德尔迭代法的收敛速度更快。

逐次超松弛迭代法是高斯-赛德尔迭代法的改进方法。

其核心思想在于通过引入一个松弛因子ω,将高斯-赛德尔迭代法中的每次迭代变为x[k+1]=x[k]+ω(d[k+1]-x[k])的形式,其中d[k+1]是每次迭代计算得到的近似解向量的一个更新。

逐次超松弛迭代法可以根据问题的特点调整松弛因子的值,以获得更好的收敛性。

除了以上提到的三种迭代法,还有一些其他的线性方程组迭代法,如SOR迭代法、共轭梯度法等。

这些方法都具有不同的特点和适用范围,可以根据问题的具体情况选择合适的迭代法。

数值分析第六章线性方程组迭代解法

数值分析第六章线性方程组迭代解法

1)
b2 a21x1(k) a23x3(k)
xn( k
1)
bn an1x1(k) an2 x2(k)
a1n
x(k) n
a11
a2n xn(k) a22
an,n1
x(k) n1
ann
x(k1) D1(L U ) x(k) D1b
D1(D A) x(k) D1b
(I D1A) x(k) D1b x(k) D1(b Ax(k) )
x(7) = ( 2.0000, 3.0000, -1.0000 )T 如何确定 SOR 迭代中的最优松弛因子是一件很困难的事
26
收敛性
收敛性定理 Jacobi 迭代收敛的充要条件 (J)<1 G-S 迭代收敛的充要条件 (G)<1 SOR 迭代收敛的充要条件 (L)<1
Jacobi 迭代收敛的充分条件 ||J|| <1 G-S 迭代收敛的充分条件 ||G|| < 1 SOR 迭代收敛的充分条件 ||L|| < 1
x1( k x2( k
1) 1)
1
x(k) 2
2
8
x ( k 1) 1
x(k) 3
3
x3(k1)
5
x ( k 1) 2
2
迭代可得: x(1) = ( 0.5000, 2.8333, -1.0833 )T
x(9) = ( 2.0000, 3.0000, -1.0000 )T
25
举例
SOR 迭代:
x(k1) i
bi
i 1
a x(k1) ij j
n
aij
x(jk
)
aii
j 1
j i 1

数值分析2 迭代法

数值分析2 迭代法

§2简单迭代法——不动点迭代(iterate)迭代法是数值计算中的一类典型方法,被用于数值计算的各方面中。

一、简单迭代法设方程f(x)=0 (3)在[a,b]区间内有一个根*x ,把(3)式写成一个等价的隐式方程x=g(x) (4)方程的根*x 代入(4)中,则有)(**=x g x (5)称*x 为g的不动点(在映射g下,象保持不变的点),方程求根的问题就转化为求(5)式的不动点的问题。

由于方程(4)是隐式的,无法直接得出它的根。

可采用一种逐步显式化的过程来逐次逼近,即从某个[a,b]内的猜测值0x 出发,将其代入(4)式右端,可求得)(01x g x =再以1x 为猜测值,进一步得到)(12x g x =重复上述过程,用递推关系——简单迭代公式求得序列}{k x 。

如果当k →∞时*→x x k ,}{k x 就是逼近不动点的近似解序列,称为迭代序列。

称(6)式为迭代格式,g(x)为迭代函数,而用迭代格式(6)求得方程不动点的方法,称为简单迭代法,当*∞→=x x k k lim 时,称为迭代收敛。

构造迭代函数g(x)的方法:(1)=x a x x -+2,或更一般地,对某个)(,02a x c x x c -+=≠;(2)x a x /=; (3))(21xa x x +=。

取a=3,0x =2及根*x =1.732051,给出三种情形的数值计算结果见表表 032=-x 的迭代例子问题:如何构造g(x),才能使迭代序列}{k x 一定收敛于不动点?误差怎样估计?通常通过对迭代序列}{k x 的收敛性进行分析,找出g(x)应满足的条件,从而建立一个一般理论,可解决上述问题。

二、迭代法的收敛性设迭代格式为),2,1,0()(1 ==+k x g x k k而且序列}{k x 收敛于不动点*x ,即∞→→-*k x x k (0时)因而有)3,2,1(1 =-≤-*-*k xx x x k k (7)由于),(),)((11*-*-*∈-'=-x x x x g x x k k k ξξ当g(x)满足中值定理条件时有),(),)((11*-*-*∈-'=-x x x x g x x k k k ξξ (8)注意到(8)式中只要1)(<<'L g ξ时,(7)式成立.经过上述分析知道,迭代序列的收敛性与g(x)的构造相关,只要再保证迭代值全落在[a,b]内,便得:假定迭代函数g(x)满足条件(1) 映内性:对任意x ∈[a,b]时,有a ≤g(x) ≤b ;(2) 压缩性:g(x)在[a,b]上可导,且存在正数L<1,使对任意 x ∈[a,b],有L x g <')( (9)则迭代格式)(1k k x g x =+对于任意初值0x ∈[a,b]均收敛于方程x=g(x)的根,并有误差估计式011x x LL x x kk --≤-*(10)证明 :收敛性是显然的。

数值分析 迭代法 二分法和迭代法原理

数值分析 迭代法 二分法和迭代法原理
| xk x*| L | xk1 x*| L2 | xk2 x*| Lk | x0 x*|
lim | xk x* | 0
k
即 lim xk x *.
k
(b) | xk1 x*| L | xk x*|
| xk 1 xk | | ( xk 1 x*) ( xk x*) | xk x * xk 1 x * (1 L) xk x * 1 xk x * xk 1 xk 1 L 又 | xk1 xk | ( xk ) ( xk1 ) | '( ) | | xk xk1 | L | xk xk1 |
等价变换
x = (x) 称为迭代函数
(x) 的不动点x*
不动点迭代
具体做法:
从一个给定的初值 x0 出发,计算 x1 = (x0), x2 = (x1), … x 若 k k 0 收敛,即存在 x* 使得 lim x k x *,则由 的连续
k
xk 1 lim xk 可得 x* = (x*),即 x* 是 的不 性和 lim k k
根的估计
引理3.1(连续函数的介值定理) 设f(x)在 [a,b]上连续,且f(a) f(b)<0,则存在x*(a,b) 使f(x*)=0。 例3.1 证明x33x1 = 0 有且仅有3个实根,并 确定根的大致位置使误差不超过 =0.5。 解:
单调性分析和解的位置 选步长h=2, 扫描节点函数值 异号区间内有根
ek 1 xk 1 x* ( xk ) ( x*) '( )ek e 取极限得 lim k 1 '( x*) 0 线性收敛. k e k
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华北科技学院上机报告系(部)专业、班级学号课程名称数值分析上机题目实验六,实验七任课教师指导教师成绩(优、良、中、及格、不及格)华北科技学院基础部实验六 解线性方程组的迭代法1.目的与要求:1) 熟悉求解线性方程组的有关理论哈方法。

2) 会编制雅可比迭代和高斯—塞得尔迭代法。

3) 通过实际计算,进一步了解各算法的优缺点,选择合适的数值方法。

2.雅可比迭代法算法设方程组AX=b 的系数矩阵的对角元素0(1,2,,),iii n a≠=M 为迭代次数容许的最大值,ε为容许误差.① 取初始向量(0)(0)(0),(,,,)12Tx x x x n =令k=0;② 对1,2,,i n =计算(1)()11();nk k ii ij j j iij ixb a x a +=≠=-∑③ 如果(1)()1,nk k iii xx ε+=-<∑则输出(1)k x+,结束;否则执行④,④ 如果,k M ≥则不收敛,终止程序;否则1,k k ←+转②.1.分别用雅可比迭代法与高斯-塞德尔迭代法解下列方程组:2),311300010000151335901100002709311000000230010793000090,00030577050200000747300012000003041007000050027270022910RI V R V =---⎡⎤⎡⎤⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥---⎢⎥⎢⎢⎥⎢==----⎢⎥⎢-⎢⎥⎢⎢⎥⎢--⎢⎥⎢--⎢⎥⎢⎢⎥⎢--⎣⎦⎣⎦其中⎥⎥⎥⎥⎥⎥⎥⎥1.用雅可比迭代法计算: #include "stdafx.h" #include "iostream.h"#include"stdio.h"#include"math.h"#include"conio.h"#include"malloc.h"#include <stdlib.h>#define EPS 1e-8#define MAX 100float *Jacobi(float a[9][10],int n) {float *x,*y,s;double epsilon;int i,j,k=1;x=(float *)malloc(n*sizeof(float));y=(float *)malloc(n*sizeof(float)); for(i=0;i<n;i++)x[i]=0;while(1){ k++;epsilon=0;for(i=0;i<n;i++){s=0;for(j=0;j<n;j++){if(j==i) continue;s=s+a[i][j]*x[j];}y[i]=(a[i][n]-s)/a[i][i];epsilon=epsilon+fabs(y[i]-x[i]);}//if (epsilon>EPS);if(k>=MAX){return y;}for(i=0;i<n;i++)x[i]=y[i];}}void main(){int i;float a[9][10]={{31,-13,0,0,0,-10,0,0,0,-15}, {-13,35,-9,0,-11,0,0,0,0,27},{0,-9,31,-10,0,0,0,0,0,-23},{0,0,-10,79,-30,0,0,0,-9,0},{0,0,0,-30,57,-7,0,-5,0,-20},{0,0,0,0,7,47,-30,0,0,12},{0,0,0,0,0,-30,41,0,0,-7},{0,0,0,0,-5,0,0,27,-2,7},{0,0,0,0,0,0,0,-2,29,-10}};float *x;x=(float *)malloc(9*sizeof(float));printf("结果为:\n");x=Jacobi(a,9);for(i=0;i<9;i++)printf("x[%d]=%f\n",i,x[i]);}程序运行结果如下:结果为:x[0]=-0.200550x[1]=0.368393x[2]=-0.731859x[3]=-0.300318x[4]=-0.446577x[5]=0.399384x[6]=0.121501x[7]=0.151792x[8]=-0.334359Press any key to continue2.用高斯-塞德尔迭代法:#include "stdafx.h"#include"stdio.h"#include"math.h"#include"conio.h"#include "iostream"#include"malloc.h"#define N 100void main(){int i;float *x;float c[90]={31,-13,0,0,0,-10,0,0,0,-15,-13,35,-9,0,-11,0,0,0,0,27,0,-9,31,-10,0,0,0,0,0,-23,0,0,-10,79,-30,0,0,0,-9,0,0,0,0,-30,57,-7,0,-5,0,-20,0,0,0,0,7,47,-30,0,0,12,0,0,0,0,0,-30,41,0,0,-7,0,0,0,0,-5,0,0,27,-2,7,0,0,0,0,0,0,0,-2,29,-10};float *GauseSeide(float *,int);x=GauseSeide(c,9);for(i=0;i<9;i++)printf("x[%d]=%f\n",i,x[i]);}float *GauseSeide(float *a,int n){int i,j,nu=0;float *x,dx,d,wucha;x=(float *)malloc(n*sizeof(float));for(i=0;i<=n-1;i++)x[i]=0.0;while(fabs(wucha)>1e-8){for(i=0;i<=n-1;i++){d=0.0;for(j=0;j<=n-1;j++)d+=*(a+i*(n+1)+j)*x[j];d=d-*(a+i*(n+1)+i)*x[i];dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));wc=x[i]-dx;x[i]=dx;}if(nu>=N) { printf("迭代发散\n"); exit(1); } nu++; } return x;}程序运行结果如下: x[0]=-0.200551 x[1]=0.368393 x[2]=-0.731860 x[3]=-0.300318 x[4]=-0.446577 x[5]=0.399384 x[6]=0.121500 x[7]=0.151792 x[8]=-0.334359Press any key to continue实验七 方程求根1.目的与要求:1) 通过对二分法与牛顿迭代法作编程练习与上机运算,进一步体会二分法与牛顿迭代法的不同特点;2) 编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。

2.二分法算法给定区间[a,b],并设f(a)与f(b)符号相反,取为ε根的容许误差,δ为|f(x)|的容许误差。

① 令c=(a+b)/2② 如果(c-a)<ε或|f(c)|<δ,则输出c ,结束;否则执行③, ③ 如果f(a)f(c)>0,则令a:=c ;否则b:=c ,重复①,②,③。

3.牛顿迭代法算法给定初始值ε,0x 为根的容许误差,η为|f(x)|的容许误差,N 为迭代次数的容许值。

①如果0)(0='x f 或迭代次数大于N ,则算法失败,结束;否则执行②,②计算)()(0001x f x f x x '-=, ③若ε<-01x x 或η<)(1x f ,则输出1x ,程序结束;否则执行④, ④ 10x x =,转向(1).实验容:1.用牛顿法求方程01=-x xe 在10=x 附近的解.#include "stdafx.h" #include <iostream> #include <stdio.h> #include <math.h> #define N 100 #define EPS 1e-6 #define ETA 1e-8void main() {float f(float); float f1(float); float x0,y0;float Newton(float (*)(float),float (*)(float),float); printf("Please input x0\n"); scanf("%f",&x0);printf("x(0)=%f\n",x0); y0=Newton(f,f1,x0);printf("\nThe root of the equation is x=%f\n",y0); }float Newton(float (*f)(float),float (*f1)(float),float x0) {float x1,d; int k=0; do {x1=x0-f(x0)/f1(x0);if((k++>N)||(fabs(f1(x1))<EPS)) {printf("\nNewton method failed");exit(0);}d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);x0=x1;printf("x(%d)=%f\t",k,x0);}while(fabs(d)>EPS&&fabs(f(x1))>ETA);return x1;}float f(float x){return x*exp(x)-1;}float f1(float x){return exp(x)+x*exp(x);}程序运行结果如下:Please input x01x(0)=1.000000x(1)=0.683940 x(2)=0.577454 x(3)=0.567230 x(4)=0.567143 x(5)=0.567143The root of the equation is x=0.567143Press any key to continue2.编写一个割线法的程序,求解上题。

相关文档
最新文档