非线性方程的简单迭代法和Steffensen迭代法

非线性方程的简单迭代法和Steffensen迭代法
非线性方程的简单迭代法和Steffensen迭代法

《数值计算方法》实验报告

实验名称:实验1 非线性方程的简单迭代法和Steffensen 迭代法 实验题目:分别用简单迭代法和Steffensen 迭代法求方程 010423=-+x x

在 [1, 2] 内的一个实根.

实验目的:理解并掌握简单迭代法和Steffensen 迭代法 基础理论:简单迭代法和Steffensen 迭代法

1).简单迭代法的原理:将一元非线性方程:0)(=x f 改写成等价方程:)(x x ρ= ,对此,从某个初始值x0开始,对应式)(x x ρ= 构成迭代公式 ,...1,0),(1==+k x x k k ρ ,这样就可以确定序列 {}k x (k=0,1,2…)。如果 {}k x 有极限

*lim x x k k =∞→ ,由式 ,...1,0),(1==+k x x k k ρ 两边取极限可得 )(**x x ρ= ,可知 *

x 为方程0)(=x f 的近似解。

2)Steffensen 迭代法的原理:

通过把改进的Aitken 方法应用于根据不动点迭代所得到的线性收敛序列,将收敛速度加速到二阶。

()????

?????+---===+k k k k k k k k k k k x y z x y x x y z x y 2)

