資源描述:
《《數(shù)值分析》期中報告》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、《數(shù)値分析》期中報告Z44160179袁惠茹一、題目:利用Gauss-Seidel法,以初始値兀=[0,0,0]7,求解聯(lián)立方程組4.63兀]一1.21兀2+3.22兀3=2.22,—3.07+5.48%2+2.11心=—3.17,1.26州+3.11兀2+4.57心=5」1。並利用鬆馳法(over-relaxiation),求取最佳Zw值。二、相關槪念:(―)Gauss-SeidelIteration:Proceedeachx-valueusingalwaysthemostrecentapprox
2、imationsofothervariables.TherateofconvergenceforGauss-SeidelismorerapidthanthatforJacobi.(Z2)Over-relaxing:ThestandardrelationshipforGauss-SeideliterationforthesetofequationsAx=b,forvariablexi9canbewrittenasn-zj=i+aUXJ(k)wherethesuperscript伙+1)indicat
3、esthe(k+1)iterate.Analgebraicallyequivalentformisbecausex.k}isbothaddedtoandsubtractedfromtherightside.RelaxationcanbeappliedtogetwhichiscalledowMelaxation(過度鬆弛法)if14、數(shù)器記錄迭代的次數(shù),初始化爲0,4.63-1.213.22ii.定義一維數(shù)組A⑶⑶來表示矩陣—-3.075.482.111.263」14.57「2.22iii.並定義數(shù)組b[3]來表示矩陣-3.175.11iv.用x[3]來存放xl,x2,x3的值,初值均為0,v.以xsave[3]來存放三個變量的臨時取值,vi.定義變量TOL表示允許的最大誤并,並賦初值1.0e-4,vii.定義errmax表示誤差值。viii.定義文件指針fPtr,指向用來存放輸出的文件。b)運算過程:建立while循環(huán),每次循
5、環(huán)使值icount值加1表示完成一次迭代,同時將xl,x2,x3的hna,.舊值分別存放到xsave[0],xsave[1],xsave⑵中,並以公式無-工亠兀i=1,2,3計算5;=1anxl,x2,x3的值,將計算得出的值寫入文件,並計算誤差errmax,一直進行上述循環(huán)直至誤差值小於允許的最大誤差TOL時,跳出循環(huán)並關閉文件。c)運算結果:代碼運行結束後可在創(chuàng)建的output.dat文件小查看疊代次數(shù)及每一次疊代過程小的三個未知數(shù)的值。(二)過度鬆馳法:a)變量定義:除了上面所定義的變量再新增
6、xx[3]和wob)運算過程:i.建立血循環(huán),循環(huán)變量爲w,取値爲0.8到1.7,每循環(huán)一次w値加0.1,ii.先將icount值賦為0,用來完成對於每一個w值所進行的迭代次數(shù)的統(tǒng)計,iii.在for循環(huán)中建立while循環(huán),並以xx來代替x,iv.將xx的舊値存放在xsave屮,並用公式,1,2,3來計算xl,x2,x3的值,v.計算誤羌errmax,Vi.將當前w值,針對該W正在進行的迭代次數(shù)icount和本次迭代中的三個x值輸出,vii.一直進行該while循環(huán)直到誤差值errmax小於允許的
7、最大誤差TOL時將此時的w和對應的最終icount寫入文件並跳出循環(huán)。c)運算結果:運算結束後可在牛成的文件output.dat中查看對於每一個w値的迭代次數(shù)icount並找出可以令迭代次數(shù)最小的w値作爲最佳w值。四、代碼:(-)求解聯(lián)立方程組:#include#includeintmain(){inticount=0;floatA⑶⑶二{4.63,?1.21,3.22,-3.07,5.48,2.11,1.26,3.11,4.57};floatb[3]={2.22,
8、-3.17,5.11};floatx[3]={0.0,0.0,0.0},xsave⑶;floatTOL=1.Oe-4,errmax;FILE*fPtr;tPtr=fopen("output.dat","w");fprintf(fPtr,”%5s%8s%8s%8s”,HIter.H,”xl”,”x2”,”x3”);fprintf(fPtr,"%4d%&4f%&4f%8.4f",icount,x[0],x[l],x[2]);while(1){icount++;xs