資源描述:
《Gauss-Seidel迭代法求解線性方程組.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、.一.問題描述用Gauss-Seidel迭代法求解線性方程組由Jacobi迭代法中,每一次的迭代只用到前一次的迭代值。使用了兩倍的存儲(chǔ)空間,浪費(fèi)了存儲(chǔ)空間。若每一次迭代充分利用當(dāng)前最新的迭代值,即在計(jì)算第個(gè)分量時(shí),用最新分量,代替舊分量,,可以起到節(jié)省存儲(chǔ)空間的作用。這樣就得到所謂解方程組的Gauss-Seidel迭代法。二.算法設(shè)計(jì)將分解成,則等價(jià)于則Gauss-Seidel迭代過程故若設(shè)存在,則令則Gauss-Seidel迭代公式的矩陣形式為其迭代格式為(初始向量),或者三.程序框圖范文..開始讀入數(shù)據(jù),初始向量,增廣矩
2、陣k=N?輸出迭代失敗標(biāo)志結(jié)束輸出一.結(jié)果顯示TestBench利用Gauss-Seidel迭代法求解下列方程組,其中取。運(yùn)行程序依次輸入:1.方陣維數(shù)范文..1.增廣矩陣系數(shù)2.初始向量得到:迭代12次后算出x[1]=-4.0x[2]=3.0x[3]=2.0一.程序#include范文..#include#include#include#defineMAX_n100#definePRECISION0.0000001#defineMAX_Number10
3、00voidVectorInput(floatx[],intn)//輸入初始向量{inti;for(i=1;i<=n;++i){printf("x[%d]=",i);scanf("%f",&x[i]);}}voidMatrixInput(floatA[][MAX_n],intm,intn)//輸入增廣矩陣{inti,j;printf("輸入系數(shù)矩陣:");for(i=1;i<=m;++i){printf("增廣矩陣行數(shù)%d:",i);for(j=1;j<=n;++j)scanf("%f",&A[i][j]);}}vo
4、idVectorOutput(floatx[],intn)//輸出向量{inti;for(i=1;i<=n;++i)printf("x[%d]=%f",i,x[i]);}intIsSatisfyPricision(floatx1[],floatx2[],intn)//判斷是否在規(guī)定精度內(nèi){inti;for(i=1;i<=n;++i)范文..if(fabs(x1[i]-x2[i])>PRECISION)return1;return0;}intJacobi_(floatA[][MAX_n],floatx[],intn)//具
5、體計(jì)算{floatx_former[MAX_n];inti,j,k;printf("初始向量x0:");VectorInput(x,n);k=0;do{for(i=1;i<=n;++i){printf("x[%d]=%f",i,x[i]);x_former[i]=x[i];}printf("");for(i=1;i<=n;++i){x[i]=A[i][n+1];for(j=1;j<=n;++j)if(j!=i)x[i]-=A[i][j]*x[j];if(fabs(A[i][i])>PRECISION)x[i]
6、/=A[i][i];elsereturn1;}++k;}while(IsSatisfyPricision(x,x_former,n)&&k=MAX_Number)return1;else{printf("Gauss-Seidel迭代次數(shù)為%d次",k);return0;}}intmain()//主函數(shù){intn;floatA[MAX_n][MAX_n],x[MAX_n];范文..printf("方陣維數(shù)n=");scanf("%d",&n);if(n>=MAX_n-1){print
7、f("