()(21ρρ

[]x x x x x x x +---=)(2)(()()(2ρρρρψ

实验环境:操作系统:Windows 7;

实验平台:Turbo C++

实验过程:写出算法→编写程序→调试运行程序→计算结果

1)简单迭代法的算法:

Input:初始近似值x0,精度要求del,最大迭代次数N Output:近似解x 或失败信息

1. n ←1

2. While n

≤N do;

3. x ←f(x0);

4. if | x-x0|

5. | return x;

6. end

7. n ←n+1;

8. X0←x;

9. End

10. return False; ≤()0202

x y z x y +--Steffensen 迭代法计算

的结果:

近似解为:

给出程序:

1,简单迭代法的程序(C++)

#include ""

#include ""

#define phi(x) *sqrt(10-x*x*x)

void main()

{int n=1,N;

float x,x0,del;

printf("x0="); scanf("%f",&x0);

printf("\ndel=:"); scanf("%f",&del); printf("\nN="); scanf("%d",&N); printf("\nk x(k)");

printf("\n %2d %f ",0,x0);

while (n

{ x=phi(x0);

if(fabs(x-x0)

{ printf("\n \n=近似解= %f \n",x);

return;

}

printf("\n %2d %f ",n,x0);

n=n+1; x0=x;

}

printf("\n \n%d次迭代后未达到精度要求.\n",N); }

2,Steffensen迭代法的程序(C++)

#include ""

#include ""

#define phi(x) *sqrt(10-x*x*x);

void main()

{int n=1,N;

float x,x0,del,y,z,a,b;

printf("x0="); scanf("%f",&x0); printf("\ndel=:"); scanf("%f",&del); printf("\na="); scanf("%f",&a); printf("\nb="); scanf("%f",&b); printf("\nN="); scanf("%d",&N); printf("\nk x(k)");

printf("\n %2d %f ",0,x0);

while (n

{ y=phi(x0);

z=phi(y);

x=x0-(y-x0)*(y-x0)/(z-2*y+x0);

if(fabs(x-x0)

{ printf("\n \n=近似解= %f \n",x);

return;

}

printf("\n %2d %f ",n,x0);

n=n+1; x0=x;

}

printf("\n \n%d次迭代后未达到精度要求.\n",N); }

结果分析:

1.用简单迭代法和Steffensen迭代法都能求出非线性方程的近似解,且用简单迭代法和Steffensen迭代法求出的近似解基本一样。

2.用Steffensen迭代法来求解时迭代的次数少很多,可见Steffensen迭代法加速了收敛速度。

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

第二章 迭代法的一般原理

第二章 迭代法的一般原理 非线性方程组无论从理论上还是计算方法上,都比线性方程组复杂得多。一般的非线性方程组很难求出解析解,往往只能求出其数值解,且往往只能借助于迭代法。本章我们将讨论迭代法的一般原理、迭代法的一般构造及迭代收敛速度的衡量标准。 2-1 迭代法与不动点定理 设n n R R D →?:f ,考虑方程 ()0=x f (2-1) 若存在D *∈x ,使()0=*x f ,则称*x 为方程(2-1) 的解。 用迭代法求解(2-1) ,先将(2-1)化为等价的方程 ()x g x = (2-2) 这里映象n n R R D →?:g 。 方程(2-2)的解*x (即()**x g x =)称为映象g 的不动点。因此用迭代法解方程(2-1),就是求(2-2)中映象g 的不动点。这样以及g 是否存在不动点自然就是我们关心的问题。 定理2-1 若n n R R D →?:g 为有界闭集D D ?0上的严格非膨胀映象,()00D D ?g ,则g 在0D 内有唯一不动点。 证 唯一性 设g 在0D 内至少有两个不动点1x ,2x ,则 ()() 2121x x x g x g x x 21-≤-=-α 因1<α,所以由上式推得21x x =。唯一性得证。 记()()x g x x -=?,由g 及泛数的连续性可知1:R R D n →??连续。因0D 为有界闭集,故?在0D 上有最小值。设0D *∈x 为最小点,即

()()x g x x -=∈min 0 D x *? 则*x 为g 的不动点。因为若不然,则有()**x g x ≠,再由g 严格非膨胀,可得 ()()()()()***x g g x g x g -=?()()***x x g x ?=-< 这与*x 为?的最小点相矛盾,故*x 为g 的不动点。 注 定理中0D 的有界闭性、g 的压缩性和g 映0D 入自身,此3个条件缺一不可。例如,()x x x g 1+=在[)+∞=,D 10上严格非膨胀,但它在0D 中却没有不动点。 下面我们介绍在应用上非常广泛的不动点定理。 定理2-2 (Brouwer 不动点定理) 设n n R R D →?:g 在有解闭凸集D D ?0上连续,且()00D D G ?,则g 在0D 至少有一个不动点。 本定理在一维情形下叙述为:[]b a f ,: []b a ,→则f 在[]b a ,中至少有一个不动点。几何解释见图2-1。 x b a 图2-1 一维Brouwer 定理

C++实现 牛顿迭代 解非线性方程组

C++实现牛顿迭代解非线性方程组(二元二次为例) 求解{0=x*x-2*x-y+0.5; 0=x*x+4*y*y-4; }的方程 #include #include #define N 2 // 非线性方程组中方程个数、未知量个数#define Epsilon 0.0001 // 差向量1范数的上限 #define Max 100 // 最大迭代次数 using namespace std; const int N2=2*N; int main() { void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N] void ffjacobian(float xx[N],float yy[N][N]); //计算雅克比矩阵yy[N][N] void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵inv void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向量x0 计算近似解向量x1 float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm; int i,j,iter=0; //如果取消对x0的初始化,撤销下面两行的注释符,就可以由键盘x读入初始近似解向量for( i=0;i>x0[i]; cout<<"初始近似解向量:"<

常微分方程的解线性方程组的迭代法

实验五 解线性方程组的迭代法 【实验内容】 对1、设线性方程组 ?? ? ? ?? ? ? ?? ? ? ?? ? ? ??-=???????????????? ?????????????????? ? ?--------------------------211938134632312513682438100412029137264 2212341791110161035243120 536217758683233761624491131512 013012312240010563568 0000121324 10987654321x x x x x x x x x x ()T x 2,1,1,3,0,2,1,0,1,1*--= 2、设对称正定系数阵线性方程组 ?? ? ????? ??? ? ? ??---=????????????? ??????????????? ??---------------------4515229 23206019243360021411035204111443343104221812334161 2065381141402312122 00240424 87654321x x x x x x x x ()T x 2,0,1,1,2,0,1,1*--= 3、三对角形线性方程组

?? ? ?? ? ????? ??? ? ? ??----=???????????????? ?????????????????? ??------------------5541412621357410000000014100000000141000000001410000000014100000000141000000001410000000014100000000 14100000000 1410987654321x x x x x x x x x x ()T x 1,1,0,3,2,1,0,3,1,2*---= 试分别选用Jacobi 迭代法,Gauss-Seidol 迭代法和SOR 方法计算其解。 【实验方法或步骤】 1、体会迭代法求解线性方程组,并能与消去法加以比较; 2、分别对不同精度要求,如54310,10,10---=ε由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR 方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。 程序: 用雅可比方法求的程序: function [x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200;

线性方程组的迭代法及程序实现

线性方程组的迭代法及程序实现 学校代码:11517 学号:200810111217 HENAN INSTITUTE OF ENGINEERING 毕业论文 题目线性方程组的迭代法及程序实现 学生姓名 专业班级 学号 系 (部)数理科学系 指导教师职称 完成时间 2012年5月20日河南工程学院 毕业设计(论文)任务书 题目:线性方程组的迭代法及程序实现专业:信息与计算科学学号 : 姓名一、主要内容: 通过本课题的研究,学会如何运用有限元方法来解决线性代数方程组问题,特别是Gaussie-Seidel迭代法和Jacobi迭代法来求解线性方程组。进一步学会迭代方法的数学思想,并对程序代码进行解析与改进,这对于我们以后学习和研究实际问题具有重要的意义。本课题运用所学的数学专业知识来研究,有助于我们进一步掌握大学数学方面的知识,特别是迭代方法。通过这个课题的研究,我进一步掌握了迭代方法的思想,以及程序的解析与改进,对于今后类似实际问题的解决具有重要的意义。

二、基本要求: 学会编写规范论文,独立自主完成。 运用所学知识发现问题并分析、解决。 3.通过对相关资料的收集、整理,最终形成一篇具有自己观点的学术论文,以期能对线性方程组迭代法的研究发展有一定的实践指导意义。 4.在毕业论文工作中强化英语、计算机应用能力。 完成期限: 2012年月指导教师签名:专业负责人签名: 年月日 目录 中文摘要....................................................................................Ⅰ英文摘要 (Ⅱ) 1 综述 1 2 经典迭代法概述 3 2.1 Jacobi迭代法 3 2.2 Gauss?Seidel迭代法 4 2.3 SOR(successive over relaxation)迭代法 4 2.4 SSOR迭代法 5 2.5 收敛性分析5 2. 6 数值试验 6 3 matlab实现的两个例题8 3.1 例1 迭代法的收敛速度8 3.2 例 2 SOR迭代法松弛因子的选取 12致谢16参考文献17附录19

数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组

作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。 可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1) = (2) = Jacobi迭代法: 流程图 开 始 判断b中的最大值 有没有比误差大 给x赋初值 进行迭代 求出x,弱到100次还没到,警告不收 结束

程序 clear;clc; A=[8,-1,1;2,10,01;1,1,-5]; b=[1;4;3]; e=1e-6; x0=[0;0;0]'; n=length(A); x=zeros(n,1); k=0; r=max(abs(b)); while r>e for i=1:n d=A(i,i); if abs(d)100 warning('不收敛'); end end x=x0;

程序结果(1)

(2)

Gauss-Seidel迭代法: 程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3]; A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵A不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵U=zeros(n); D=zeros(n); G=zeros(n);%G=-inv(D+L)*U d=zeros(n,1);%d=inv(D+L)*b x=zeros(n,1); for i=1:n%初始化L和U for j=1:n if ij U(i,j)=A(i,j); end end end for i=1:n%初始化D D(i,i)=A(i,i); end G=-inv(D+L)*U;%初始化G d=(D+L)\b;%初始化d %迭代开始 x1=x; x2=G*x+d; while norm(x2-x1,inf)>10^(-6)

牛顿迭代法求解非线性方程组的代码

牛顿迭代法求解非线性方程组 非线性方程组如下: 221122121210801080 x x x x x x x ?-++=??+-+=?? 给定初值()00.0T x =,要求求解精度达到0.00001 1.首先建立函数()F X ,方程编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1),f(2)] ; 2.建立函数()DF X ,用于求方程的jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; %jacobi 矩阵是一阶偏导数以一定方式排列成的矩阵。 3.编程牛顿迭代法解非线性方程组,将newton.m 保存在工作路径中: clear,clc; x=[0,0]'; f=F(x);

df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break; else end end ezplot('x^2-10*x+y^2+8',[-6,6,-6,6]); hold on ezplot('x*y^2+x-10*y+8',[-6,6,-6,6]); 运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117 3 0.9999752 0.9999685

求解线性方程组——超松弛迭代法(c)

求解线性方程组——超松弛迭代法 #include #include using namespace std; float *one_array_malloc(int n); //一维数组分配float **two_array_malloc(int m,int n); //二维数组分配float matrix_category(float* x,int n); int main() { const int MAX=100;//最大迭代次数 int n,i,j,k; float** a; float* x_0; //初始向量 float* x_k; //迭代向量 float precision; //精度 float w; //松弛因子 cout<<"输入精度e:"; cin>>precision; cout<>n; a=two_array_malloc(n,n+1); cout<>a[i][j]; } } x_0=one_array_malloc(n); cout<>x_0[i]; } x_k=one_array_malloc(n);

cout<<"输入松弛因子w (1>w; float temp; //迭代过程 for(k=0;k

Gauss-Seidel迭代法求解线性方程组

Gauss-Seidel迭代法求解线性方程组

一. 问题描述 用Gauss-Seidel 迭代法求解线性方程组 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量 ) 1(+k i x 时,用最新分量 ) 1(1 +k x , ???+) 1(2 k x ) 1(1 -+k i x 代替旧分量 ) (1 k x , ???) (2 k x ) (1 -k i x ,可以起 到节省存储空间的作用。这样就得到所谓解方程组的Gauss-Seidel 迭代法。 二. 算法设计 将A 分解成U D L A --=,则b x =A 等价于b x =--U)D (L 则Gauss-Seidel 迭代过程 ) ()1()1(k k k Ux Lx b Dx ++=++ 故 ) ()1()(k k Ux b x L D +=-+ 若设1 )(--L D 存在,则 b L D Ux L D x k k 1)(1)1()()(--+-+-= 令 b L D f U L D G 11)()(---=-=,

则Gauss-Seidel 迭代公式的矩阵形式为 f Gx x k k +=+) () 1( 其迭代格式为 T n x x x x ) ()0()0(2)0(1)0(,,,???= (初始向量), ) (1 1 1 1 1 )()1()1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者 ?? ???--=???=???==?+=∑∑-=-+=+++) (1)210i 210(111 1)()1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 三. 程序框图

