資源描述:
《數(shù)值計(jì)算方法課程設(shè)計(jì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、設(shè)計(jì)成績(jī):重慶郵電大學(xué)數(shù)學(xué)與應(yīng)用數(shù)學(xué)專(zhuān)業(yè)《數(shù)值計(jì)算方法》課程設(shè)計(jì)姓名:李金徽王瑩劉姝楠班級(jí):學(xué)號(hào):設(shè)計(jì)時(shí)間:2012-6-4指導(dǎo)教師:朱偉10一、課程設(shè)計(jì)目的在科學(xué)計(jì)算與工程設(shè)計(jì)中,我們常會(huì)遇到求解線性方程組的問(wèn)題,對(duì)于系數(shù)矩陣為低階稠密矩陣的線性方程組,可以用直接法進(jìn)行消元,而對(duì)于系數(shù)矩陣為大型稀疏矩陣的情況,直接法就顯得比較繁瑣,而迭代法比較適用。比較常用的迭代法有Jacobi迭代與Gauss-seidel迭代。本文基于兩種方法設(shè)計(jì)算法,并比較他們的優(yōu)劣。二、課程設(shè)計(jì)內(nèi)容給出Jacobi迭代法和Gauss-Seidel迭代法求解線性方程組的算法思想和MAT
2、LAB程序?qū)崿F(xiàn),并對(duì)比分析這兩種算法的優(yōu)劣。三、問(wèn)題的分析(含涉及的理論知識(shí)、算法等)Jacobi迭代法方程組迭代法的基本思想和求根的迭代法思想類(lèi)似,即對(duì)于線性方程組Ax=b(其中),即方程組將系數(shù)矩陣A寫(xiě)為若選取,則,方程組轉(zhuǎn)化為等價(jià)方程組10。Gauss-Seidel迭代法10算法步驟:Jacobi步驟第一步:輸入A,b,x0,e的初始值第二步:求出b的長(zhǎng)度,和A的大??;判斷輸入變量的個(gè)數(shù),使x與x0之間產(chǎn)生差值,設(shè)定,給定k的初始值;第三步:求出上下三角矩陣進(jìn)而求出對(duì)角矩陣的逆;第四步:求出譜半徑,當(dāng)譜半徑小于一時(shí),用while循環(huán),當(dāng)滿(mǎn)足時(shí),k=k+1
3、;。若譜半徑不小于一,則迭代法發(fā)散。Gauss-Seidel步驟:第一步:輸入A,b,x0,e的初始值第二步:求出b的長(zhǎng)度,和A的大?。慌袛噍斎胱兞康膫€(gè)數(shù),使x與x0之間產(chǎn)生差值,設(shè)定,給定k的初始值;10第三步:求出下三角矩陣并求出它的逆;第四步:求出譜半徑,當(dāng)譜半徑小于一時(shí),用while循環(huán),當(dāng)滿(mǎn)足時(shí),k=k+1;。若譜半徑不小于一,則迭代法發(fā)散。一、計(jì)算過(guò)程(含涉及編寫(xiě)的程序、計(jì)算結(jié)果截屏等)Jacobi程序:先建立一個(gè)m文件程序?yàn)椋篺unction[x,k]=Jacobi(A,b,x0,e)n=length(b);ifnargin<4,e=1e-4;e
4、ndifnargin<3,x0=zeros(n,1);endx=x0;x0=x+2*e;k=0;m=size(A);fori=1:mAl(i:m,i)=A(i:m,i);Au(i,i:m)=A(i,i:m);a(i,i)=1;endiAl=a/Al;iAu=a/(Al+Au-A);B=-iAu*(2*A-Au-Al);C=eig(B);p=max(abs(C))ifp<1whilenorm(x0-x,inf)>ek=k+1;x0=x;x=-iAu*(2*A-Au-Al)*x0+iAu*b;disp(x')endelseifp>=1,warning('reach
5、edtheMax-numberofiterations');end在matlab中的舉例運(yùn)行的計(jì)算結(jié)果為:10>>A=[10-1-2;-110-2;-1-10.5];>>b=[7.28.34.2]';>>[x,k]=Jacobi(A,b,[000]',1e-4)p=0.9458x=24.499624.5996106.5983k=198Gauss-Seidel程序:先建立一個(gè)m文件程序?yàn)椋篺unction[x,k]=GaussSeidel(A,b,x0,e)n=length(b);ifnargin<4,e=1e-4;endifnargin<3,x0=zeros(
6、n,1);endx=x0;x0=x+3*e;k=0;m=size(A);fori=1:mAl(i:m,i)=A(i:m,i);a(i,i)=1;endiAl=a/Al;B=-iAl*(A-Al);C=eig(B);p=max(abs(C))ifp<1whilenorm(x0-x,inf)>ek=k+1;x0=x;x=-iAl*(A-Al)*x0+iAl*b;disp(x')endelseifp>=1,warning('reachedtheMax-numberofiterations');end在matlab中的舉例運(yùn)行的計(jì)算結(jié)果為:>>A=[10-1-2;-1
7、10-2;-1-10.5];>>b=[7.28.34.2]';>>[x,k]=GaussSeidel(A,b,[000]',1e-4)10p=0.8947x=24.499824.5998106.5992k=106由于147<198,所以Gauss-Seidel迭代法的收斂速度總是比Jacobi迭代法的收斂速度快。但是當(dāng)初始值變成如下時(shí)有:>>A=[12-2;111;221];>>b=[122]';>>[x,k]=Jacobi(A,b,[000]',1e-4)p=9.1754e-0061221-1-4-552-552x=-552k=4>>A=[12-2;111;
8、221];>>b=[122]';>>[