文档库 最新最全的文档下载
当前位置:文档库 › 非线性方程组迭代解法

非线性方程组迭代解法

非线性方程组迭代解法
非线性方程组迭代解法

非线性方程组迭代解法

不动点法(unmovepoints.m)

%非线性方程组的不动点法

function [x,n]=unmovepoints(fun,x0,eps)

if nargin<3

eps=1e-3;

end

x1=feval(fun,x0);

n=1;

while(norm(x1-x0))>=eps

x0=x1;x1=feval(fun,x0);

n=n+1;

if n>100000

disp('无法收敛!');

break

end

end

x=x1;

Newton迭代法(newtons.m)

%非线性方程组的Newton迭代法

function [x,n]=newtons(fun1,fun2,x0,eps)

if nargin<4

eps=1e-3;

end

x1=x0-feval(fun1,x0)/feval(fun2,x0);

n=1;

while norm(x1-x0)>=eps

x0=x1;x1=x0-feval(fun1,x0)/feval(fun2,x0);

n=n+1;

if n>100000

disp('无法收敛!');

break

end

end

x=x1;

注:方程组的迭代与方程迭代不同之处在于收敛的判断不能用abs 而应用norm (范数,默认值为向量各元素的平方和的开方;norm(x1-x0)即为向量x1与x0对应元素差的平方和的开方。在对应的函数程序中应注意向量的运算与数量运算的区别。)

用以上方法求解下列非线性方程组:

()0cos 2.0sin 7.02111=--=x x x X f ()0sin 2.0cos 7.02122=+-=x x x X f

函数:

%非线性方程组函数(适用于不动点法) function f=nonlinerequs1(x)

f(1)=0.7*sin(x(1))+0.2*cos(x(2)); f(2)=0.7*cos(x(1))-0.2*sin(x(2));

%非线性方程组函数(适用于Newton 迭代法) function f=nonlinerequs2(x)

f(1)=x(1)-0.7*sin(x(1))-0.2*cos(x(2)); f(2)=x(2)-0.7*cos(x(1))+0.2*sin(x(2));

%非线性方程组函数导数(适用于Newton 迭代法) function f=nonlinerequs3(x)

f=[1-0.7*cos(x(1)),0.2*sin(x(2));0.7*sin(x(1)),1+0.2*cos(x(2))];

导数为????

?

?

??????????????2212211

1x f x f x f x

f ,对多方程则类似。 命令:

fsolve(@nonlinerequs2,[0.5,0.5])

[x,n]=unmovepoints(@nonlinerequs1,[0,0],1e-6)

[x,n]=newtons(@nonlinerequs2,@nonlinerequs3,[0,0],1e-6)

计算结果:(eps=0.000001)

迭代方法

X 迭代次数n

解析解

[0.52652262191818 0.50791971903685] - fsolve [0.52652266171295 0.50791973020932]

- 不动点法

[0.52652130091388 0.50792028463452] 30 Newton 迭代法

[0.52652279369020 0.50791961189450] 16

在某操作条件下,有如下四个独立的反应:

B A ? D

C A +?

D

E A +? C

F A +?

其平衡常数分别为:0.08,0.06,0.001,0.05;反应前只有组分A ,没有其他物质,试求反应平衡时组分A 的摩尔分率为多少? 解:

设反应前组分A 的总摩尔数为1,反应平衡后四反应过程分别消耗组分A 的摩尔数为

1x 、2x 、3x 、4x ,所以反应平衡时各组分的摩尔数为:

A :43211x x x x ----

B :1x

C :42x x +

D :32x x +

E :3x

F :4x 故有:

()0114

3211

1=-----=

K x x x x x X f ()()()

()()0112

432432132422=-+++----++=

K x x x x x x x x x x x X f ()()

()()011343243213233=-+++----+=

K x x x x x x x x x x X f

()()

()()0114

43243214244=-+++----+=

K x x x x x x x x x x X f

reaction.m

%非线性方程组函数(化学平衡,适用于fsolve) function f=reaction(x)

f(1)=x(1)/(1-x(1)-x(2)-x(3)-x(4))-0.08;

f(2)=(x(2)+x(4))*(x(2)+x(3))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.06; f(3)=x(3)*(x(2)+x(3))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.001; f(4)=x(4)*(x(2)+x(4))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.05; 命令:

x=fsolve(@reaction,[0.3,0.2,0.1,0])或x=fsolve(@reaction,[0.3,0.2,0.1,0],foptions) 计算结果:

x=[0.0514, 0.1621, 0.0050, 0.1392] 因此组分A 的摩尔分率为:

4917.0114

324

321=+++----x x x x x x x

reaction1.m

%非线性方程组函数(化学平衡,适用于不动点法) function f=reaction1(x)

f(1)=(1-x(1)-x(2)-x(3)-x(4))*0.08;

f(2)=(1-x(1)-x(2)-x(3)-x(4))*(1+x(2)+x(3)+x(4))*0.06/(x(2)+x(3))-x(4); f(3)=(1-x(1)-x(2)-x(3)-x(4))*(1+x(2)+x(3)+x(4))*0.001/(x(2)+x(3)); f(4)=(1-x(1)-x(2)-x(3)-x(4))*(1+x(2)+x(3)+x(4))*0.05/(x(2)+x(4)); 其迭代格式为:

()4321111x x x x K x ----=

()()

()43243243212

211x x x x x x x x x x K x -++++----= ()()

()3243243213311x x x x x x x x x K x ++++----=

()()

()

4243243214411x x x x x x x x x K x ++++----=

但该迭代格式无法收敛,所以不同的迭代格式是否收敛有很大不同;要满足迭代收敛则必须满足以下关系:

迭代格式:()()()

k k X X φ=+1 迭代函数的偏导数矩阵:

????????

??????????????????????????????n n n n n n x x x x x x x x x φφφφφφφφφ

1

1

22212121

11 迭代格式收敛的充分条件:

11

1max <∑

=≤≤n

j ij n

i a 或

11

1ma x

<∑=≤≤n

i ij n

j a 或

11

,2

<∑

=n

j i ij a

故在迭代格式的构造上比较困难,在实际应用中若能满足以上条件是最好的;但如果无法

构造满足以上条件的迭代格式,那么还可采取如下的方法。 在不动点法中引如松弛因子1

()()()k k X X φ=+1 ? ()()()()()[]

k k k k X X W X X -+=+φ1

unmovepoints.m

%非线性方程组的不动点法

function [x,n]=unmovepoints(fun,x0,eps)

if nargin<3

eps=1e-3;

end

x1=feval(fun,x0);

n=1;

while(norm(x1-x0))>=eps

x0=x1;

x1=x0+0.1*(feval(fun,x0)-x0);无法收敛时,采用该式迭代,其中0.1为松弛因子<1,可根据具体情况修改

%x1=feval(fun,x0);

n=n+1;

if n>100000

disp('无法收敛!');

break

end

end

x=x1;

命令:(松弛因子取0.1,其数值不同迭代收敛程度不同,不收敛则降低松弛因子)

x=unmovepoints(@reaction1,[0.3,0.2,0.1,0],1e-6)

计算结果:

x=[0.0514, 0.1621, 0.0050, 0.1392]

非线性方程组迭代解法

非线性方程组迭代解法 不动点法(unmovepoints.m) %非线性方程组的不动点法 function [x,n]=unmovepoints(fun,x0,eps) if nargin<3 eps=1e-3; end x1=feval(fun,x0); n=1; while(norm(x1-x0))>=eps x0=x1;x1=feval(fun,x0); n=n+1; if n>100000 disp('无法收敛!'); break end end x=x1; Newton迭代法(newtons.m) %非线性方程组的Newton迭代法 function [x,n]=newtons(fun1,fun2,x0,eps) if nargin<4 eps=1e-3; end x1=x0-feval(fun1,x0)/feval(fun2,x0); n=1; while norm(x1-x0)>=eps x0=x1;x1=x0-feval(fun1,x0)/feval(fun2,x0); n=n+1; if n>100000 disp('无法收敛!'); break end end x=x1;