Newton迭代法求解非线性方程

Newton迭代法求解非 线性方程

一、 Newton 迭代法概述 构造迭代函数的一条重要途径是用近似方程来代替原方程去求根。因此,如果能将非线性方程f (x )=0用线性方程去代替,那么,求近似根问题就很容易解决,而且十分方便。牛顿(Newton)法就是一种将非线性方程线化的一种方法。 设k x 是方程f (x )=0的一个近似根,把如果)(x f 在k x 处作一阶Taylor 展开,即: )x x )(x ('f )x (f )x (f k k k -+≈ (1-1) 于是我们得到如下近似方程: 0)x x )(x ('f )x (f k k k =-+ (1-2) 设0)('≠k x f ,则方程的解为: x ?=x k +f (x k ) f (x k )? (1-3) 取x ~作为原方程的新近似根1+k x ,即令: ) x ('f ) x (f x x k k k 1k -=+, k=0,1,2,… (1-4) 上式称为牛顿迭代格式。用牛顿迭代格式求方程的根的方法就称为牛顿迭代法,简称牛顿法。 牛顿法具有明显的几何意义。方程: )x x )(x ('f )x (f y k k k -+= (1-5) 是曲线)x (f y =上点))x (f ,x (k k 处的切线方程。迭代格式(1-4)就是用切线式(1-5)的零点来代替曲线的零点。正因为如此,牛顿法也称为切线法。 牛顿迭代法对单根至少是二阶局部收敛的,而对于重根是一阶局部收敛的。一般来说,牛顿法对初值0x 的要求较高,初值足够靠近*x 时才能保证收敛。若

要保证初值在较大范围内收敛,则需对)x (f 加一些条件。如果所加的条件不满足,而导致牛顿法不收敛时,则需对牛顿法作一些改时,即可以采用下面的迭代格式: ) x ('f ) x (f x x k k k 1k λ -=+, ?=,2,1,0k (1-6) 上式中,10<λ<,称为下山因子。因此,用这种方法求方程的根,也称为牛顿下山法。 牛顿法对单根收敛速度快,但每迭代一次,除需计算)x (f k 之外,还要计算 )x ('f k 的值。如果)x (f 比较复杂,计算)x ('f k 的工作量就可能比较大。为了避免计算导数值,我们可用差商来代替导数。通常用如下几种方法: 1. 割线法 如果用 1 k k 1k k x x ) x (f )x (f ----代替)x ('f k ,则得到割线法的迭代格式为: )x (f ) x (f )x (f x x x x k 1k k 1 k k k 1k --+---= (1-7) 2. 拟牛顿法 如果用 ) x (f )) x (f x (f )x (f k 1k k k ---代替)x ('f k ,则得到拟牛顿法的迭代格式为: )) x (f x (f )x (f ) x (f x x 1k k k k 2k 1k -+--- = (1-8) 3. Steffenson 法 如果用 ) x (f ) x (f ))x (f x (f k k k k -+代替)x ('f k ,则得到拟牛顿法的迭代格式为: ) x (f ))x (f x (f ) x (f x x k k k k 2k 1 k -+- =+

数值计算_第4章 解线性方程组的迭代法

第4章解线性方程组的迭代法 用迭代法求解线性方程组与第4章非线性方程求根的方法相似,对方程组进行等价变换,构造同解方程组(对可构造各种等价方程组, 如分解,可逆,则由得到),以此构造迭代关系式 (4.1) 任取初始向量,代入迭代式中,经计算得到迭代序列。 若迭代序列收敛,设的极限为,对迭代式两边取极限 即是方程组的解,此时称迭代法收敛,否则称迭代法发散。我们将看到,不同于非线性方程的迭代方法,解线性方程组的迭代收敛与否完全决定于迭代矩阵的性质,与迭代初始值的选取无关。迭代法的优点是占有存储空间少,程序实现简单,尤其适用于大型稀疏矩阵;不尽人意之处是要面对判断迭代是否收敛和收敛速度的问题。 可以证明迭代矩阵的与谱半径是迭代收敛的充分必要条件,其中是矩阵的特征根。事实上,若为方程组的解,则有 再由迭代式可得到

由线性代数定理,的充分必要条件。 因此对迭代法(4.1)的收敛性有以下两个定理成立。 定理4.1迭代法收敛的充要条件是。 定理4.2迭代法收敛的充要条件是迭代矩阵的谱半径 因此,称谱半径小于1的矩阵为收敛矩阵。计算矩阵的谱半径,需要求解矩阵的特征值才能得到,通常这是较为繁重的工作。但是可以通过计算矩阵的范数等方法简化判断收敛的 工作。前面已经提到过,若||A||p矩阵的范数,则总有。因此,若,则必为收敛矩阵。计算矩阵的1范数和范数的方法比较简单,其中 于是,只要迭代矩阵满足或,就可以判断迭代序列 是收敛的。 要注意的是,当或时,可以有,因此不能判断迭代序列发散。

在计算中当相邻两次的向量误差的某种范数小于给定精度时,则停止迭代计算,视为方程组的近似解(有关范数的详细定义请看3.3节。) 4.1雅可比(Jacobi)迭代法 4.1.1 雅可比迭代格式 雅可比迭代计算 元线性方程组 (4.2) 写成矩阵形式为。若将式(4.2)中每个方程的留在方程左边,其余各项移到方程右边;方程两边除以则得到下列同解方程组: 记,构造迭代形式

迭代法解线性方程组

迭代法解线性方程组作业 沈欢00986096 北京大学工学院,北京100871 2011年10月12日 摘要 由所给矩阵生成系数矩阵A和右端项b,分析系数矩阵A,并用Jacobi迭代法、GS迭代法、SOR(逐步松弛迭代法)解方程组Ax=b 1生成系数矩阵A、右端项b,并分析矩阵A 由文件”gr900900c rg.mm”得到了以.mm格式描述的系数矩阵A。A矩阵是900?900的大型稀 疏对称矩阵。于是,在matlaB中,使用”A=zeros(900,900)”语句生成900?900的零矩阵。再 按照.mm文件中的描述,分别对第i行、第j列的元素赋对应的值,就生成了系数矩阵A,并 将A存为.mat文件以便之后应用。 由于右端项是全为1的列向量,所以由语句”b=ones(900,1)”生成。 得到了矩阵A后,求其行列式,使用函数”det(A)”,求得结果为”Inf”,证明行列式太大,matlaB无法显示。由此证明,矩阵A可逆,线性方程组 Ax=b 有唯一解。 接着,判断A矩阵是否是对称矩阵(其实,这步是没有必要的,因为A矩阵本身是对称矩阵,是.mm格式中的矩阵按对称阵生成的)。如果A是对称矩阵,那么 A?A T=0 。于是,令B=A?A T,并对B求∞范数。结果显示: B ∞=0,所以,B是零矩阵,也就是:A是对称矩阵。 然后,求A的三个条件数: Cond(A)= A ? A?1 所求结果是,对应于1范数的条件数为:377.2334;对应于2范数的条件数为:194.5739;对应 于3范数的条件数为:377.2334; 1

从以上结果我们看出,A是可逆矩阵,但是A的条件数很大,所以,Ax=b有唯一解并且矩阵A相对不稳定。所以,我们可以用迭代方法来求解该线性方程组,但是由于A的条件数太大迭代次数一般而言会比较多。 2Jacobi迭代法 Jacobi迭代方法的程序流程图如图所示: 图1:Jacobi迭代方法程序流程图 在上述流程中,取x0=[1,1,...,1]T将精度设为accuracy=10?3,需要误差满足: error= x k+1?x k x k+1

高斯-赛德尔迭代法解线性方程组精选.

数值分析实验五 班级: 10信计二班 学号:59 姓名:王志桃 分数: 一.实验名称 高斯-赛德尔迭代法解线性方程组 二.实验目的 1. 学会利用高斯赛德尔方法解线性方程组 2. 明白迭代法的原理 3. 对于大型稀疏矩阵方程组适用于迭代法比较简单 三.实验内容 利用Gauss-Seidel 迭代法求解下列方程组 ?????=++=-+=+-36123633111420238321 321321x x x x x x x x x , 其中取→=0)0(x 。 四、算法描述 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值,若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量)1(+k i x 时,用最新分量)1(1+k x ,???+)1(2k x )1(1-+k i x 代替旧分量)(1k x ,???)(2k x )(1-k i x ,就得到所谓解方程组的Gauss-Seidel 迭代法。 其迭代格式为 T n x x x x )()0()0(2)0(1)0(,,,???= (初始向量), )(11111)()1( ) 1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者写为 ?? ???--=???=???==?+=∑∑-=-+=+++)(1)210i 210(1111)( )1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 五、 编码 #include #include

