北航数值分析大作业二.pdf
《北航数值分析大作业二.pdf》由会员分享,可在线阅读,更多相关《北航数值分析大作业二.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数值分析 B大作业二SY1103120朱舜杰一 算法设计方案:1.矩阵 A 的存储首先输入需要求解的矩阵 A。即为下述程序中的 void assignment()子程序。2.将矩阵 A 拟上三角化使用矩阵的拟上三角化的算法把矩阵 ARnn化为拟上三角矩阵A(n1),由子程序 void Hessen()完成。矩阵 A 的拟上三角化的算法如下:(r)记A(1)A,并记A(r)aijnn。对于 r=1,2,n-2 执行(a)若ai(,rr)(i r 2,r 3,(b)计算dr)hr cr2crar(r1,r(e);否则转(b)。,n)全为零,则令A(r1)A(r),转ir1(an(r)2ir)(r)
2、,cr sign(ar(r1,r)dr(若ar1,r 0,则取cr dr),(c)令ur(0,)(r),0,ar(r1,rcr,ar2,r,(r)Tn,an,r)R(d)计算pr A(r)Turhr,qr A(r)urhr,tr prTurhr,r qrtrur,TTA(r1)A(r)rururpr(e)继续3.对拟上三角化后的矩阵进行 QR 分解为了直观的了解普通的 QR 分解过程及结果,下述程序中用 void QRfenjie()子程序来对拟上三角化过后的 A 阵进行 QR 分解,并输出 Q 阵 R 阵 RQ 阵。其中 QRfenjie()既用于基本的 QR 分解和输出 Q 阵、R 阵、R
3、Q 阵又用于带双步位移的 QR 方法。m 为维数,m10。n=0 时,子程序进行基本 QR 分解;n0 时,子程序进行带双步位移的 QR 分解。4.对拟上三角化后的矩阵进行带双步位移的QR 分解。子程序 void QRfa()实现对拟上三角化后的 A 阵进行带双步位移的 QR 分解,得出特征值并输出,并用子程序 void xiangliang()对其中的实数特征值进行求解,得出对应的特征向量。带双步位移的 QR 方法具体算法如下:(1)使用矩阵的拟上三角化的算法把矩阵 ARnn化为拟上三角矩阵A(n1);给定精度水平0和迭代最大次数 L。(1)(2)记A1 A(n1)aijnn,令 k=1,m
4、=n。(k)(k)(3)如果am,m1,则得到 A 的一个特征值am,m,置 m=n-1,转(4);否则转(5)。(k)(4)如果 m=1,则得到 A 的一个特征值a1,1,转(11);如果 m=0,则直接转(11);如果 m1,则转(3)。(k)(k)am1,m1am1,m(5)求二阶子阵Dk(k)的两个特征值s1和s2,即计算二次方程(k)am,m1am,m(k)(k)2(ama1,m1m,m)detDk0的两个根s1和s2。(6)如果 m=2,则得到 A 的两个特征值s1和s2,转(11);否则转(7)。(k)(7)如果am1,m2,则得到 A 的两个特征值s1和s2,置 m=m-2,转
5、(4);否则转(8)。(8)如果 k=L,则计算终止,未得到 A 的全部特征值,否则转(9)。(k)(9)记Ak aijmm(1i,j m),计算(k)(k)s am1,m1am,m(k)(k)(k)(k)t am1,m1am,mam,m1am1,mMk Ak2 sAktI(I为 m 阶单位矩阵)Mk QkRk(对Mk作 QR 分解)TAk1 QkAkQk【对Mk作 QR 分解与Ak1的计算算法如下:(1)(r)bB b记B1 Mk,ijrijmmmm,C1 Ak。对于 r=1,2,m-1 执行)(a)若bi(,r,r 2,r(i r 1,m)全为零,则令Br1 Br,Cr1 Cr,转(e);
6、否则转(b)。(b)计算dr(birm(r)2ir),cr sign(br(,rr)dr(若br(,rr)0,则取cr dr),hr cr2crbr(,rr)(c)令ur(0,r),0,br(,rr)cr,br(1,r,(r)Tm,bm,r)RTTBr1 Brurvrtr prurhr,qr Crurhr,(d)计算vr BrTurhr,pr CrTurhr,r qrtrur,Cr1 CrrurTurprT(e)继续】(10)置 k=k+1,转(3)。(11)A 的全部特征值以计算完毕,停止计算。二 源程序#include#include#include#include#include#inc
7、lude#include#define E 1.0e-12/*定义全局变量相对误差限*/#define L 20/*迭代次数*/FILE*fp;struct C/*定义结构体*/double R;double I;void shuchu(double a10)/*输出一个 10*10 的矩阵*/int i,j;double b=0;for(i=0;i10;i+)for(j=0;j10;j+)if(fabs(aij)E)fprintf(fp,%+.12e,b);elsefprintf(fp,%+.12e,aij);if(j+1)%3=0)fprintf(fp,n);fprintf(fp,n);i
8、nt sgn(double x)/*符号函数*/if(x0)return 1;void assignment(double a1010)/*输入矩阵 A*/int i,j;for(i=0;i=9;i+)for(j=0;j=9;j+)if(i=j)aij=1.5*cos(i+1)+1.2*(j+1);elseaij=sin(0.5*(i+1)+0.2*(j+1);void Hessen(double a1010)/*将一个 10*10 的矩阵拟上三角化*/int r,i,j,b;double d,c,h,t;double p10,q10,u10,w10;for(r=0;r=7;r+)b=0;fo
9、r(i=r+2;iE)b+;if(b=0)continue;elsed=0;for(i=r+1;i=9;i+)d+=air*air;d=sqrt(d);if(ar+1r=0)c=d;else c=(-1)*sgn(ar+1r)*d;h=c*c-c*ar+1r;for(i=0;i=r;i+)ui=0;ur+1=ar+1r-c;for(i=r+2;i=9;i+)ui=air;for(i=0;i10;i+)pi=0;for(j=r+1;j10;j+)pi+=aji*uj;pi=pi/h;for(i=0;i10;i+)qi=0;for(j=r+1;j10;j+)qi+=aij*uj;qi=qi/h;t
10、=0;for(i=r+1;i10;i+)t+=pi*ui;t=t/h;for(i=0;i10;i+)wi=qi-t*ui;for(i=0;i10;i+)for(j=0;j10;j+)aij=aij-wi*uj-ui*pj;void QRfenjie(double a1010,int m,int n)/*将 m 维(m10)矩阵 QR 分解*/*n=0 时用于基本 QR 分解;n0 时用于带双步位移的 QR 方法*/int r,i,j,k;double d,c,h,t,s,s1;double p10,q10,u10,w10,w110,v10,b1010=0,g1010=0;if(n=0)goto
11、 loop1;s=am-2m-2+am-1m-1;s1=am-2m-2*am-1m-1-am-1m-2*am-2m-1;for(i=0;im;i+)for(j=0;jm;j+)for(r=0;rm;r+)bij+=air*arj;bij=bij-s*aij+s1*(i=j);goto loop2;loop1:for(i=0;im;i+)for(j=0;jm;j+)bij=aij;gij=(i=j);loop2:for(r=0;rm-1;r+)k=0;for(i=r+1;iE)k+;if(k=0)continue;d=0;for(i=r;im;i+)d+=bir*bir;d=sqrt(d);if
12、(brr=0)c=d;else c=(-1)*sgn(brr)*d;h=c*c-c*brr;for(i=0;ir;i+)ui=0;ur=brr-c;for(i=r+1;im;i+)ui=bir;for(i=0;im;i+)vi=0;for(j=r;jm;j+)vi+=bji*uj;vi=vi/h;for(i=0;im;i+)for(j=0;jm;j+)bij=bij-ui*vj;for(i=0;im;i+)pi=0;for(j=r;jm;j+)pi+=aji*uj;pi=pi/h;for(i=0;im;i+)qi=0;for(j=r;jm;j+)qi+=aij*uj;qi=qi/h;t=0;f
13、or(i=r;im;i+)t+=pi*ui;t=t/h;for(i=0;im;i+)wi=qi-t*ui;for(i=0;im;i+)for(j=0;jm;j+)aij=aij-wi*uj-ui*pj;if(n!=0)goto loop3;for(i=0;im;i+)w1i=0;for(j=r;jm;j+)w1i+=gij*uj;for(i=0;im;i+)for(j=0;jm;j+)gij=gij-w1i*uj/h;loop3:;if(n!=0)goto loop4;fprintf(fp,Q 阵:n);shuchu(g);fprintf(fp,R 阵:n);shuchu(b);fprintf
14、(fp,RQ 阵:n);shuchu(a);loop4:;void xiangliang(double d)/*用列主元高斯法求属于特征值 d 的特征向量,并输出*/int i,j,k,t;double a1010,x10=0,b,m;assignment(a);for(i=0;i10;i+)aii-=d;for(k=0;k9;k+)t=k;for(i=k+1;ifabs(atk)t=i;for(j=k;j10;j+)b=akj;akj=atj;atj=b;for(i=k+1;i10;i+)m=aik/akk;for(j=k+1;j=0;k-)for(j=9;jk;j-)xk-=akj*xj;
15、xk/=akk;b=0;for(i=0;i10;i+)/*将特征向量归一化*/b+=xi*xi;b=sqrt(b);for(i=0;i10;i+)xi/=b;fprintf(fp,属于实特征值%+.12e 的特征向量如下:n,d);for(i=0;i10;i+)fprintf(fp,%+.12en,xi);void QRfa(double a1010)/*带双步位移的 QR 方法求矩阵的所有特征值*/*并输出所有实特征值的特征向量*/int i,k=1,m=10;double b,c,d;struct C y10;for(i=0;i10;i+)yi.R=0;yi.I=0;loop2:if(fa
16、bs(am-1m-2)1)goto loop2;else goto loop3;loop1:b=am-2m-2+am-1m-1;c=am-2m-2*am-1m-1-am-1m-2*am-2m-1;d=b*b-4*c;if(d=0)d=sqrt(d);ym-1.R=(b+d)/2;ym-2.R=(b-d)/2;elsed=sqrt(fabs(d);ym-1.R=b/2;ym-2.R=b/2;ym-1.I=d/2;ym-2.I=(-1)*d/2;if(m=2)goto loop3;if(fabs(am-2m-3)=E)m-=2;goto loop4;if(k=L)fprintf(fp,未得到 A
17、的全部特征值n);goto loop5;QRfenjie(a,m,1);k+;goto loop2;loop3:fprintf(fp,A 的全部特征值已计算完毕n);for(i=0;i10;i+)fprintf(fp,%+.12e+i*%+.12en,yi.R,yi.I);for(i=0;i10;i+)if(yi.I=0)xiangliang(yi.R);loop5:;main()double A1010;if(fp=fopen(SY1103120 朱舜杰,w)=NULL)printf(cannot open filen);exit(0);assignment(A);Hessen(A);fpr
18、intf(fp,数值分析 B 第二题n);fprintf(fp,SY1103120 朱舜杰n);fprintf(fp,A(n-1)n);shuchu(A);QRfenjie(A,10,0);assignment(A);Hessen(A);QRfa(A);fclose(fp);三 程序结果A(n-1):-8.827516758830e-001-9.933136491826e-002-1.103349285994e+000-7.600443585637e-001+1.549101079914e-001-1.946591862872e+000-8.782436382927e-002-9.255889
19、387184e-001+6.032599440534e-001+1.518860956469e-001-2.347878362416e+000+2.372370104937e+000+1.819290822208e+000+3.237804101546e-001+2.205798440320e-001+2.102692662546e+000+1.816138086098e-001+1.278839089990e+000-6.380578124405e-001-4.154075603804e-001+0.000000000000e+000+1.728274599968e+000-1.171467
20、642785e+000-1.243839262699e+000-6.399758341743e-001-2.002833079037e+000+2.924947206124e-001-6.412830068395e-001+9.783997621285e-002+2.557763574160e-001+0.000000000000e+000+0.000000000000e+000-1.291669534130e+000-1.111603513396e+000+1.171346824096e+000-1.307356030021e+000+1.803699177750e-001-4.246385
21、358369e-001+7.988955239304e-002+1.608819928069e-001+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+1.560126298527e+000+8.125049397515e-001+4.421756832923e-001-3.588616128137e-002+4.691742313671e-001-2.736595050092e-001-7.359334657750e-002+0.000000000000e+000+0.000000000000e+000+0.000000
22、000000e+000+0.000000000000e+000-7.707773755194e-001-1.583051425742e+000-3.042843176799e-001+2.528712446035e-001-6.709925401449e-001+2.544619929082e-001+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000-7.463453456938e-001-2.708365157019e-002-9.486521
23、893682e-001+1.195871081495e-001+1.929265617952e-002+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000-7.701801374364e-001-4.697623990618e-001+4.988259468008e-001+1.137691603776e-001+0.000000000000e+000+0.000000000000e+000+0.000000
24、000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+7.013167092107e-001+1.582180688475e-001+3.862594614233e-001+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000000000e+000+0.000000
25、000000e+000+4.843807602783e-001+3.992777995177e-001Q 阵:-3.519262579534e-001+4.427591982245e-001-6.955982513607e-001+6.486200753651e-002+3.709718861896e-001+1.855847143605e-001-1.628942319628e-002-1.181053169648e-001-5.255375383724e-002-5.486582943568e-002-9.360277287361e-001-1.664679186545e-001+2.61
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北航 数值 分析 作业
限制150内