注:方程组的迭代与方程迭代不同之处在于收敛的判断不能用abs 而应用norm (范数,默认值为向量各元素的平方和的开方;norm(x1-x0)即为向量x1与x0对应元素差的平方和的开方。在对应的函数程序中应注意向量的运算与数量运算的区别。) 用以上方法求解下列非线性方程组: ()0cos 2.0sin 7.02111=--=x x x X f ()0sin 2.0cos 7.02122=+-=x x x X f 函数: %非线性方程组函数(适用于不动点法) function f=nonlinerequs1(x) f(1)=0.7*sin(x(1))+0.2*cos(x(2)); f(2)=0.7*cos(x(1))-0.2*sin(x(2)); %非线性方程组函数(适用于Newton 迭代法) function f=nonlinerequs2(x) f(1)=x(1)-0.7*sin(x(1))-0.2*cos(x(2)); f(2)=x(2)-0.7*cos(x(1))+0.2*sin(x(2)); %非线性方程组函数导数(适用于Newton 迭代法) function f=nonlinerequs3(x) f=[1-0.7*cos(x(1)),0.2*sin(x(2));0.7*sin(x(1)),1+0.2*cos(x(2))]; 导数为???? ? ? ??????????????2212211 1x f x f x f x f ,对多方程则类似。 命令: fsolve(@nonlinerequs2,[0.5,0.5]) [x,n]=unmovepoints(@nonlinerequs1,[0,0],1e-6) [x,n]=newtons(@nonlinerequs2,@nonlinerequs3,[0,0],1e-6) 计算结果:(eps=0.000001) 迭代方法 X 迭代次数n 解析解 [0.52652262191818 0.50791971903685] - fsolve [0.52652266171295 0.50791973020932] - 不动点法 [0.52652130091388 0.50792028463452] 30 Newton 迭代法 [0.52652279369020 0.50791961189450] 16

线性方程组迭代解法

