您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > matlab-线性方程组的迭代解法-GaussSeidel
《计算方法与MATLAB应用》实验报告第1页共4页实验1:线性方程组的迭代解法专业班级学号姓名实验日期1、实验环境MATLAB2009A2、实验目的和要求目的:利用Gauss-Seidel编程法求解方程组要求:代码能列出每一次迭代的中间值3、解题思路、代码3.1解题思路Gauss-Seidel迭代公式:xi(k+1)=(bi-1iijaijxj(k+1)-nij1aijxj(k))/aij(i=1,2,…,n)3.2代码functionx=GaussSeidel(A,b,es,maxit)%GaussSeidel:GaussSeidelmethod%x=GaussSeidel(A,b):GaussSeidelwithoutrelaxation%input:%A=coefficientmatrix%b=righthandsidevector%es=stopcriterion(default=0.00001%)%maxit=maxiteration(default=50)%output:%x=solutionvectorifnargin2,error('atleast2inputargumentsrequired'),endifnargin4|isempty(maxit),maxit=50;endifnargin3|isempty(es),es=0.00001;endk=0xk=[0000][m,n]=size(A);ifm~=n,error('MatrixAmustbesquare');endC=A;《计算方法与MATLAB应用》实验报告第2页共4页fori=1:nC(i,i)=0;x(i)=0;endx=x';fori=1:nC(i,1:n)=C(i,1:n)/A(i,i);endfori=1:nd(i)=b(i)/A(i,i);enditer=0;while(1)xold=x;fori=1:nx(i)=d(i)-C(i,:)*x;ifx(i)~=0ea(i)=abs((x(i)-xold(i))/x(i))*100;endendk=k+1xk=x'%此行不打分号,并且转置,以便于输出每次迭代的结果iter=iter+1;if(max(ea)=es|iter==maxit)break;endendend4、实验步骤4.1输入:《计算方法与MATLAB应用》实验报告第3页共4页4.2输出:……………….《计算方法与MATLAB应用》实验报告第4页共4页5、讨论和分析GaussSeidel迭代法是通过利用xi(k+1)=(bi-1iijaijxj(k+1)-nij1aijxj(k))/aij(i=1,2,…,n)这个公式,经过若干次运算,使结果越来越逼近方程的真实解。实验的重点是代码中如何实现迭代公式以及代码中控制好循环。GaussSeidel迭代法,是jacobi迭代法的改进,将刚算出来的xi(k+1)立即用于下一步的运算,因此,在两种方法同时收敛的情况下,GaussSeidel迭代法收敛速度更快。
本文标题:matlab-线性方程组的迭代解法-GaussSeidel
链接地址:https://www.777doc.com/doc-5872669 .html