線性方程組AX=B的數(shù)值計算方法實驗_第1頁
線性方程組AX=B的數(shù)值計算方法實驗_第2頁
線性方程組AX=B的數(shù)值計算方法實驗_第3頁
線性方程組AX=B的數(shù)值計算方法實驗_第4頁
線性方程組AX=B的數(shù)值計算方法實驗_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、線性方程組AX=B的數(shù)值計算方法實驗【摘要】在自然科學(xué)與工程技術(shù)中很多問題的解決常常歸結(jié)為解線性代數(shù)方程組。例如電學(xué)中的網(wǎng)絡(luò)問題,船體數(shù)學(xué)放樣中建立三次樣條函數(shù)問題,用最小二乘法求實驗數(shù)據(jù)的曲線擬合問題,解非線性方程組的問題,用差分法或者有限元法解常微分方程,偏微分方程邊值問題等都導(dǎo)致求解線性方程組。線性代數(shù)方面的計算方法就是研究求解線性方程組的一些數(shù)值解法與研究計算矩陣的特征值及特征向量的數(shù)值方法。關(guān)于線性方程組的數(shù)值解法一般有兩類:直接法和迭代法。關(guān) 鍵 字 高斯消元法、三角分解法、高斯-賽德爾迭代、稀疏矩陣1、 實驗?zāi)康?.掌握高斯消元法、三角分解法、高斯賽德爾迭代發(fā)的編程技巧。2.掌握

2、線性方程組AX=B的數(shù)值計算方法。3.掌握矩陣的基本編程技巧。2、 實驗原理1. 高斯消元法 數(shù)學(xué)上,高斯消元法是線性代數(shù)規(guī)劃中的一個算法,可用來為線性方程組求解。高斯(Gauss)夏鷗按法其實是將一般的線性方程組變換為三角形(上三角)方程組求解問題(消元法),只是步驟規(guī)范,便于編寫計算機(jī)程序。 一般高斯消元法包括兩過程:先把方程組化為同解的上三角形方程組,再按相反順序求解上三角方程組。前者稱為消去或消元過程,后者稱回代過程。消去過程實際上是對增廣矩陣作行初等變換。 對一般的n階方程組,消去過程分n-1步:第一步消去下方元素。第二步消去下方元素,.,第n-1步消去下方元素。即第k步將第k行的適

3、當(dāng)倍數(shù)加于其后各行,或可說是從k+1n行減去第k行的適當(dāng)倍數(shù),使它們第k列元素變?yōu)榱?,而其余列元素減去第k行對應(yīng)列元素的倍數(shù)。 2. 三角分解法三角分解法是將原正方 (square)矩陣分解成一個上三角形矩陣或是排列(permuted) 的上三角形矩陣和一個 下三角形矩陣,這樣的分解法又稱為LU分解法。它的用途主要在簡化一個大矩陣的行列式值的計算過程,求 反矩陣,和求解聯(lián)立方程組。不過要注意這種分解法所得到的上下三角形矩陣并非唯一,還可找到數(shù)個不同 的一對上下三角形矩陣,此兩三角形矩陣相乘也會得到原矩陣。3. 高斯賽德爾迭代 高斯賽德爾迭代(GaussSeidelmethod)是數(shù)值線性代數(shù)中

4、的一個迭代法,可用來求出線性方程組解的近似值。研究雅可比迭代法,我們發(fā)現(xiàn)在逐個求的分量時,當(dāng)計算到時,分量,.,都已經(jīng)求得,而仍用舊分量,.,計算。由于新計算出的分量比舊分量準(zhǔn)確些,因此設(shè)想一旦新分量,.,求出,馬上就用新分量,.,代替雅可比迭代法中,.,來求這就是高斯-賽德爾(Gauss-Seidel)迭代法。 把矩陣A分解成 (6) 其中,分別為的主對角元除外的下三角和上三角部分,于是,方程組(1)便可以寫成 即其中 (7)以為迭代矩陣構(gòu)成的迭代法(公式) (8)稱為高斯塞德爾迭代法(公式),用變量表示的形式為 (9)4. 稀疏矩陣矩陣中非零元素的個數(shù)遠(yuǎn)遠(yuǎn)小于矩陣元素的總數(shù),并且非零元素的