基于Matlab的牛顿迭代法解非线性方程组

基于Matlab 实现牛顿迭代法解非线性方程组 已知非线性方程组如下 2211221212 10801080x x x x x x x ?-++=??+-+=?? 给定初值0(0,0)T x =,要求求解精度达到0.00001 首先建立函数F(x),方程组编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1) f(2)]; 建立函数DF(x),用于求方程组的Jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; 编程牛顿迭代法解非线性方程组,将newton.m 保存到工作路径中: clear; clc x=[0,0]'; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break ; else end end

运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117 3 0.9999752 0.9999685 4 1.0000000 1.0000000

实验解线性方程组的基本迭代法实验

数值分析实验报告

0 a 12 K a 1,n 1 K a 2,n 1 U O M 则有: 第一步: Jacobi 迭代法 a 1n a 2n M , 则有: A D L U a n 1,n Ax b A A x D b L U (D L U)x b Dx (L U)x b x D (L U)x D b 令 J D (L U) 则称 J 为雅克比迭代矩阵 f D b 由此可得雅克比迭代的迭代格式如下: x (0) , 初始向量 x (k 1) Jx (k) f ,k 0,1,2,L 第二步 Gauss-Seidel 迭代法 Ax b (D L U )x b (D L)x Ux b x (D L) Ux (D L) b A D L U a 11 a 12 L a 1n a 11 A a 21 a 22 L a 2n a 22 M MM MO a n1 a n2 L a nn a 11 得到 D a 22 O a nn 由 a 21 0 M M O a n 1,1 a n 1,2 L 0 a nn a n1 a n2 L a n,n a 21 L M M O a n 1,1 a n 1,2 L a n1 a n2 L a n,n 1 a 12 K a 1,n 1 a 1n 0 K a 2,n 1 a 2n O M M a n 1,n 10