实验六:线性方程组迭代解法 1)实验目的 ? 熟悉Matlab 编程; ? 学习线性方程组迭代解法的程序设计算法 2)实验题目 1.研究解线性方程组Ax=b 迭代法收敛速度。A 为20阶五对角距阵 ??????????????? ?????????????????------------------=321 412132141412132141412132141 412132 141213 O O O O O A 要求: (1)选取不同的初始向量x 0 及右端向量b ,给定迭代误差要求,用雅可比迭代和高斯-赛 德尔迭代法求解,观察得到的序列是否收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。 (2)用SOR 迭代法求解上述方程组,松弛系数ω取1< ω <2的不同值,在 时停止迭代.记录迭代次数,分析计算结果并得出你的结论。 2.给出线性方程组b x H n =,其中系数矩阵n H 为希尔伯特矩阵: ()n n ij n h H ??∈=,.,,2,1,,1n j i j i i h ij Λ=-+= 假设().,1,,1,1*x H b x n n T =?∈=Λ若取,10,8,6=n 分别用雅可比迭代法及SOR 迭代 (5.1,25.1,1=ω)求解,比较计算结果。 3)实验原理与理论基础 1.雅克比(Jacobi )迭代法算法设计: ①输入矩阵a 与右端向量b 及初值x(1,i); ②按公式计算得 ),,2,1(1)(1)1(n i x a b a x k j n i j j ij i ii k i Λ=????? ??-=∑≠=+ 2.高斯――赛得尔迭代法算法设计: 1. 输入矩阵a 与右端向量b 及初值x(1,i).

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

非线性方程组迭代法

实验二 非线性方程的数值解法 1.1 实验内容和要求 在科学研究和工程技术中大量的实际问题是非线性的,求非线性方程()0f x =满足一定精确度的近似根是工程计算与科学研究中诸多领域经常需要解决的问题。 实验目的:进一步理解掌握非线性方程求根的简单迭代法、埃特金Aitken 加速法、牛顿迭代法的思想和构造。 实验内容: 求方程2320x x x e -+-=的实根。 要求: (1)设计一种简单迭代法,要使迭代序列收敛,然后再用埃特金Aitken 加速迭代,计算到-8110k k x x --<为止。 (2)用牛顿迭代法,同样计算到-8110k k x x --< (3)输出迭代初值、迭代次数k 及各次迭代值,并比较算法的优劣。 1.2 算法描述 普通迭代法计算步骤: (1)给定初始近似值0x ,eps 为精确度。 (2)用迭代公式 进行迭代,直到-8110k k x x --<为止。 埃特金Aitken 加速迭代法计算步骤: (1)将()0f x =化成同解方程()x x ?= ()k k y x ?= ,()k k z y ?= 21()2k k k k k k k y x x x z y x +-=--+=22k k k k k k x z y z y x --+ (2)计算到-8110k k x x --<为止。 牛顿法计算步骤:

给定初始近似值0x ,1ε为根的容许误差,2ε为()f x 的容许误差,N 为迭代 次数的容许值。 计算00(),()f x f x ' (1)如果0()0f x '=或者迭代次数大于N ,则算法失败,结束;否则执行(2) (2)按公式0100()() f x x x f x =-'迭代一次,得到新的近似值1x ,计算11(),()f x f x ' (3)如果101x x ε-<或者12()f x ε<,则迭代终止,以1x 作为所求的根,结 束;否则执行(4) (4)以111(,(),())x f x f x '代替000(,(),())x f x f x ',转步骤(1)继续迭代。 1.3程序代码清单

十、解非线性方程(组)的迭代法和加速法

一、一般迭代法求解非线性方程组。 function [k,piancha,xdpiancha,xk]=diedai1(x0,k) x(1)=x0; for i=1:k x(i+1)=fun1(x(i)); piancha=abs(x(i+1)-x(i)); xdpiancha=piancha/(abs(x(i+1))+eps); i=i+1;xk=x(i); [(i-1) piancha xdpiancha xk] end if (piancha>1)&(xdpiancha>0.5)&(k>3) disp('此迭代序列发散,请重新输入新的迭代公式') return; end if (piancha<0.001)&(xdpiancha<0.0000005)&(k>3) disp('此迭代序列收敛,且收敛速度较快') return; end p=[(i-1) piancha xdpiancha xk]'; 1、function y=fun1(x) y=(10-x.^2)./2 >> [k,piancha,xdpiancha,xk]=diedai1(5,10) 此迭代序列发散,请重新输入新的迭代公式 k = 10 piancha = 2.4484e+271 xdpiancha = 1 xk = -2.4484e+271 2、function y=fun1(x) y=10./(x+2) >> [k,piancha,xdpiancha,xk]=diedai1(5,25) 此迭代序列收敛,且收敛速度较快 k = 25 piancha = 9.5676e-007 xdpiancha = 4.1300e-007 xk = 2.3166 二、第二种迭代法。

线性方程组的迭代解法(Matlab)

第六章线性方程组的迭代解法 2015年12月27日17:12 迭代法是目前求解大规模稀疏线性方程组的主要方法之一。包括定常迭代法和不定常迭代法,定常迭代法的迭代矩阵通常保持不变,包括有雅可比迭代法(Jacobi)、高斯-塞德尔迭代法(Gauss-Seidel)、超松弛迭代法(SOR) 1.雅可比迭代法(Jacobi) A表示线性方程组的系数矩阵,D表示A的主对角部分,L表示下三角部分,U表示上三角部分。 A=D+L+U 要解的方程变为Dx+Lx+Ux=b x=D^(-1)(b-(L+U)x) 所以Jocabi方法如下: Matlab程序 function [x,iter] =jacobi(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); for iter=1:500 x=D\(b+L*x+U*x); error=norm(b-A*x)/norm(b); if(error

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的初始化,撤销下面两行的注释符, 就可以由键盘向x0读入初始近似解向量for( i=0;i>x0[i]; cout<<"初始近似解向量:"<

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

解线性方程组的几种迭代算法 内容摘要: 本文首先总结了分裂法解线性方程组的一些迭代算法,在此基础上分别通过改变系数矩阵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

基于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

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

牛顿迭代法求解非线性方程组 非线性方程组如下: 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

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

线性方程组的直接法 直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。 线性方程组迭代法 迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法.该方法具有对计算机的存贮单元需求少,程序设计简单、原始系数矩阵在计算过程中不变等优点,是求解大型稀疏矩阵方程组的重要方法.迭代法不是用有限步运算求精确解,而是通过迭代产生近似解逼近精确解.如Jacobi 迭代、Gauss — Seidel 迭代、SOR 迭代法等。 1. 线性方程组的直接法 直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。 1.1 Cramer 法则 Cramer 法则用于判断具有n 个未知数的n 个线性方程的方程组解的情况。当方程组的系数行列式不等于零时,方程组有解且解唯一。如果方程组无解或者有两个不同的解时,则系数行列式必为零。如果齐次线性方程组的系数行列式不等于零,则没有非零解。如果齐次线性方程组有非零解,则系数行列式必为零。 定理1如果方程组Ax b =中0D A =≠,则Ax b =有解,且解事唯一的,解为1212,,...,n n D D D x x x D D D ===i D 是D 中第i 列换成向量b 所得的行列式。 Cramer 法则解n 元方程组有两个前提条件: 1、未知数的个数等于方程的个数。 2、系数行列式不等于零 例1 a 取何值时,线性方程组

1231231 2311x x x a ax x x x x ax ++=??++=??++=?有唯一解。 解:2111111 11011(1)11001 A a a a a a a ==--=--- 所以当1a ≠时,方程组有唯一解。 定理2当齐次线性方程组0Ax =,0A ≠时该方程组有唯一的零解。 定理3齐次线性方程组0Ax =有非零解0A <=>=。 1.2 Gauss 消元法 Gauss 消元法是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。 1.2.1 用Gauss 消元法为线性方程组求解 eg :Gauss 消元法可用来找出下列方程组的解或其解的限制: ()()()123283211223x y z L x y z L x y z L +-=??--+=-??-++=-? 这个算法的原理是:首先,要将1L 以下的等式中的x 消除,然后再将2L 以下的等式中的y 消除。这样可使整个方程组变成一个三角形似的格式。之后再将已得出的答案一个个地代入已被简化的等式中的未知数中,就可求出其余的答案了。 在刚才的例子中,我们将132 L 和2L 相加,就可以将2L 中的x 消除了。

第6章 线性方程组迭代解法 参考答案

第6章 线性方程组迭代解法 参考答案 一、选择题(15分,每小题3分) 1、(3) 2、(4) 3、(4) 4、(1) 5、(2) 二、填空题(15分,每小题3分) 1、1a <;2 、2a < ;3、1a <;4 ;5、Ax b ? 三、(9分) 解: (1) 19.01<=B ,∴迭代法f Bx x k k +=?1的收敛;--------------------(3分) (2) B 的特征值8.0,5.1=λ,15.1)(>=B ρ,∴迭代法f Bx x k k +=?1发散;(6分) (3) B 的特征值19.0)(<=B ρ,∴迭代法f Bx x k k +=?1收敛。 ---------(9分) 四、(14分) 解:(1)Jacobi 迭代法的分量形式 1123121313121222012322()()()()()()()()() ;,,,k k k k k k k k k x x x x x x k x x x +++?=?+?=??=??=???L ----------------------------------(2分) Gauss-Seidel 迭代法的分量形式 1123112131113 121222012322()()()()()()()()() ;,,,k k k k k k k k k x x x x x x k x x x ++++++?=?+?=??=??=???L ---------------------------------(4分) (2)Jacobi 迭代法的迭代矩阵为 1022101220()B D L U ??????=+=?????????? , --------------------------------(6分) 1230λλλ===,01()B ρ=<,Jacobi 迭代法收敛 ------------------------(8分) Gauss-Seidel 迭代法的迭代矩阵为 1022023002()G D L U ??????=?=??????? , --------------------------------(10分) 12302,λλλ===,21()B ρ=>,Gauss-Seidel 迭代法发散------------------(12分) (3)SOR 迭代法的分量形式

非线性方程的简单迭代法和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|

不动点迭代法求解非线性方程组

不动点迭代法求解非线性方程组 摘要:一般非线性方程组可以写成()0F x =的形式,其中:n m F R R →是定义在区域 n D R ?上的向量函数。把方程组()0F x =改写成与之等价的形式:(x G x =)。因此,求 方程组()0F x =的解就转化为求函数的(G x )的不动点。本文首先介绍了多变量函数()F x 的微积分性质,接着介绍了用不动点迭代法求解非线性方程组。 关键词:多变量函数;微积分;不动点 Fixed Point Iteration Method For Solving Nonlinear Equations Abstract :General nonlinear equations can be written in the form of ()F x θ=, where the vector function :n m F R R →is defined on the region n D R ?. Transform the equations ()0F x = into its equivalent form: (x G x =).Therefore, we can get the solution of ()0F x = by finding the fixed point of (G x ).In this paper, we first introduce some knowledge about multivariable calculus, then introduce the fixed point iteration method for solving nonlinear equations. Key words: multi-variable function; calculus; fixed point 1 引言 一般非线性方程组及其向量表示法:含有n 个方程的n 元非线性方程组的一般形式为 11221212(,...,)0(,...,)0......(,...,)0 n n m n f x x x f x x x f x x x =??=?? ? ?=? (1) 其中,()1,2,...,i f i n =是定义在n D R ?上的n 元实值函数,且i f 中至少有一个是非线性 函数。

数值分析讲义——线性方程组的解法

数值分析讲义 第三章线性方程组的解法 §3.0 引言 §3.1 雅可比(Jacobi)迭代法 §3.2 高斯-塞德尔(Gauss-Seidel)迭代法 §3.3 超松驰迭代法§3.7 三角分解法 §3.4 迭代法的收敛性§3.8 追赶法 §3.5 高斯消去法§3.9 其它应用 §3.6 高斯主元素消去法§3.10 误差分析 §3 作业讲评3 §3.11 总结

§3.0 引言 重要性:解线性代数方程组的有效方法在计算数学和科学计算中具有特殊的地位和作用.如弹性力学、电路分析、热传导和振动、以及社会科学及定量分析商业经济中的各种问题. 分类:线性方程组的解法可分为直接法和迭代法两种方法. (a) 直接法:对于给定的方程组,在没有舍入误差的假设下,能在预定的运算次数内求得精确解.最基本的直接法是Gauss消去法,重要的直接法全都受到Gauss消去法的启发.计算代价高. (b) 迭代法:基于一定的递推格式,产生逼近方程组精确解的近似序列.收敛性是其为迭代法的前提,此外,存在收敛速度与误差估计问题.简单实用,诱人.

§3.1 雅可比Jacobi 迭代法 (AX =b ) 1 基本思想: 与解f (x )=0 的不动点迭代相类似,将AX =b 改写为X =BX +f 的形式,建立雅可比方法的迭代格式:X k +1=BX (k )+f ,其中,B 称为迭代矩阵.其计算精度可控,特别适用于求解系数为大型稀疏矩阵(sparse matrices)的方程组. 2 问题: (a) 如何建立迭代格式? (b) 向量序列{X k }是否收敛以及收敛条件? 3 例题分析: 考虑解方程组??? ??=+--=-+-=--2.453.82102 .72103 21321321x x x x x x x x x (1) 其准确解为X *={1, 1.2, 1.3}. 建立与式(1)相等价的形式: ??? ??++=++=++=84.02.01.083.02.01.072 .02.01.02 13312321x x x x x x x x x (2) 据此建立迭代公式: ?????++=++=++=+++84 .02.01.083.02.01.072.02.01.0)(2)(1)1(3 )(3 )(1)1(23)(2)1(1k k k k k k k k k x x x x x x x x x (3) 取迭代初值0) 0(3 )0(2)0(1===x x x ,迭代结果如下表. JocabiMethodP31.cpp

线性方程组的迭代解法及收敛分析

河南科技学院 2015届本科毕业论文 论文题目:线性方程组的三种迭代解法 及收敛分析 学生姓名:韦成州 所在院系:数学科学学院 所学专业:信息与计算科学 导师姓名:李巧萍 完成时间:2015年5月20日

线性方程组的三种迭代解法及收敛分析 摘要 对于线性方程组的迭代解法,本文重点讨论雅可比迭代法,高斯塞德尔迭代法和超松弛迭代法三种迭代解法。主要讨论内容有:首先,写出三种迭代解法的基本思想,基本算法及收敛条件;其次,针对这三种迭代解法进行举例分析,通过MATLAB程序,求得三种迭代法各自的迭代次数、每次迭代的结果及误差;最后,在满足设定精度的情况下,对每个迭代方法所用的迭代次数进行通过分析比较,得出了在选择适当的松弛因子后,三种迭代法的收敛速度:超松弛迭代法>高斯塞德尔迭代法>雅可比迭代法,对于方程组Ax b ,迭代法的收敛性只与系数矩阵A有关,而与右端项b无关。同时,本文又对算法设计,收敛速度的判定等问题提出了改进意见。 关键词:MATLAB,数学模型,迭代解法,收敛,线性方程组

Three kinds of solutions of systems of linear equations iterative method and convergence analysis Abstract For iterative solution of linear equations, this article focuses on the Jacobi iteration method, gauss seidel iteration method and overrelaxation iteration method of three kinds of iterative method.Main discussion: first of all, write down three iterative method, the basic idea of the basic algorithm and convergence condition;Secondly, in view of the three kinds of iterative solution methods for analysis, through the MATLAB program, get three iterative method respective number of iterations, the results of each iteration and error;Finally, in the case of meet the setting precision, for each iteration method to carry through analysis and comparison, the number of iterations used in selecting the appropriate relaxation factor is obtained, the convergence rate of the three types of iterative method: overrelaxation iteration method, gauss seidel iteration method, Jacobi iteration method for the system of equations, the convergence of iterative method is only related to the coefficient matrix, and has nothing to do with the right items.And at the same time, this paper, the algorithm design, and the convergence rate of decision problems, such as improvement opinions are put forward. Keywords:MATLAB, Mathematical model, Iterative method, Convergence System of linear equations

相关文档