5、分布沒有規(guī)律,則稱該矩陣為稀疏矩陣(sparse matrix);與之相區(qū)別的是,如果非零元素的分布存在規(guī)律(如上三角矩陣、下三角矩陣、對角矩陣),則稱該矩陣為特殊矩陣。常見于進(jìn)行大量數(shù)據(jù)計算。3、 實驗內(nèi)容1. P108 1許多科學(xué)應(yīng)用包含的矩陣帶有很多的零。在實際情況中很重要的三角形線性方程組有如下形式: d1x1+c1x2 =b1 a1x1+d2x2+c2x3 =b2 a2x2+d3x3+c3x4 =b3 · · · · · · · · · · · · aN-2xN-2

6、+dN-1xN-1+cN-1xN =bN-1 aN-1xN-1+dNxN =bN構(gòu)造一個程序求解三角形線性方程組??杉俣ú恍枰凶儞Q,而且可用第k行消去第k+1行的xk。2. P120 1求解線性方程組AX=B,其中 A= B=使用三角分解法求解X。3. P120 2求解線性方程組AX=B,其中A=aijN×N,,aij=ij-1;而且B=bijN×1,b11=N,當(dāng)i時,bij=(iN-1)/(i-1)。對N=3,7,11的情況分別求解。精確解為X=1 1 1 1。對得到的結(jié)果與精確解的差異進(jìn)行解釋。4. P120 3通過重復(fù)求解N各線性方程組 ACJ=EJ,其中J=1,

7、2,N來得到A-1,則 AC1 C2 CN=E1 E2 EN而且 A-1=C1 C2 CN保證對LU分解只計算一次!5.P129 3設(shè)有如下三角線性方程組,而且系數(shù)矩陣具有嚴(yán)格對角優(yōu)勢:d1x1+c1x2 =b1 a1x1+d2x2+c2x3 =b2 a2x2+d3x3+c3x4 =b3 · · · · · · · · · · · · aN-2xN-2+dN-1xN-1+cN-1xN =bN-1 aN-1xN-1+dNxN =bN(i)根據(jù)方程組(1),式(2)和式(3),設(shè)

8、計一個算法來求解上述方程組。算法必須有效地利用系數(shù)矩陣的稀疏性。a11x1+a12x2+···a1jxj+···+a1NxN=b1a21x1+a22x2+···a2jxj+···+a2NxN=b2 · · · · · · · · · · · · · · · ······

9、··············方程組(1)aj1x1+aj2x2+··· ajjxj+···+ajNxN=bj · · · · · · · · · · · · · · ·aN1x1+aN2x2+···aNjxj+·

10、;··+aNNxN=bN=,j=1,2,···,N ···式(2)=,j=1,2,···,N ··式(3)(ii)根據(jù)(i)中設(shè)計的算法構(gòu)建一個C+程序,并求解下列上三角線性方程組(a)4m1+ m2 =3 (b)4m1+ m2 =1 m1+4m2+m3=3 m1+4m2+m3=2 m2+4m3+m4=3 m2+4m3+m4=1m3+4m4+m5=3 m3+4m4+m5=2· · · · · · ·

11、; ·· · · · · · · ·· · · · · · · ·m48+4m49+m50=3 m48+4m49+m50=1m49+m50=3 m49+m50=26. P129 4利用高斯賽德爾迭代法求解下列帶狀方程。 12x1 -2x2+x3 =5 -2x1+12x2-2x3+x4 =5 x1-2x2+12x3-2x4+x5=5 x2-2x3+12x4-2x5+x6=5 ··· x46-2x47