令 G (D L) U ,则称G 为Gauss-Seidel 迭代矩阵 f (D L) b 由此可得 Gauss-Seidel 迭代的迭代格式如下: x (0) , 初始向量 第三步 SOR 迭代法 w0 AD L U 1 ( D 1 wL ((1 w)D wU )) (D 1 wL) ((1 w)D wU ) w w w 令M w 1 (D wL), N 1 ((1 w)D wU )则有:A MN w w Ax b AM L W N M (M N )x b Mx Nx b x M Nx M b N M, 令W f Mb 带入 N 的值可有 L W ((1 w)D wU) (D wL) 1((1 w)D wU) (D wL) f 1 b w 1(D wL) 1b 1 (D wL) w 称 L W 为 SOR 迭代矩阵,由此可得 SOR 迭代的迭代格式如下: x (0) ,初始向量 二、算法程序 Jacobi 迭代法的 M 文件: function [y,n]=Jacobi(A,b,x0,eps) %************************************************* %函数名称 Jacobi 雅克比迭代函数 %参数解释 A 系数矩阵 % b 常数项 % x0 估计解向量 x (k 1) Gx (k) f ,k 0,1,2,L (k 1) f,k 0,1,2,L

迭代法

题目:Newton-Raphson 迭代法 (1)计算原理 (2)编出计算机程序 (3)给出算例(任意题型) (1)计算原理: 牛顿-拉夫森(Newton-Raphson)迭代法也称为牛顿迭代法,它是数值分析中最重要的方法之一,它不仅适用于方程或方程组的求解,还常用于微分方程和积分方程求解。 用迭代法解非线性方程时,如何构造迭代函数是非常重要的,那么怎样构造的迭代函数才能保证迭代法收敛呢?牛顿迭代法就是常用的方法之一,其迭代格式的来源大概有以下几种方式: 1设()[]2,f x C a b ∈,对()f x 在点[]0,x a b ∈,作泰勒展开: 略去二次项,得到()f x 的线性近似式:()()()()000f x f x f x x x '≈+- 由此得到方程()0f x =的近似根(假定()00f x '≠),() () 000f x x x f x =-' 即可构造出迭代格式(假定()00f x '≠):() () 1k k k k f x x x f x +=- ' 这就是牛顿迭代公式,若得到的序列{}k x 收敛于α,则α就是非线性方程的根。 2 牛顿迭代法 牛顿切线法,这是由于()f x 的线性化近似函数()()()()000l x f x f x x x '≈+-是曲线()y f x =过点()()00,x f x 的切线而得名的,求()f x 的零点代之以求() l x !2))((''))((')()(2 0000x x f x x x f x f x f -+ -+= ξ

的零点,即切线与x 轴交点的横坐标,如左图所示,这就是牛顿切线法的几何解释。实际上,牛顿迭代法也可以从几何意义上推出。利用牛顿迭代公式,由 k x 得到1k x +,从几何图形上看,就是过点()(),k k x f x 作函数()f x 的切线k l ,切线k l 与x 轴的交点就是1k x +,所以有()() 1 k k k k f x f x x x +'=-,整理后也能得出牛顿迭 代公式: 3 要保证迭代法收敛,不管非线性方程()0f x =的形式如何,总可以构造: 作为方程求解的迭代函数。因为: 而且 在根附近越小,其局部收敛速度越快,故可令: 若0(即根不是0的重根),则由得: , 因此可令 ,则也可以得出迭代公式: 。 4 迭代法的基本思想是将方程改写成等价的迭代形式,但随之而来的问题却是迭代公式不一定收敛,或者收敛的速度较慢。运用前述加速技巧,对于简单迭代过程 ,其加速公式具有形式: ,其中 记,上面两式可以合并写成: 这种迭代公式称作简单的牛顿公式,其相应的迭代函数是: 。 需要注意的是,由于是的估计值,若取,则实际上便是的估计值。假设,则可以用代替上式中的, 就可得到牛顿法的迭代公式: 。 )(')(1k k k k x f x f x x - =+)()()(x f x k x x x -==?)0)((≠x k )(')()()('1)('x f x k x f x k x --=?) ('x ?α0)('=α?≠)('αf α=)(x f 0)('=α?)('1 )(ααf k = )('1 )(x f x k = )(')(1k k k k x f x f x x - =+0)(=x f )(x x ?=)(1n n n x f x x +=+θθ?--= +1)(1n n n x x x ) (111n n n x x x --+=++θθ )(1 n n x x ?=+1-=θL L x f x x n n n )(1- =+L x f x x )()(- =?L )('x ?)()(x f x x +=?)('x ?)('x f 0)('≠x f )('x f L )(')(1n n n n x f x f x x - =+

解线性方程组的直接法和迭代法

数值分析方法中方程求解的直接法和迭代法 第3章 解线性方程组的直接法 一、 消元法 1. 高斯消元法(加减消元):首先将A 化为上三角阵,再回代求解。 11121121222212n n n n nn n a a a b a a a b a a a b ?? ? ? ? ??? (1)(1)(1)(1)(1)11 121311(2)(2)(2)(2)222322 (3)(3)(3)3333()()000 00 n n n n n nn n a a a a b a a a b a a b a b ?? ? ? ? ? ? ?? ? 步骤如下: 第一步:1 11 1,2,,i a i i n a -? +=第行第行 11121121222212 n n n n nn n a a a b a a a b a a a b ?? ? ? ? ??? 111211(2)(2)(2)2222 (2)(2)(2)2 00n n n nn n a a a b a a b a a b ?? ? ? ? ??? 第二步:(2)2 (2)222,3, ,i a i i n a -?+=第行第行 111211(2)(2)(2)2222 (2)(2)(2)200n n n nn n a a a b a a b a a b ?? ? ? ? ?? ? 111213 11 (2)(2)(2)(2) 222322 (3)(3)(3) 33 33(3)(3)(3) 3 00000n n n n nn n a a a a b a a a b a a b a a b ?? ? ? ? ? ? ?? ? 类似的做下去,我们有: 第k 步:() ()k ,1, ,k ik k kk a i i k n a -?+=+第行第行。 n -1步以后,我们可以得到变换后的矩阵为:

解线性方程组的几种迭代算法

解线性方程组的几种迭代算法 内容摘要: 本文首先总结了分裂法解线性方程组的一些迭代算法,在此基础上分别通过改变系数矩阵A的分裂形式和对SSOR算法的改进提出了两种新的算法,并证明了这两种算法的收敛性.与其它方法相比,通过改变系数矩阵A的分裂形式得到的新算法具有更好的收敛性,改进的SSOR算法有了更快的收敛速度.最后通过数值实例验证了这两种算法在有些情况下确实可以更有效的解决问题. 关键词: 线性方程组迭代法算法收敛速度 Several kinds of solving linear equations iterative algorithm Abstract: In this paper, we firstly summarize some Iterative algorithms of Anti-secession law solution of linear equations. Based on these, two new algorithms are put forward by changing the fission form of coefficient matrix A and improving the algorithm of SSOR, and the convergence of the two algorithms is demonstrated. Compared with other methods, the new algorithm acquired by changing the fission form of coefficient matrix A is possessed of a better convergence. And the improved SSOR algorithm has a faster convergence speed. Finally, some numerical examples verify that the two algorithms can solve problems more effectively in some cases. Key words: Linear equations Iteration method algorithm Convergence speed

相关文档
最新文档