版權(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è)最正確的松弛因
最新文檔
- IT運(yùn)維服務(wù)規(guī)范
- 辦公室6S管理規(guī)定
- 辦公設(shè)備管理制度
- 汽車生產(chǎn)線零部件運(yùn)輸
- 攝影棚裝修合同書
- 高端制造水泥運(yùn)輸合同樣本
- 社區(qū)餐館裝修改造合同
- 網(wǎng)絡(luò)直播居間協(xié)議補(bǔ)充條款
- 機(jī)械裝備長(zhǎng)途運(yùn)輸合同
- 教育機(jī)構(gòu)裝飾監(jiān)理協(xié)議樣本
- 2024年低壓電工考試題庫(經(jīng)典題庫)
- 2024年上海綠洲投資控股集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 2024屆高考英語完形填空高頻詞 清單( 含音標(biāo))
- 院感培訓(xùn)心得匯報(bào)
- 寶來汽車使用說明書
- 一汽-大眾供應(yīng)商管理流程介紹.sbx
- 2024春期國開電大??啤墩螌W(xué)原理》在線形考(形考任務(wù)一至四)試題及答案
- 海上救助與搜救
- 公務(wù)員三季度個(gè)人工作小結(jié)【6篇】
- 招投標(biāo)代理掛靠協(xié)議書
- 消防安全評(píng)估消防安全評(píng)估方案
評(píng)論
0/150
提交評(píng)論