12、+12x48-2x49+x50=5 x47-2x48+12x49-2x50=5 x48-2x49+12x50=54、 實驗結(jié)果及分析1. P108 1 實驗描述:本次實驗使用系數(shù)矩陣的第k行消去第k+1行的xk,消除方法為第k行減去第k-1行乘上系數(shù)ak-1/bk-1,待消至第N行時,求解出xN,并依次會帶求出各xN-1至x1,為了檢驗結(jié)果的正確性使用上面的方程組組(1)及方程組(2)進(jìn)行驗證。方程組(1)的結(jié)果為,方程組(2)的結(jié)果為。算法流程圖:start InputA,B,P,delta,max1N=length(B); k=1Yk=k+1k>max1Nj=1Yj=j+1j>

13、NYNX(1)=(B(1)-A(1,2)*P(2)/A(1,1)j=1YNX(N)=(B(N)-A(N,N-1)*(X(N-1)')/A(N,N)j=NNX(j)=(B(j)-A(j,j-1)*X(j-1)'-A(j,j+1)*P(j+1)/A(j,j)err=abs(norm(X'-P); relerr=err/(norm(X)+eps);P=X'Nerr<delta)|(relerr<deltaYoutputend 實驗結(jié)果:結(jié)果截圖(1) 圖1輸入矩陣=,輸出結(jié)果為X=,與預(yù)期結(jié)果一致(2) 圖2輸入矩陣=,輸出結(jié)果為X=,與預(yù)期結(jié)果一致實驗結(jié)

14、論: 通過對系數(shù)矩陣的增廣矩陣進(jìn)行高斯消元和回帶容易得到線性方程組的解,同時,利用這種方法可以求得矩陣的逆。2.P120 1 實驗描述:本次實驗的解法為使用LU矩陣求解X,該解法的內(nèi)容為將系數(shù)矩陣A分解為一上三角矩陣及一下三角矩陣,且有A=LU,之后由LY=B,UX=Y分別求解出Y,X。 實驗結(jié)果: 圖3輸入矩陣A=,B=,輸出結(jié)果為X=實驗結(jié)論:將X代入AX后結(jié)果與矩陣B一致,運(yùn)行結(jié)果正確無誤,該程序正確,且有X=3. P120 2 實驗描述:(1)本次實驗仍使用三角矩陣求解矩陣X的值,求解方法與實驗二大致相同;(2)矩陣A編寫函數(shù)buildA完成,buildA的輸入為矩陣A的階數(shù)N,輸出結(jié)

15、果為矩陣A的地址,對于矩陣A有A=aijN×N,,aij=ij-1;(3)矩陣B編寫函數(shù)buildB完成,buildB的輸入為矩陣B的階數(shù)N,輸出結(jié)果為矩陣B的地址,對于矩陣B有B=bijN×1,b11=N,當(dāng)i時,bij=(iN-1)/(i-1)。 實驗結(jié)果:(1) N=3時 圖4(2) N=7時 圖5(3) N=11時 圖6 實驗結(jié)論:由圖4,圖5,圖6與結(jié)果對比可知,程序運(yùn)行結(jié)果與預(yù)期結(jié)果相一致,程序正確無誤。4. P120 3 實驗描述:(1)本次實驗的目的為求解A的逆矩陣A-1,求解方法為利用AC1 C2 CN=E1 E2 EN ,A-1=C1 C2 CN求解,故

16、可將之分解為對于ACk=Ek,k=1,2,3,···,N中對于Ck的求解,之后另A-1=C1 C2 CN;(2)由于A-1=C1 C2 CN,AC1 C2 CN=E1 E2 EN,固有E1 E2 EN=I,故Ek=a1j,j=1,2,···,N,其中a1k=1,other=0;(3)對于ACk=Ek,k=1,2,3,···,N的求解方法使用LU三角分解法求解,用此方法求解出各個Ek對應(yīng)的Ck,最后以此構(gòu)成A-1;(4)求出LU后,應(yīng)判斷矩陣對角線上是否存在為0的元素,若存在,則A不存在逆矩陣;若不存在,則

17、可求解逆矩陣A-1;(5)上述方法中的LU分解只需要進(jìn)行一次;(6)對于程序的正確性使用矩陣及矩陣進(jìn)行驗證,其中,矩陣不存在逆矩陣,矩陣的逆矩陣為實驗結(jié)果:(1)輸入為矩陣 圖7(2) 輸入矩陣為 圖8 實驗結(jié)論: 如果系數(shù)矩陣能分解為LU的形式,其中L為下三角矩陣,U為上三角矩陣,通過對系數(shù)矩陣的分解再求解可應(yīng)用簡單的迭代進(jìn)行求解x。5.P129 3 實驗描述:(1)本實驗的目的為使用高斯賽德爾迭代求解帶狀方程組;(2)由于實驗中的帶狀方程有極強(qiáng)的稀疏性和相似性,故編程時應(yīng)考慮該矩陣的以上特點以減少運(yùn)算量及運(yùn)行時占用的內(nèi)存;(3)為了減少程序的運(yùn)行次數(shù),故選擇式(3)作為運(yùn)行的程序;(4)應(yīng)

18、無明確的結(jié)束標(biāo)志,故選擇delta=<1e-5作為結(jié)束迭代的標(biāo)志,此時再進(jìn)行一輪迭代后輸出結(jié)果。實驗結(jié)果:a)4m1+ m2 =3 m1+4m2+m3=3 m2+4m3+m4=3m3+4m4+m5=3· · · ·· · · ·· · · ·m48+4m49+m50=3 m49+m50=3 圖9(b)4m1+ m2 =1 m1+4m2+m3=2 m2+4m3+m4=1m3+4m4+m5=2· · · ·· ·

19、· ·· · · ·m48+4m49+m50=1m49+m50=2 圖10 實驗結(jié)論:求解帶狀線性方程組的解可使用高斯-賽德爾迭代法。6. P129 4 實驗描述:(1)本實驗的目的為使用高斯賽德爾迭代求解帶狀方程組;(2)由于實驗中的帶狀方程有極強(qiáng)的稀疏性和相似性,故編程時應(yīng)考慮該矩陣的以上特點以減少運(yùn)算量及運(yùn)行時占用的內(nèi)存;(3)為了減少程序的運(yùn)行次數(shù),故選擇式(3)作為運(yùn)行的程序;(4)應(yīng)無明確的結(jié)束標(biāo)志,故選擇delta=<1e-5作為結(jié)束迭代的標(biāo)志,此時再進(jìn)行一輪迭代后輸出結(jié)果。算法流程圖:startN,N=size(

20、A);X=zeros(N,1);C=zeros(1,N+1);Aug=A B; p=1N=length(B); k=1k=k+1Yk>max1Nj=1j=j+1Yj>NNYj=1X(1)=(B(1)-A(1,2)*P(2)/A(1,1)NYj=2X(2)=(B(2)-A(2,1)*X(1)'-A(2,3:4)*P(3:4)/A(2,2)NYj=N-1X(N-1)=(B(N-1)-A(N-1,N-3:N-2)*X(N-3:N-2)' -A(N-1,N)*P(N)/A(N-1,N-1)NYj=NX(N)=(B(N)-A(N,N-1)*(X(N-1)')/A(N,

21、N)X(j)=(B(j)-A(j,j-1)*X(j-1)'-A(j,j+1)*P(j+1)/A(j,j)err=abs(norm(X'-P); relerr=err/(norm(X)+eps);P=X'Nerr<delta)|(relerr<deltaYoutputend 實驗結(jié)果:表1.通過高斯賽德爾迭代得到的x的解1100.463795523816550.53728460519996560.50902292460133060.49998535124813080.50008872389013570.5000153188460520.499994793266

22、97530.499997856913467511200.50000010842519920.50000020157668730.5000000226109450.49999998623857220.4999999958739790.50000000053029380.50000000043903880.50000000002393920.4999999999660160.499999999992557321300.50000000000174290.50000000000091690.50.49999999999992050.50.50.4999999999999212 0.50.500000

23、00000091760.500000000001744531400.4999999999925550.4999999999660170.5000000000239390.50000000043903910.50000000053029360.4999999958739790.49999998623857230.50000002261094510.50000020157668730.50000010842519941500.49999785691346750.49999479326697530.50008872389013570.49998535124813080.509022924601330

24、60.53728460519996570.4637955238165501 圖11實驗結(jié)論:X的值如上圖所示。附件(代碼):1. P108 1#include<iostream>#include<stdlib.h>using namespace std;/此函數(shù)用于計算矩陣的解float *uptrbk(float *A,int N)float c;float *x=new floatN-1; /生成一維數(shù)組xNint n;for(n=1;n<N;n+) /進(jìn)行高斯消元法計算xk,k=1,2,3···,Nc=Ann-1/An-1n-1

25、;Ann-1=0;Ann=Ann-c*An-1n;AnN=AnN-c*An-1N;xN-1=AN-1N/AN-1N-1;for(n=N-2;n>=0;n-)AnN=AnN-xn+1*Ann+1;xn=AnN/Ann;return x; /帶回計算結(jié)果數(shù)組xN的地址x/實驗的main函數(shù)int main()int N;cout<<"請輸入矩陣的階數(shù):" /輸入矩陣的階數(shù)用于生成動態(tài)矩陣cin>>N;int i,k;float *uptrbk(float*,int);float *x;float *A=new float*N-1; /生成動態(tài)增廣矩

26、陣for(i=0;i<N;i+)Ai=new floatN;cout<<"請輸入增廣矩陣的值"<<endl; /輸入增廣矩陣的值for(i=0;i<N;i+)for(k=0;k<=N;k+)cin>>Aik;x=uptrbk(A,N); /計算矩陣的解列向量Xcout<<"x的值為:"<<endl;for(i=0;i<N;i+) /輸出矩陣的解的列向量Xcout<<"x"<<i+1<<"="<

27、;<xi<<endl;system("pause");return 0;2. P120 1#include<iostream>#include<stdlib.h>using namespace std;/實驗的main函數(shù)int main()int N,i,k;float *x;cout<<"請輸入矩陣的階數(shù):" /輸入矩陣的階數(shù),用于生成動態(tài)矩陣cin>>N;N=N-1;float *B=new float N;float *lufact(float*,float*,int);float

28、 *A=new float*N; /生成動態(tài)系數(shù)矩陣Afor(i=0;i<=N;i+)Ai=new floatN;cout<<"請輸入矩陣A的值:"<<endl; /輸入系數(shù)矩?陣的值for(i=0;i<=N;i+)for(k=0;k<=N;k+)cin>>Aik;cout<<"請輸入矩陣B的值:"<<endl; /生成動態(tài)矩陣Bfor(i=0;i<=N;i+)cin>>Bi; /輸入矩陣B的值x=lufact(A,B,N);cout<<"

29、;x的值為a:"<<endl;for(i=0;i<=N;i+) /輸出AX=B解的列向量Xcout<<"x"<<i+1<<"="<<xi<<endl;system("pause");return 0;/使用LU法求解X的函數(shù),A為系數(shù)矩陣,B為計算結(jié)果,N為矩陣階數(shù)float *lufact(float *A,float *B,int N)int i,j,k;float c;float *U; /生成二維數(shù)組Ufloat *x=new float

30、N; /生產(chǎn)保存結(jié)果的列矩陣Xfloat *y=new float N; /生產(chǎn)用于保存中間值的列矩陣YU=A;for(i=0;i<=N;i+) /將A轉(zhuǎn)換為LUfor(j=i+1;j<=N;j+)c=Uji/Uii;for(k=i;k<=N;k+)Ujk=Ujk-c*Uik;Uji=c;for(i=0;i<=N;i+) /計算中間矩陣Y的值for(j=0;j<i;j+)Bi=Bi-yj*Uij;yi=Bi;for(i=N;i>=0;i-) /計算解X的值for(j=N;j>i;j-)yi=yi-xj*Uij;xi=yi/Uii;return x;3.

31、 P120 2#include<iostream>#include<cmath>#include<stdlib.h>using namespace std;/實驗的main函數(shù)int main()int N,i;double *x;double *A;double *B;double *buildA(int);double *buildB(int);double *lufact(double*,double*,int);cout<<"請輸入矩陣的階數(shù):" /輸入矩陣的階數(shù),用于生成動態(tài)矩陣cin>>N;N=N-1;

32、 A=buildA(N);B=buildB(N);x=lufact(A,B,N);cout<<"x的值為:"<<endl;for(i=0;i<=N;i+) /輸出AX=B解的列矩陣Xcout<<"x"<<i+1<<"="<<xi<<endl;system("pause");return 0;/使用LU法求解X的函數(shù),A為系數(shù)矩陣,B為計算結(jié)果,N為矩陣階數(shù)double *lufact(double *A,double *B,i

33、nt N)int i,j,k;double c;double *U; /生成二維數(shù)組U,用于儲存L&U矩陣double *x=new double N; /生成保存結(jié)果的列矩陣Xdouble *y=new double N; /生成用于保存中間值的列矩陣YU=A;for(i=0;i<=N;i+) /將A轉(zhuǎn)換為LU矩陣for(j=i+1;j<=N;j+)c=Uji/Uii;for(k=i;k<=N;k+)Ujk=Ujk-c*Uik;Uji=c;for(i=0;i<=N;i+) /計算中間矩陣Y的值for(j=0;j<i;j+)Bi=Bi-yj*Uij;yi=

34、Bi;for(i=N;i>=0;i-) /計算解X的值for(j=N;j>i;j-)yi=yi-xj*Uij;xi=yi/Uii;return x;/用于產(chǎn)生階數(shù)為N的矩陣A的函數(shù)double *buildA(int N)int i,j;double *A=new double*N; /生成二維動態(tài)數(shù)組AN-1N-1for(i=0;i<=N;i+)Ai=new double N;for(i=0;i<=N;i+) /產(chǎn)生矩陣A的元素并存儲到AN-1N-1中for(j=0;j<=N;j+)Aij=pow(double(i+1),j);return A;/用于產(chǎn)生1*N

35、的列矩陣Bdouble *buildB(int N)int i;double *B=new double N; /生成元素個數(shù)為N的動態(tài)矩陣BN=N+1;B0=N; /產(chǎn)生矩陣的元素并儲存到BN-1中for(i=1;i<=N;i+)Bi=(pow(double(i+1),N)-1)/i;return B;4. P120 3#include<iostream>#include<iomanip>#include<stdlib.h>using namespace std;/實驗的main函數(shù)int main()int N,i,j;float *LU;floa

36、t *luchange(float*,int*,int);float *LUsave(float*,int,int,int);cout<<"請輸入矩陣的階數(shù):" /輸入矩陣的階數(shù)N,用于生成動態(tài)矩陣cin>>N;N=N-1;float *A=new float *N;int *B=new int N;float *invA=new float *N; /生成用于存放矩陣A的二維數(shù)組for(i=0;i<=N;i+)Ai=new float N;cout<<"請輸入需要求逆矩陣的矩陣A:"<<endl;

37、/輸入矩陣A的值for(i=0;i<=N;i+)for(j=0;j<=N;j+)cin>>Aij;for(i=0;i<=N;i+) Bi=i;LU=luchange(A,B,N); /將A轉(zhuǎn)換為LU矩陣for(i=0;i<=N;i+) /判斷A是否存在逆矩陣if(LUii=0) cout<<"矩陣A不存在逆矩陣!"<<endl;system("pause");return 0;for(i=0;i<=N;i+) /若存在求解逆矩陣invAi=LUsave(LU,Bi,i,N);cout<

38、;<"A的逆矩陣的值為a:"<<endl; /輸出矩陣A的逆矩陣for(i=0;i<=N;i+)for(j=0;j<=N;j+)cout<<std:left<<setw(15)<<invAji;cout<<endl;system("pause");return 0;/求解LU矩陣的函數(shù),A為系數(shù)矩陣,N為矩陣階數(shù)float *luchange(float *A,int *B,int N)int i,j,k,a;float c;float *b=new float N;float

39、 *LU; /生成二維數(shù)組LU,用于存放L矩陣及U矩陣LU=A;for(i=0;i<=N;i+) /將A轉(zhuǎn)換為LUk=i+1;while(LUii=0&&k<=N)b=LUi;LUi=LUk;LUk=b;a=Bi;Bi=Bk;Bk=a;k+;for(j=i+1;j<=N;j+)c=LUji/LUii;for(k=i;k<=N;k+)LUjk=LUjk-c*LUik;LUji=c;return LU; /返回LU矩陣的地址/此函數(shù)用于求解對應(yīng)B的解float *LUsave(float *LU,int n,int k,int N)int i,j;float

40、 *y=new floatN;float *x=new floatN;float *B=new floatN;for(i=0;i<=N;i+)if(i=n)Bi=1;elseBi=0;for(i=0;i<=N;i+) /計算中間矩陣Y的值for(j=0;j<i;j+)Bi=Bi-yj*LUij;yi=Bi;for(i=N;i>=0;i-) /計算解X的值for(j=N;j>i;j-)yi=yi-xj*LUij;xi=yi/LUii;return x;5.P129 3#include<iostream>#include<stdlib.h>us

41、ing namespace std;/定義用于儲存數(shù)組的類struct typeAdouble *A;int b;/實驗的主函數(shù)int main()int N,n1,i;double *save(typeA,typeA,int,int);cout<<"請輸入矩陣的階數(shù)N:" /輸入矩陣的階數(shù)cin>>N;double *X=new double N-1; /生成用于存放解的數(shù)組XtypeA A,B;cout<<"請輸入矩陣的每行最大元素數(shù):" /存儲帶狀方程組的系數(shù)cin>>n1; A.A=new doub

42、le n1;cout<<"請輸入首行元素的個數(shù):"cin>>A.b;cout<<"請輸入系數(shù)元素的序列:"for(i=0;i<n1;i+)cin>>A.Ai;cout<<"請輸入的循環(huán)個數(shù)及序列:" /存儲帶狀方程組的值cin>>B.b;B.A=new doubleB.b;for(i=0;i<B.b;i+)cin>>B.Ai;X=save(A,B,N,n1); /求解方程組cout<<"方程組的解為:"<

43、;<endl;for(i=0;i<N;i+) /輸出方程的解cout<<"x"<<i+1<<"="<<Xi<<endl;system("pause");return 0;/用于計算方程組的解double *save(typeA A,typeA B,int N,int n1)int i,j,k,m,deltan;double b;deltan=int(n1-A.b);double *X=new double N-1; /生成用于存儲方程組解的數(shù)組Xfor(i=0;i

44、<N;i+) /初始化數(shù)組XXi=0;double x;double delta=1e-6; /定義計算精度double deltax=1;bool run=true; /定于用于判定是否結(jié)束計算的變量 while(run)if(deltax<delta) /當(dāng)滿足精度時時run置假,為結(jié)束計算做準(zhǔn)備run=false;k=0;x=XN-1;for(i=0;i<N;i+) /使用高斯賽德爾迭代計算方程組的解Xb=B.Ak;m=0;for(j=i-deltan;j<i;j+)if(j>=0)b=b-Xj*A.Am;m+;m+;for(j=i+1;j<=i+deltan;j+)if

溫馨提示

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

評論

0/150

提交評論