實(shí)驗(yàn)五-解線性方程組的迭代法報(bào)告_第1頁
實(shí)驗(yàn)五-解線性方程組的迭代法報(bào)告_第2頁
實(shí)驗(yàn)五-解線性方程組的迭代法報(bào)告_第3頁
實(shí)驗(yàn)五-解線性方程組的迭代法報(bào)告_第4頁
實(shí)驗(yàn)五-解線性方程組的迭代法報(bào)告_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)五解線性方程組的迭代法一、問題提出對(duì)實(shí)驗(yàn)四所列目的和意義的線性方程組,試分別選用Jacobi迭代法,Gauss-Seidel迭代法和SOR方法計(jì)算其解。二、要求1、體會(huì)迭代法求解線性方程組,并能與消去法做以比擬;2、分別對(duì)不同精度要求,如由迭代次數(shù)體會(huì)該迭代法的收斂快慢;3、對(duì)方程組2,3使用SOR方法時(shí),選取松弛因子ω=0.8,0.9,1,1.1,1.2等,試看對(duì)算法收斂性的影響,并能找出你所選用的松弛因子的最正確者;4、給出各種算法的設(shè)計(jì)程序和計(jì)算結(jié)果。三、目的和意義1、通過上機(jī)計(jì)算體會(huì)迭代法求解線性方程組的特點(diǎn),并能和消去法比擬;2、運(yùn)用所學(xué)的迭代法算法,解決各類線性方程組,編出算法程序;3、體會(huì)上機(jī)計(jì)算時(shí),終止步驟或k>〔給予的迭代次數(shù)〕,對(duì)迭代法斂散性的意義;體會(huì)初始解,松弛因子的選取,對(duì)計(jì)算結(jié)果的影響。四、實(shí)驗(yàn)學(xué)時(shí):2學(xué)時(shí)五、實(shí)驗(yàn)步驟:1.進(jìn)入C或matlab開發(fā)環(huán)境;2.根據(jù)實(shí)驗(yàn)內(nèi)容和要求編寫程序;3.調(diào)試程序;4.運(yùn)行程序;5.撰寫報(bào)告,討論分析實(shí)驗(yàn)結(jié)果.解:J迭代算法:程序設(shè)計(jì)流程圖:源程序代碼:#include<stdlib.h>#include<stdio.h>#include<math.h>voidmain(){floata[50][51],x1[50],x2[50],temp=0,fnum=0;inti,j,m,n,e,bk=0;printf("使用Jacobi迭代法求解方程組:\n");printf("輸入方程組的元:\nn=");scanf("%d",&n);for(i=1;i<n+1;i++)x1[i]=0;printf("輸入方程組的系數(shù)矩陣:\n");for(i=1;i<n+1;i++){j=1;while(j<n+1){scanf("%f",&a[i][j]);j++;}}printf("輸入方程組的常數(shù)項(xiàng):\n");for(i=1;i<n+1;i++){scanf("%f",&a[i][n+1]);}printf("\n"); printf("請(qǐng)輸入迭代次數(shù):\n"); scanf("%d",&m); printf("請(qǐng)輸入迭代精度:\n"); scanf("%d",&e);while(m!=0){for(i=1;i<n+1;i++){for(j=1;j<n+1;j++){if(j!=i)temp=a[i][j]*x1[j]+temp;}x2[i]=(a[i][n+1]-temp)/a[i][i];temp=0;}for(i=1;i<n+1;i++){fnum=float(fabs(x1[i]-x2[i]));if(fnum>temp)temp=fnum;}if(temp<=pow(10,-4))bk=1;for(i=1;i<n+1;i++)x1[i]=x2[i]; m--;}printf("原方程組的解為:\n");for(i=1;i<n+1;i++){if((x1[i]-x2[i])<=e||(x2[i]-x1[i])<=e) { printf("x%d=%7.4f",i,x1[i]); }}}運(yùn)行結(jié)果:GS迭代算法:#include<iostream.h>#include<math.h>#include<stdio.h>constintm=11;voidmain(){intchoice=1;while(choice==1){doublea[m][m],b[m],e,x[m],y[m],w,se,max;intn,i,j,N,k;cout<<"Gauss-Seidol迭代法"<<endl; cout<<"請(qǐng)輸入方程的個(gè)數(shù):";cin>>n;for(i=1;i<=n;i++){cout<<"請(qǐng)輸入第"<<i<<"個(gè)方程的各項(xiàng)系數(shù):";for(j=1;j<=n;j++)cin>>a[i][j];}cout<<"請(qǐng)輸入各個(gè)方程等號(hào)右邊的常數(shù)項(xiàng):\n";for(i=1;i<=n;i++){cin>>b[i];}cout<<"請(qǐng)輸入最大迭代次數(shù):";cin>>N;cout<<"請(qǐng)輸入最大偏差:";cin>>e;for(i=1;i<=n;i++){x[i]=0;y[i]=x[i];}k=0;while(k!=N){k++;for(i=1;i<=n;i++){w=0;for(j=1;j<=n;j++){if(j!=i)w=w+a[i][j]*y[j];}y[i]=(b[i]-w)/double(a[i][i]);}max=fabs(x[1]-y[1]);for(i=1;i<=n;i++){se=fabs(x[i]-y[i]);if(se>max)max=se;}if(max<e){cout<<endl;for(i=1;i<=n;i++)cout<<"x"<<i<<"="<<y[i]<<endl;break;}for(i=1;i<=n;i++){x[i]=y[i];}}if(k==N)cout<<"迭代失敗?。?<<endl; choice=0;}}SOR方法:#include<stdio.h>#include<math.h>#include<stdlib.h>/**********定義全局變量**********/float**a;/*存放A矩陣*/float*b;/*存放b矩陣*/float*x;/*存放x矩陣*/floatp;/*精確度*/floatw;/*松弛因子*/intn;/*未知數(shù)個(gè)數(shù)*/intc;/*最大迭代次數(shù)*/intk=1;/*實(shí)際迭代次數(shù)*//**********SOR迭代法**********/voidSOR(floatxk[]){inti,j;floatt=0.0;floattt=0.0;float*xl;xl=(float*)malloc(sizeof(float)*(n+1));for(i=1;i<n+1;i++){t=0.0;tt=0.0;for(j=1;j<i;j++)t=t+a[i][j]*xl[j];for(j=i;j<n+1;j++)tt=tt+a[i][j]*xk[j];xl[i]=xk[i]+w*(b[i]-t-tt)/a[i][i];}t=0.0;for(i=1;i<n+1;i++){tt=fabs(xl[i]-xk[i]);tt=tt*tt;t+=tt;}t=sqrt(t);for(i=1;i<n+1;i++)xk[i]=xl[i];if(k+1>c){if(t<=p)printf("\nReachthegivenprecision!\n");elseprintf("\noverthemaximalcount!\n");printf("\nCountnumberis%d\n",k);}elseif(t>p){k++;SOR(xk);}else{printf("\nReachthegivenprecision!\n");printf("\nCountnumberis%d\n",k);}}/**********程序*****開始**********/voidmain(){inti,j;printf("SOR方法\n");printf("請(qǐng)輸入方程個(gè)數(shù):\n");scanf("%d",&n);a=(float**)malloc(sizeof(float)*(n+1));for(i=0;i<n+1;i++)a[i]=(float*)malloc(sizeof(float)*(n+1));printf("請(qǐng)輸入三對(duì)角矩陣:\n");for(i=1;i<n+1;i++)for(j=1;j<n+1;j++)scanf("%f",&a[i][j]);for(i=1;i<n+1;i++)for(j=1;j<n;j++)b=(float*)malloc(sizeof(float)*(n+1));printf("請(qǐng)輸入等號(hào)右邊的值:\n");for(i=1;i<n+1;i++)scanf("%f",&b[i]);x=(float*)malloc(sizeof(float)*(n+1));printf("請(qǐng)輸入初始的x:");for(i=1;i<n+1;i++)scanf("%f",&x[i]);printf("請(qǐng)輸入精確度:");scanf("%f",&p);printf("請(qǐng)輸入迭代次數(shù):");scanf("%d",&c);printf("請(qǐng)輸入w(0<w<2):\n");scanf("%f",&w);SOR(x);printf("方程的結(jié)果為:\n");for(i=1;i<n+1;i++)printf("x[%d]=%f\n",i,x[i]);}程序運(yùn)行結(jié)果討論和分析:①迭代法具有需要計(jì)算機(jī)的存貯單元較少,程序設(shè)計(jì)簡(jiǎn)單,原始系數(shù)矩陣在計(jì)算過程中始終不變等優(yōu)點(diǎn).②迭代法在收斂性及收斂速度等方面存在問題.[注:A必須滿足一定的條件下才能運(yùn)用以下三種迭代法之一.在Jacobi中不用產(chǎn)生的新數(shù)據(jù)信息,每次都要計(jì)算一次矩陣與向量的乘法,而在Gauss利用新產(chǎn)生的信息數(shù)據(jù)來計(jì)算矩陣與向量的乘法.在SOR中必須選擇一個(gè)最正確的松弛因

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論