数值分析大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析大作业
学号:*********
专业:机械工程
学生姓名:***
2014年10月
摘要:在自然科学与工程技术中,很多问题的解决常常归结为求解线性方程组Ax=b 。随着计算机的发展,利用计算机这个强有力的计算工具去求解线性方程组是一个非常实用的问题。在求解大型线性方程组时,直接法在多次消元,回代的过程中,四则运算的误差累计与传播无法控制,致使计算结果的精度就无法保证,特别是求解大型稀松矩阵时,还要对系数矩阵进行分解。而迭代法相对于直接法而言,具有保持迭代矩阵不变的特点,计算程序一般也比较简单,且对于许多问题收敛速度比较快。比较常用的迭代法有雅克比迭代法、高斯一塞德尔迭代法和逐次超松弛迭代法等,本次研究目的是通过求解一个线性方程组来比较它们的迭代效果,验证一些已有的结论。
1.数学原理
1.1雅可比迭代法
将线性方程组的系数矩n n ij R a A ⨯∈=)(分解为A=D+L+U ,其中D 是由A 的主对角元素构成的对角矩阵,L 是由A 的严格下三角部分构成的严格下三角矩阵, U 是由A 的严格上三角部分构成的严格上三角矩阵,即
,22
11⎥⎥⎥⎥⎦
⎤⎢⎢⎢
⎢⎣⎡=nn a a a D
.000
0,000
0,122311312
1
,2
1
323121⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢
⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢
⎢⎢⎣
⎡=--n n n n n n n n a a a a a a U a a a a a a L
若系数矩阵A 的对角元素),,2,1(0n i a ii =≠,则矩阵D 非奇异,取M=D ,N=-(L+U),则J J g x G b D x U L D x +=++-=--11)(, 因而,构造的迭代法为:
.
),(,1
1
)()1(b D g U L D G g x G x J J J k J k --+=+-=+=
1.2高斯-赛得尔迭代法
将线性方程组的系数矩n n ij R a A ⨯∈=)(分解为A=D+L+U 。若系数矩阵A 的对角元素不等于0,则矩阵D 非奇异,取M=L+D ,N=-U ,则
()()G G g x G b D L Ux D L x +=+++-=--1
1
因而,构造的迭代法为:
()().
,,
1
1
)()1(b D L g U D L G g x G x G G G k G k --++=+-=+=
1.3逐次超松弛迭代法
线性方程组的系数矩n n ij R a A ⨯∈=)(分解为A=D+L+U 。 取()()[],11
,1
U D N L D M ωωω
ωω
--=+=
则
()()[]()S S g x G b L D x U D L D x +=++--+=--1
1
1ωωωωω
因而,构造的迭代法为:
()()[]().
,1,
1
1
)()1(b L D g U D L D G g x G x S G S k S k --++=--+=+=ωωωωω
2.程序设计
2.1雅可比迭代法求解
雅可比迭代法MATLAB 程序如下: %majacobi.m
function x=majacobi(A,b,x0,ep,N)
%用途:用Jacobi 迭代法解线性方程组Ax=b
%格式;x=majacobi(A,b,x0,ep,N) A 为系数矩阵,b 为右端向量, %x0为初始向量(默认零向量),ep 为精度(默认1e-6), %N 为最大迭代次数(默认500次),x 返回近似解向量 n=length(b);
if nargin<5,N=500;end if nargin<4,ep=1e-6;end
if nargin<3,x0=zeros(n,1);end x=zeros(n,1);k=0; while k x(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i); end if norm(x-x0,inf) if k==N,Warning('100');end disp(['k=',num2str(k)]) 在MATLAB 命令窗口执行创建的m 文件 >> edit majacobi >> A=[10.9,1.2,2.1,0.9;1.2,11.2,1.5,2.5;2.1,1.5,9.8,1.3;0.9,2.5,1.3,12.3] A = 10.9000 1.2000 2.1000 0.9000 1.2000 11.2000 1.5000 2.5000 2.1000 1.5000 9.8000 1.3000 0.9000 2.5000 1.3000 12.3000 >> b=[-7.0,5.3,10.3,24.6]'; >> x=majacobi(A,b) k=17 x = -0.9986 0.0071 1.0032 1.9656 2.2高斯-赛得尔迭代法求解 高斯-赛得尔迭代法MATLAB程序如下: %maseidel.m function x=maseidel (A,b,x0,ep,N) %用途:用Gauss-Seidel迭代法解线性方程组Ax=b %格式:x=maseidel (A,b,x0,ep,N) A为系数矩阵,b为右端向量, %x0为初始向量(默认零向量),ep为精度(默认1e-6), %N为最大迭代次数(默认500次),x返回近似解向量 n=length(b); if nargin<5,N=500;end if nargin<4,ep=1e-6;end if nargin<3,x0=zeros(n,1);end x=zeros(n,1);k=0; while k for i=1:n if i==1 x(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1); else if i==n x(n)=(b(n)-A(n,1:n-1)*x(1:n-1))/A(n,n); else x(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i); end end end if norm(x-x0,inf) x0=x;k=k+1; end