北航数值分析大作业一

合集下载

数理统计 北航 大作业

数理统计 北航 大作业

北京市财政收入的逐步回归模型研究摘要:财政收入水平高低是反映一国经济实力的重要标志,关系着一个国家经济的发展和社会的进步。

本文根据北京市2012年度统计年鉴,选取了农林牧渔业总产值、工业总产值、建筑业总产值、常驻总人口数、社会消费品零售总额、入境旅游人数、客运量、货运量、全社会固定资产投资以及第三产业总产值,共10个指标,对北京市财政收入及其可能的影响因素进行了研究。

文中运用逐步线性回归方法建立了多元线性回归模型,分析各因素对该地区财政收入的影响;利用SPSS软件进行求解。

通过分析SPSS软件计算的数据,从相关性检验、多重共线性检验、方差分析以及残差分析四个角度,分别对模型合理性进行了验证。

结果表明,北京市财政收入与建筑业总产值和农林牧渔也总产值呈显著线性关系。

其中与建筑业正相关,与农林牧渔业负相关。

关键字:财政收入,多元,逐步线性回归,SPSS1. 引言财政收入是指政府为履行其职能、实施公共政策和提供公共物品与服务需要而集中的一切资金的综合,包括税收、企事业收入、能源交通重点建设基金收入、债务收入、规费收入、罚没收入等[1]。

财政收入水平高低是反映一国经济实力的重要标志,关系着一个国家经济的发展和社会的进步。

因此,研究财政收入的增长及就显得尤为必要[2]。

一个地区的财政收入可能受到诸多因素的影响,如工业总产值、农业总产值、建筑业总产值、人口数等。

本文以北京市为例,以财政收入为因变量,选取农林牧渔业总产值、工业总产值、建筑业总产值、常驻总人口数、社会消费品零售总额、入境旅游人数、客运量、货运量、全社会固定资产投资以及第三产业总产值这10个指标为自变量,利用SPSS统计软件进行回归分析,建立财政收入影响因素模型,分析影响财政收入的主要因素及其影响程度。

2. 理论概述2.1 多元线性回归[3]在许多实际问题中,影响一个事物的因素常常不止一个,采用多元线性回归分析方法可以找出这些因素与事物之间的数量关系。

数值分析第一次作业

数值分析第一次作业

《数值分析》计算作业院系:航空科学与工程学院学号: SY1005512姓名:王天龙日期: 2010年10月31日计算实习说明书目的:训练运用计算机进行科学与工程计算的能力。

要求:1.独立进行算法设计、程序设计和上机运算,并得出正确的结果。

2.编制程序时全部采用双精度,要求按题目的要求设计输出,并执行打印。

3.只能根据题目给出的信息并且只允许一次计算得出全部结果。

题目:第一题 设有501×501的矩阵123499500501a b c b a b cc b a b c A c b a b c c b a b c ba ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦其中0.1(1.640.024)s i n (0.2)0.64 (125i i a i i e i =--= ,,,;0.16b =;0.064c =-。

矩阵A 的特征值12501()ii λ= ,,,满足 125011501||min ||S i i λλλλλ≤≤<<<= ,试求:1.1λ,501λ和S λ的值。

2.A 的与数5011140k kλλμλ-=+最接近的特征值(1239)ik k λ= ,,,。

3.A 的(谱范数)条件数2()cond A 和行列式det A 。

说明:1.在所有的算法中,凡是要给出精度水平ε的,都取1210ε-=。

2.选择算法时,应使A 的所有零元素都不存储。

3.打印以下内容: (1)算法的设计方案。

(2)全部源程序(要求注明主程序和每个子程序的功能)。

(3)特征值1λ,501λ,S λ和(1239)ik k λ= ,,,以及2()cond A ,det A 的值。

4.采用e 型输出所有计算结果,并至少显示12位有效数字。

一、程序算法的设计算法设计方案如下:二、全部源程序编程软件:Fortran:三、计算结果1.特征值1λ,501λ,S λ1-.107001135582E+02λ=,501 .972463398616E+01λ=,-.555823879237E-02S λ=2. (1239)ik k λ= ,,,如下表所示(ZK 代表ik λ)3.A 的条件数2()cond A 和行列式det A 的值2() .192509100000E+04cond A =,det .277059968428+119A =五、讨论这里选取的初始向量为X(i)=1,X={x1,x2,x3,,,,,,,x501},当初始向量与特征向量较近时,收敛较快,若初始向量与特征向量正交,则求解可能失真。

北航数值分析报告大作业第三题(fortran)

北航数值分析报告大作业第三题(fortran)

北航数值分析报告大作业第三题(fortran)“数值分析“计算实习大作业第三题——SY1415215孔维鹏一、计算说明1、将x i=0.08i,y j=0.5+0.05j分别代入方程组(A.3)得到关于t,u,v,w的的方程组,调用离散牛顿迭代子函数求出与x i,y j对应的t i,u j。

2、调用分片二次代数插值子函数在点(t i,u j)处插值得到z(x i,y j)=f(x i,y j),得到数表(x i,y j,f(x i,y j))。

3、对于k=1,2,3,4?,分别调用最小二乘拟合子函数计算系数矩阵c rs 及误差σ,直到满足精度,即求得最小的k值及系数矩阵c rs。

4、将x i?=0.1i,y j?=0.5+0.2j分别代入方程组(A.3)得到关于t?,u?,v?,w?的的方程组,调用离散牛顿迭代子函数求出与x i?,y j?对应的t i?,u j?,调用分片二次代数插值子函数在点(t i?,u j?)处插值得到z?(x i?,y j?)=f(x i?,y j?);调用步骤3中求得的系数矩阵c rs求得p(x i?,y j?),打印数表(x i?,y j?,f(x i?,y j?),p(x i?,y j?))。

二、源程序(FORTRAN)PROGRAM SY1415215DIMENSIONX(11),Y(21),T(6),U(6),Z(6,6),UX(11,21),TY(11,21),FXY(11,21), C(6,6) DIMENSIONX1(8),Y1(5),FXY1(8,5),PXY1(8,5),UX1(8,5),TY1(8,5)REAL(8) X,Y,T,U,Z,FXY,UX,TY,C,E,X1,Y1,FXY1,PXY1,UX1,TY1OPEN (1,FILE='第三题计算结果.TXT')DO I=1,11X(I)=0.08*(I-1)ENDDODO I=1,21Y(I)=0.5+0.05*(I-1)ENDDO!*****求解非线性方程组,得到z=f(t,u)的函数*******DO I=1,11DO J=1,21CALL DISNEWTON_NONLINEAR(X(I),Y(J),UX(I,J),TY(I,J)) ENDDO ENDDO!*************分片二次插值得到z=f(x,y)***********DO I=1,11DO J=1,21CALL INTERPOLATION(UX(I,J),TY(I,J),FXY(I,J))ENDDO ENDDOWRITE (1,"('数表(x,y,f(x,y)):')")WRITE (1,"(3X,'X',7X,'Y',10X,'F(X,Y)')")DO I=1,11DO J=1,21WRITE(1,'(1X,F5.2,2X,F5.3,2X,E20.13)') X(I),Y(J),FXY(I,J) ENDDOWRITE (1,"('')")ENDDO!***********最小二乘拟合得到P(x,y)**************N=11M=21WRITE (1,'(" ","K和σ分别为:")')DO K=1,20CALL LSFITTING(X,Y,FXY,C,N,M,K,K,E) WRITE (1,'(I3,2X,E20.13)') K-1,EIF(ETA).OR.(A(L,K)==TA)) THENTA=A(L,K)TL=LDO J=K,NT(K,J)=A(K,J)A(K,J)=A(TL,J)A(TL,J)=T(K,J)ENDDOTB(K)=B(K)B(K)=B(TL)B(TL)=TB(K)ENDIF ENDDODO I=K+1,NM(I,K)=A(I,K)/A(K,K)A(I,K)=0DO J=K+1,NA(I,J)=A(I,J)-M(I,K)*A(K,J) ENDDOB(I)=B(I)-M(I,K)*B(K)ENDDOENDDO!回代过程X(N)=B(N)/A(N,N)DO K=N-1,1,-1S=0.0DO J=K+1,NS=S+A(K,J)*X(J)ENDDOX(K)=(B(K)-S)/A(K,K)ENDDORETURNEND!***********求向量的无穷数************ SUBROUTINE NORM(X,N,A) DIMENSION X(N)REAL(8) X,AA=ABS(X(1))DO I=2,NIF(ABS(X(I))>ABS(X(I-1))) THENA=ABS(X(I)) ENDIFENDDORETURNEND!**************分片二次代数插值************** SUBROUTINE INTERPOLATION(U,V,W) PARAMETER (N=6,M=6)DIMENSION X(N),Y(M),Z(M,N),LK(3),LR(3)REAL(8) X,Y,Z,H,TREAL(8) U,V,W,LK,LR !U,V分别为插值点处的坐标,W为插值结果INTEGER R!**********************数据赋值********************** DATA Y/0.0,0.2,0.4,0.6,0.8,1.0/DATA X/0.0,0.4,0.8,1.2,1.6,2.0/DATA Z/-0.5,-0.42,-0.18,0.22,0.78,1.5,&&-0.34,-0.5,-0.5,-0.34,-0.02,0.46,&&0.14,-0.26,-0.5,-0.58,-0.5,-0.26,&&0.94,0.3,-0.18,-0.5,-0.66,-0.66,&&2.06,1.18,0.46,-0.1,-0.5,-0.74,&&3.5,2.38,1.42,0.62,-0.02,-0.5/H=0.4T=0.2!******************计算K,R************************* IF(UX(N-1)-H/2) THENK=N-1ELSEDO I=3,N-2IF((U>X(I)-H/2).AND.(UY(M-1)-T/2) THENR=M-1 ELSEDO J=3,M-2IF((V>Y(J)-T/2).AND.(VN) P=N IF(P>20) P=20IF(Q>M) Q=MIF(Q>20) Q=20XX=0YY=0D1=NAPX(1)=0.0DO I=1,NAPX(1)=APX(1)+X(I)ENDDOAPX(1)=APX(1)/D1DO J=1,MV(1,J)=0.0DO I=1,NV(1,J)=V(1,J)+Z(I,J)ENDDOV(1,J)=V(1,J)/D1ENDDOIF(P>1) THEND2=0.0APX(2)=0.0DO I=1,NG=X(I)-APX(1)D2=D2+G*GAPX(2)=APX(2)+(X(I)-XX)*G*G ENDDO APX(2)=APX(2)/D2BX(2)=D2/D1DO J=1,MV(2,J)=0.0DO I=1,NG=X(I)-APX(1)V(2,J)=V(2,J)+Z(I,J)*G ENDDOV(2,J)=V(2,J)/D2ENDDOD1=D2ENDIFDO K=3,PD2=0.0APX(K)=0.0DO J=1,MV(K,J)=0.0ENDDODO I=1,NG1=1.0G2=X(I)-APX(1)DO J=3,KG=(X(I)-APX(J-1))*G2-BX(J-1)*G1 G1=G2 G2=GENDDOD2=D2+G*GAPX(K)=APX(K)+X(I)*G*GDO J=1,M V(K,J)=V(K,J)+Z(I,J)*G ENDDOENDDODO J=1,MV(K,J)=V(K,J)/D2ENDDOAPX(K)=APX(K)/D2BX(K)=D2/D1D1=D2ENDDOD1=MAPY(1)=0.0DO I=1,MAPY(1)=APY(1)+Y(I)ENDDOAPY(1)=APY(1)/D1DO J=1,PU(J,1)=0.0DO I=1,MU(J,1)=U(J,1)+V(J,I) ENDDO U(J,1)=U(J,1)/D1ENDDOIF(Q>1)THEND2=0.0APY(2)=0.0DO I=1,MG=Y(I)-APY(1)D2=D2+G*G APY(2)=APY(2)+(Y(I))*G*G ENDDO APY(2)=APY(2)/D2BY(2)=D2/D1DO J=1,PU(J,2)=0.0DO I=1,MG=Y(I)-APY(1)U(J,2)=U(J,2)+V(J,I)*GENDDOU(J,2)=U(J,2)/D2ENDDOD1=D2ENDIFDO K=3,QD2=0.0APY(K)=0.0DO J=1,PU(J,K)=0.0ENDDODO I=1,MG1=1.0G2=Y(I)-APY(1)DO J=3,KG=(Y(I)-APY(J-1))*G2-BY(J-1)*G1 G1=G2 G2=GENDDOD2=D2+G*GAPY(K)=APY(K)+Y(I)*G*G DO J=1,PU(J,K)=U(J,K)+V(J,I)*G ENDDOENDDODO J=1,PU(J,K)=U(J,K)/D2ENDDOAPY(K)=APY(K)/D2BY(K)=D2/D1D1=D2ENDDOV(1,1)=1.0V(2,1)=-APY(1)V(2,2)=1.0DO I=1,PDO J=1,QA(I,J)=0.0ENDDOENDDODO I=3,QV(I,I)=V(I-1,I-1)V(I,I-1)=-APY(I-1)*V(I-1,I-1)+V(I-1,I-2)IF(I>=4) THENDO K=I-2,2,-1V(I,K)=-APY(I-1)*V(I-1,K)+V(I-1,K-1)-BY(I-1)*V(I-2,K) ENDDO ENDIFV(I,1)=-APY(I-1)*V(I-1,1)-BY(I-1)*V(I-2,1)ENDDO DO I=1,PIF(I==1) THENT(1)=1.0T1(1)=1.0ELSEIF(I==2) THENT(1)=-APX(1)T(2)=1.0T2(1)=T(1)T2(2)=T(2)ELSET(I)=T2(I-1)T(I-1)=-APX(I-1)*T2(I-1)+T2(I-2) IF(I>=4) THENDO K=I-2,2,-1T(K)=-APX(I-1)*T2(K)+T2(K-1)-BX(I-1)*T1(K) ENDDOENDIFT(1)=-APX(I-1)*T2(1)-BX(I-1)*T1(1)T2(I)=T(I)DO K=I-1,1,-1T1(K)=T2(K)T2(K)=T(K)ENDDOENDIFDO J=1,QDO K=I,1,-1DO L=J,1,-1A(K,L)=A(K,L)+U(I,J)*T(K)*V(J,L) ENDDOENDDOENDDOENDDODT1=0.0DO I=1,NX1=X(I)DO J=1,MY1=Y(J)X2=1.0DD=0.0DO K=1,PG=A(K,Q)DO KK=Q-1,1,-1G=G*Y1+A(K,KK)ENDDOG=G*X2DD=DD+GX2=X2*X1ENDDODT=DD-Z(I,J)DT1=DT1+DT*DTENDDOENDDORETURNEND三、计算结果数表(x,y,f(x,y)): X Y UX TY F(X,Y) 0.00 0.500 1.345 0.243 0.17E+000.00 0.550 1.322 0.269 0.66E+000.00 0.600 1.299 0.295 0.35E+000.00 0.650 1.277 0.322 0.94E+000.00 0.700 1.255 0.350 0.30E-020.00 0.750 1.235 0.377 -0.87E-010.00 0.800 1.215 0.406 -0.58E+000.00 0.850 1.196 0.434 -0.72E+000.00 0.900 1.177 0.463 -0.54E+000.00 0.950 1.159 0.492 -0.86E+000.00 1.050 1.125 0.550 -0.74E+00 0.00 1.100 1.109 0.580 -0.06E+00 0.00 1.150 1.093 0.609 -0.00E+00 0.00 1.200 1.0790.639 -0.18E+00 0.00 1.250 1.064 0.669 -0.52E+00 0.00 1.3001.050 0.699 -0.19E+00 0.00 1.350 1.037 0.729 -0.48E+00 0.001.400 1.024 0.759 -0.68E+00 0.00 1.450 1.011 0.790 -0.52E+00 0.00 1.500 1.000 0.820 -0.29E+000.08 0.500 1.415 0.228 0.67E+00 0.08 0.550 1.391 0.253 0.08E+00 0.08 0.600 1.368 0.279 0.02E+00 0.08 0.650 1.346 0.306 0.47E+00 0.08 0.700 1.325 0.333 0.57E+00 0.08 0.750 1.304 0.360 0.48E-01 0.08 0.800 1.284 0.388 -0.73E-01 0.08 0.850 1.265 0.416 -0.16E+00 0.08 0.900 1.246 0.444 -0.29E+00 0.08 0.950 1.229 0.473 -0.36E+00 0.08 1.000 1.211 0.502 -0.08E+00 0.08 1.050 1.194 0.531 -0.29E+00 0.08 1.100 1.178 0.560 -0.78E+00 0.08 1.150 1.163 0.589 -0.93E+00 0.08 1.200 1.148 0.619 -0.44E+00 0.08 1.250 1.133 0.649 -0.92E+00 0.08 1.300 1.119 0.679 -0.71E+000.08 1.400 1.093 0.739 -0.37E+00 0.08 1.450 1.080 0.769-0.83E+00 0.08 1.500 1.068 0.799 -0.92E+000.16 0.500 1.483 0.214 0.31E+00 0.16 0.550 1.460 0.239 0.64E+00 0.16 0.600 1.437 0.264 0.91E+00 0.16 0.650 1.414 0.290 0.06E+00 0.16 0.700 1.393 0.316 0.70E+00 0.16 0.750 1.372 0.343 0.59E+00 0.16 0.800 1.352 0.370 0.12E+00 0.16 0.850 1.333 0.398 0.77E-02 0.16 0.900 1.315 0.426 -0.83E-01 0.16 0.950 1.297 0.454-0.58E+00 0.16 1.000 1.279 0.483 -0.20E+00 0.16 1.050 1.2620.512 -0.11E+00 0.16 1.100 1.246 0.541 -0.74E+00 0.16 1.1501.231 0.570 -0.09E+00 0.16 1.200 1.216 0.600 -0.59E+00 0.16 1.250 1.201 0.629 -0.66E+00 0.16 1.300 1.187 0.659 -0.71E+00 0.16 1.350 1.174 0.689 -0.32E+00 0.16 1.400 1.161 0.718-0.56E+00 0.16 1.450 1.148 0.748 -0.31E+00 0.16 1.500 1.136 0.778 -0.75E+000.24 0.500 1.551 0.201 0.66E+01 0.24 0.550 1.527 0.2250.03E+000.24 0.650 1.482 0.275 0.64E+00 0.24 0.700 1.460 0.3010.47E+00 0.24 0.750 1.439 0.327 0.34E+00 0.24 0.800 1.419 0.354 0.24E+00 0.24 0.850 1.400 0.381 0.69E+00 0.24 0.900 1.381 0.409 0.04E-01 0.24 0.950 1.363 0.437 -0.42E-01 0.24 1.000 1.346 0.465 -0.06E+00 0.24 1.050 1.329 0.494 -0.59E+00 0.24 1.100 1.313 0.523 -0.83E+00 0.24 1.150 1.297 0.552 -0.15E+00 0.24 1.200 1.282 0.581 -0.19E+00 0.24 1.250 1.267 0.610 -0.84E+00 0.24 1.300 1.253 0.640 -0.66E+00 0.24 1.350 1.240 0.669 -0.30E+00 0.24 1.400 1.227 0.699 -0.86E+00 0.24 1.450 1.214 0.729 -0.84E+00 0.24 1.500 1.202 0.759 -0.77E+000.32 0.500 1.617 0.188 0.28E+01 0.32 0.550 1.593 0.212 0.49E+01 0.32 0.600 1.570 0.236 0.68E+00 0.32 0.650 1.547 0.261 0.75E+00 0.32 0.700 1.526 0.286 0.60E+00 0.32 0.750 1.505 0.312 0.77E+00 0.32 0.800 1.485 0.339 0.05E+00 0.32 0.850 1.466 0.365 0.99E+00 0.32 0.900 1.447 0.393 0.27E+00 0.32 1.000 1.411 0.448 -0.01E-02 0.32 1.050 1.395 0.477-0.41E-01 0.32 1.100 1.378 0.505 -0.18E+00 0.32 1.150 1.3630.534 -0.25E+00 0.32 1.200 1.347 0.563 -0.29E+00 0.32 1.2501.333 0.592 -0.90E+00 0.32 1.300 1.319 0.621 -0.00E+00 0.32 1.350 1.305 0.650 -0.40E+00 0.32 1.400 1.292 0.680 -0.54E+00 0.32 1.450 1.279 0.710 -0.79E+00 0.32 1.500 1.267 0.739-0.91E+000.40 0.500 1.681 0.177 0.91E+01 0.40 0.550 1.658 0.1990.00E+01 0.40 0.600 1.634 0.223 0.83E+01 0.40 0.650 1.612 0.247 0.02E+01 0.40 0.700 1.591 0.272 0.94E+00 0.40 0.750 1.570 0.298 0.49E+00 0.40 0.800 1.550 0.324 0.94E+00 0.40 0.850 1.530 0.350 0.40E+00 0.40 0.900 1.512 0.377 0.33E+00 0.40 0.950 1.493 0.405 0.99E+00 0.40 1.000 1.476 0.432 0.68E+00 0.40 1.050 1.459 0.460 0.08E-01 0.40 1.100 1.443 0.488 -0.84E-01 0.40 1.150 1.427 0.517-0.98E+00 0.40 1.200 1.412 0.545 -0.27E+00 0.40 1.250 1.397 0.574 -0.06E+000.40 1.350 1.369 0.632 -0.66E+00 0.40 1.400 1.356 0.662-0.37E+00 0.40 1.450 1.343 0.691 -0.43E+00 0.40 1.500 1.331 0.721 -0.12E+000.48 0.500 1.745 0.166 0.69E+01 0.48 0.550 1.721 0.188 0.02E+01 0.48 0.600 1.698 0.211 0.74E+01 0.48 0.650 1.676 0.235 0.40E+01 0.48 0.700 1.654 0.259 0.23E+01 0.48 0.750 1.634 0.284 0.56E+00 0.48 0.800 1.613 0.310 0.28E+00 0.48 0.850 1.594 0.336 0.49E+00 0.48 0.900 1.575 0.363 0.31E+00 0.48 0.950 1.557 0.390 0.66E+00 0.48 1.000 1.539 0.417 0.30E+00 0.48 1.050 1.522 0.444 0.34E+00 0.48 1.100 1.506 0.472 0.07E-01 0.48 1.150 1.490 0.500 -0.62E-01 0.48 1.200 1.475 0.529 -0.45E+00 0.48 1.250 1.460 0.557 -0.86E+00 0.48 1.300 1.446 0.586 -0.39E+00 0.48 1.350 1.432 0.615 -0.22E+00 0.48 1.400 1.419 0.644 -0.67E+00 0.48 1.450 1.406 0.674-0.55E+00 0.48 1.500 1.394 0.703 -0.14E+000.56 0.500 1.808 0.156 0.48E+010.56 0.600 1.761 0.200 0.10E+01 0.56 0.650 1.739 0.2230.68E+01 0.56 0.700 1.717 0.247 0.94E+01 0.56 0.750 1.696 0.272 0.33E+01 0.56 0.800 1.676 0.297 0.11E+00 0.56 0.850 1.657 0.323 0.63E+00 0.56 0.900 1.638 0.349 0.97E+00 0.56 0.950 1.620 0.375 0.52E+00 0.56 1.000 1.602 0.402 0.56E+00 0.56 1.050 1.585 0.429 0.47E+00 0.56 1.100 1.568 0.457 0.20E+00 0.56 1.150 1.552 0.485 0.13E+00 0.56 1.200 1.537 0.513 0.09E-01 0.56 1.250 1.522 0.541 -0.47E-01 0.56 1.300 1.508 0.570 -0.99E+00 0.56 1.350 1.4940.599 -0.82E+00 0.56 1.400 1.481 0.627 -0.26E+00 0.56 1.4501.468 0.657 -0.71E+00 0.56 1.500 1.455 0.686 -0.98E+000.64 0.500 1.870 0.147 0.74E+01 0.64 0.550 1.846 0.1680.10E+01 0.64 0.600 1.823 0.190 0.54E+01 0.64 0.650 1.801 0.213 0.42E+01 0.64 0.700 1.779 0.236 0.56E+01 0.64 0.750 1.758 0.260 0.03E+01 0.64 0.800 1.738 0.285 0.42E+01 0.64 0.850 1.718 0.310 0.41E+010.64 0.950 1.681 0.362 0.36E+00 0.64 1.000 1.664 0.388 0.18E+00 0.64 1.050 1.646 0.415 0.28E+00 0.64 1.100 1.630 0.443 0.07E+00 0.64 1.150 1.614 0.470 0.66E+00 0.64 1.200 1.598 0.498 0.09E+00 0.64 1.250 1.584 0.526 0.50E-01 0.64 1.300 1.569 0.554 -0.88E-01 0.64 1.350 1.555 0.583 -0.76E+00 0.64 1.400 1.542 0.611 -0.66E+00 0.64 1.450 1.529 0.640 -0.33E+00 0.64 1.500 1.516 0.669 -0.56E+00 0.72 0.500 1.931 0.139 0.94E+01 0.72 0.550 1.907 0.159 0.84E+01 0.72 0.600 1.884 0.181 0.36E+01 0.72 0.650 1.862 0.203 0.40E+01 0.72 0.700 1.840 0.226 0.47E+01 0.72 0.750 1.819 0.249 0.56E+01 0.72 0.800 1.799 0.273 0.19E+01 0.72 0.850 1.779 0.298 0.37E+01 0.72 0.900 1.760 0.323 0.86E+01 0.72 0.950 1.742 0.349 0.76E+00 0.72 1.000 1.724 0.375 0.24E+00 0.72 1.050 1.707 0.402 0.55E+00 0.72 1.100 1.691 0.429 0.97E+00 0.72 1.150 1.675 0.456 0.27E+00 0.72 1.200 1.659 0.484 0.31E+000.72 1.300 1.630 0.539 0.49E+00 0.72 1.350 1.616 0.5680.72E-02 0.72 1.400 1.602 0.596 -0.69E-01 0.72 1.450 1.589 0.625 -0.67E+00 0.72 1.500 1.576 0.653 -0.20E+000.80 0.500 1.992 0.131 0.31E+01 0.80 0.550 1.968 0.1510.44E+01 0.80 0.600 1.945 0.172 0.41E+01 0.80 0.650 1.922 0.193 0.45E+01 0.80 0.700 1.900 0.216 0.00E+01 0.80 0.750 1.879 0.239 0.10E+01 0.80 0.800 1.859 0.263 0.16E+01 0.80 0.850 1.840 0.287 0.52E+01 0.80 0.900 1.821 0.312 0.02E+01 0.80 0.950 1.802 0.337 0.38E+01 0.80 1.000 1.784 0.363 0.89E+01 0.80 1.050 1.767 0.389 0.28E+00 0.80 1.100 1.751 0.416 0.09E+00 0.80 1.150 1.734 0.4430.23E+00 0.80 1.200 1.719 0.470 0.93E+00 0.80 1.250 1.704 0.498 0.15E+00 0.80 1.300 1.689 0.525 0.86E+00 0.80 1.350 1.675 0.553 0.64E+00 0.80 1.400 1.662 0.582 0.74E-01 0.80 1.450 1.649 0.610 -0.37E-01 0.80 1.500 1.636 0.638 -0.81E+00K和σ分别为:0 0.93E+031 0.61E+012 0.92E-023 0.53E-034 0.16E-055 0.77E-07系数矩阵Crs(按行)为:0.00E+01 -0.83E+01 0.56E+00 0.97E+00 -0.03E+00 0.70E-010.91E+01 -0.99E+00 -0.96E+01 0.17E+01 -0.66E+00 0.10E-01 0.77E+00 0.42E+01 -0.10E+00 -0.81E+00 0.81E+00 -0.62E-01-0.25E+00 -0.21E+00 0.97E+00 -0.18E+00 0.49E+00 -0.63E-010.34E+00 -0.56E+00 0.69E-01 0.51E+00 -0.77E-01 0.27E-01-0.94E-01 0.94E+00 -0.58E+00 0.69E-01 -0.50E-01 0.53E-02 数表(x,y,f(x,y),p(x,y)):X Y F(X,Y) P(X,Y)0.100 0.700 0.58E+00 0.05E+000.100 1.100 -0.66E+00 -0.26E+00 0.100 1.300 -0.68E+00-0.31E+00 0.100 1.500 -0.52E+00 -0.49E+000.200 0.700 0.54E+00 0.19E+00 0.200 0.900 -0.63E-01 -0.65E-01 0.200 1.100 -0.90E+00 -0.90E+00 0.200 1.300 -0.84E+00 -0.90E+00 0.200 1.500 -0.03E+00 -0.04E+000.300 0.700 0.82E+00 0.09E+00 0.300 0.900 0.48E+00 0.11E+00 0.300 1.100 -0.63E+00 -0.88E+00 0.300 1.300 -0.72E+00 -0.96E+00 0.300 1.500 -0.34E+00 -0.84E+000.400 0.700 0.79E+00 0.89E+00 0.400 0.900 0.56E+00 0.63E+00 0.400 1.100 -0.83E-01 -0.04E-01 0.400 1.300 -0.72E+00 -0.71E+00 0.400 1.500 -0.85E+00 -0.07E+000.500 0.700 0.56E+01 0.92E+01 0.500 0.900 0.51E+00 0.23E+00 0.500 1.100 0.59E+00 0.27E+00 0.500 1.300 -0.53E+00 -0.11E+00 0.500 1.500 -0.67E+00 -0.33E+000.600 0.900 0.14E+00 0.75E+00 0.600 1.100 0.19E+00 0.32E+00 0.600 1.300 -0.70E-01 -0.82E-01 0.600 1.500 -0.08E+00 -0.75E+00 0.700 0.700 0.89E+01 0.29E+01 0.700 0.900 0.91E+01 0.11E+010.700 1.100 0.60E+00 0.97E+00 0.700 1.300 0.22E-01 0.06E-01 0.7001.500 -0.53E+00 -0.80E+00 0.800 0.700 0.09E+01 0.06E+01 0.800 0.900 0.32E+01 0.50E+01 0.800 1.100 0.03E+00 0.79E+00 0.800 1.300 0.25E+00 0.50E+00 0.800 1.500 -0.14E+00 -0.28E+00。

北航数值分析大作业 第二题 QR分解

北航数值分析大作业 第二题 QR分解

《数值分析B》课计算实习第一题设计文档与源程序姓名:杨彦杰学号:SY10171341 算法的设计方案(1)运行平台操作系统:Windows XP;开发平台:VC6.0++;工程类型:文档视图类;工程名:Numanalysis;(2)开发描述首先新建类CMetrix,该类完成矩阵之间的相关运算,包括相乘、加减等,以主程序方便调用;题目的解算过程在视图类CNumanalysisView中实现,解算结果在视图界面中显示;(3)运行流程(4)运行界面2、全部源代码(1)类CMetrixMetrix.h文件:class CMetrix{public:double** MetrixMultiplyConst(double**A,int nRow,int nCol,double nConst);//矩阵乘常数double** MetrixMultiplyMetrix(double**A,double**mA,int nRow,int nCol);//矩阵相乘double** MetrixSubtractMetrix(double **A, double **subA, int nRow,int nCol);//矩阵减矩阵double VectorMultiplyVector(double*V,double*mulV,int nV);//向量点积double** VectorMultiplyVectortoMetrix(double*V,double*VT,int nV);//向量相乘为矩阵double* VectorSubtractVector(double*V,double*subV,int nV);//向量相减double* VectorMultiplyConst(double *V, int nV, double nConst);//向量乘常数double LengthofVector(double *V,int nV);//求向量的长度double* MetrixMultiplyVector(double**A,int nRow,int nCol,double*V,int nV);//矩阵与向量相乘double** AtoAT(double **A,int Row,int Col);//矩阵转置运算void FreeMem();CMetrix(int nRow,int nCol);uCMetrix();virtual ~CMetrix();double* vector; //过渡向量double** B; //过渡矩阵};Metrix.cpp文件:CMetrix::CMetrix(int nRow, int nCol){B = new double*[nRow];for (int i = 0;i < nCol;i++){B[i] = new double[nCol];}vector = new double[nRow];}CMetrix::~CMetrix(){delete vector;B = NULL;delete B;}double** CMetrix::AtoAT(double **A, int nRow, int nCol){for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){B[col][row] = A[row][col];}}return B;}double* CMetrix::MetrixMultiplyVector(double **A, int nRow, int nCol, double *V, int nV) {if (nCol != nV){AfxMessageBox("矩阵列数和向量维数不等,不能相乘!");return 0;}double sum = 0.0;for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){sum += A[row][col]*V[col];}vector[row] = sum;sum = 0.0;}return vector;}double CMetrix::LengthofVector(double *V, int nV){double length = 0.0;for (int col = 0;col < nV;col++){length += V[col]*V[col];}return length;}double* CMetrix::VectorMultiplyConst(double *V, int nV, double nConst){for (int col = 0;col < nV;col++){vector[col] = V[col]*nConst;}return vector;}double* CMetrix::VectorSubtractVector(double *V, double *subV, int nV){for (int col = 0;col < nV;col++){vector[col] = V[col]-subV[col];}return vector;}double** CMetrix::VectorMultiplyVectortoMetrix(double*V, double *VT, int nV){for (int row = 0;row < nV;row++){for (int col = 0;col < nV;col++){B[row][col] = V[row]*VT[col];}}return B;}double CMetrix::VectorMultiplyVector(double *V, double *mulV, int nV){double length = 0.0;for (int col = 0;col < nV;col++){length += V[col]*mulV[col];}return length;}double** CMetrix::MetrixSubtractMetrix(double **A, double **subA, int nRow, int nCol) {for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){B[row][col] = A[row][col]-subA[row][col];}}return B;}double** CMetrix::MetrixMultiplyMetrix(double **A, double **mA, int nRow, int nCol) {double sum = 0.0;for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){for(int n = 0;n < nCol;n++){sum += A[row][n]*mA[n][col];}B[row][col] = sum;sum = 0.0;}}return B;}double** CMetrix::MetrixMultiplyConst(double **A, int nRow, int nCol, double nConst) {for (int row = 0;row < nRow;row++){for (int col = 0;col < nCol;col++){B[row][col] = A[row][col]*nConst;}}return B;}(2)类CNumanalysisViewNumanalysisview.hclass CNumanalysisView : public CEditView{…………public:double Sign(double x);void DisplayVector(double*V,int nV); // 显示向量数据void DisplayMetrix(double **A,int Row,int Col); //显示矩阵void DisplayText(CString str); //显示文本protected://{{AFX_MSG(CNumanalysisView)afx_msg void OnQRanalyze(); //运行主函数…………};Numanalysisview.cppvoid CNumanalysisView::OnQRanalyze(){//开辟空间int nRow = 10;int nCol = 10;CString str;CMetrix Metrix(nRow,nCol);double tempa = 0.0;double *V = new double[nCol]; //分配10*10矩阵空间double *ur = new double[nCol];double *pr = new double[nCol];double *qr = new double[nCol];double *wr = new double[nCol];double *tempV = new double[nCol];double **Ar = new double*[nRow];double **C = new double*[nRow];double **Cr = new double*[nRow];double **tempA = new double*[nRow];double **A = new double*[nRow];double **R = new double*[nRow];for (int col = 0;col < nRow;col++){A[col] = new double[nCol];Ar[col] = new double[nCol];C[col] = new double[nCol];Cr[col] = new double[nCol];tempA[col] = new double[nCol];R[col] = new double[nCol];}//矩阵A求解for (int i = 0;i < nRow;i++){for (int j = 0;j < nCol;j++){if(i == j)A[i][j] = 1.5*cos((i+1.0)+1.2*(j+1.0));elseA[i][j] = sin(0.5*(i+1.0)+0.2*(j+1.0));}}//--------------------拟上三角化-------------------------// double dr = 0.0,cr = 0.0,hr = 0.0,tr = 0.0;for (int r = 0;r < nCol - 2;r++){dr = 0.0;for (i = r+1;i < nCol;i++) //dr{dr += A[i][r]*A[i][r];}dr = sqrt(dr);for (i = r+2;i < nCol;i++) //判断air是否全为零tempa += fabs(A[i][r]);if (tempa <= IPSLEN)continue;if (A[r+1][r] == 0.0) //crcr = dr;elsecr = -1*Sign(A[r+1][r])*dr;hr = cr*cr - cr*A[r+1][r]; //hrstr.Format("dr = %.6e, cr = %.6e, hr = %.6e",dr,cr,hr);for (int row = 0;row < nRow;row++) //ur{if (row < r+1)ur[row] = 0.0;else if (row == r+1)ur[row] = A[row][r]-cr;elseur[row] = A[row][r];}tempA = Metrix.AtoAT(A,nRow,nCol);for (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++)Ar[row][col] = tempA[row][col];}tempV = Metrix.MetrixMultiplyVector(Ar,nRow,nCol,ur,nCol); //pr memcpy(pr,tempV,nCol*8);tempV = Metrix.VectorMultiplyConst(pr,nCol,1.0/hr);memcpy(pr,tempV,nCol*8);tempV = Metrix.MetrixMultiplyVector(A,nRow,nCol,ur,nCol); //qr memcpy(qr,tempV,nCol*8);tempV = Metrix.VectorMultiplyConst(qr,nCol,1.0/hr);memcpy(qr,tempV,nCol*8);tr = Metrix.VectorMultiplyVector(pr,ur,nCol)/hr; //trtempV = Metrix.VectorMultiplyConst(ur,nCol,tr); //wr memcpy(wr,tempV,nCol*8);tempV = Metrix.VectorSubtractVector(qr,wr,nCol);memcpy(wr,tempV,nCol*8);tempA = Metrix.VectorMultiplyVectortoMetrix(wr,ur,nCol); //Arfor (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++)Ar[row][col] = tempA[row][col];}tempA = Metrix.MetrixSubtractMetrix(A,Ar,nRow,nCol);for (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++)A[row][col] = tempA[row][col];}tempA = Metrix.VectorMultiplyVectortoMetrix(ur,pr,nCol);for (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++)Ar[row][col] = tempA[row][col];}tempA = Metrix.MetrixSubtractMetrix(A,Ar,nRow,nCol);for (row = 0;row < nRow;row++){for (col = 0;col < nCol;col++){A[row][col] = tempA[row][col];if (fabs(A[row][col]) < IPSLEN){A[row][col] = 0.0;}}}}DisplayText("矩阵A拟上三角化后所得的矩阵为:");DisplayMetrix(A,nRow,nCol);for (int row = 0;row < nRow;row++) //用于计算特征向量{for (col = 0;col < nCol;col++)R[row][col] = A[row][col];}// -------------------------------------------------////--------------------带双步位移的QR分解-------------------------// int m = nCol;struct EigenVal //定义特征值结构,实数和虚数{double Realnum;double Imagnum;};EigenVal *eigenvalue = new EigenVal[m];EigenVal tmpEigen1,tmpEigen2;double b = 0.0,c = 0.0,delta = 0.0,s = 0.0,t = 0.0;double *vr = new double[m];for (int k = 1;k < 100; k++){//m代表矩阵阶数,判断式中直接用,运算中需要-1while (m > 1 && fabs(A[m-1][m-2]) <= IPSLEN)//第三步和第四步{eigenvalue[m-1].Realnum = A[m-1][m-1];eigenvalue[m-1].Imagnum = 0.0;m = m - 1;}if (m == 1){eigenvalue[m-1].Realnum = A[m-1][m-1];eigenvalue[m-1].Imagnum = 0.0;DisplayText("已求出A的全部特征值:");break;}b = -(A[m-2][m-2]+A[m-1][m-1]); //第五步求一元二次方程式的根s1,s2c = A[m-2][m-2]*A[m-1][m-1]-A[m-2][m-1]*A[m-1][m-2];delta =b*b - 4*c;if (delta >= 0.0){tmpEigen1.Realnum = (-b-sqrt(delta))/2;tmpEigen1.Imagnum = 0.0;tmpEigen2.Realnum = (-b+sqrt(delta))/2;tmpEigen2.Imagnum = 0.0;}else{tmpEigen1.Realnum = -b/2;tmpEigen1.Imagnum = -sqrt(fabs(delta))/2 ;tmpEigen2.Realnum = -b/2;tmpEigen2.Imagnum = sqrt(fabs(delta))/2;}if (m == 2) //第六步 m=2时结束运算{eigenvalue[m-1] = tmpEigen1;eigenvalue[m-2] = tmpEigen2;DisplayText("已求出A的全部特征值:");break;}else //第七步 m > 1{if (fabs(A[m-2][m-3]) <= IPSLEN){eigenvalue[m-1] = tmpEigen1;eigenvalue[m-2] = tmpEigen2;m = m - 2;continue;}}for (int row = 0;row < m;row++) //Mk求之前需要把A付给C{for (int col = 0;col < m;col++)C[row][col] = A[row][col];}double **I = new double*[m]; //第九步求Mk和Mk的QR分解for (int i = 0;i < m;i++) //求单位矩阵I,分配m*m矩阵空间{I[i] = new double[m];}for (i = 0;i < m;i++){for (int j = 0;j < m;j++){if(i == j)I[i][j] = 1;else I[i][j] = 0;}}s = A[m-2][m-2]+A[m-1][m-1];t = A[m-2][m-2]*A[m-1][m-1] - A[m-2][m-1]*A[m-2][m-1];tempA = Metrix.MetrixMultiplyMetrix(A,A,m,m);//A*Afor (row = 0;row < m;row++){for (col = 0;col < m;col++)Ar[row][col] = tempA[row][col];}tempA = Metrix.MetrixMultiplyConst(A,m,m,s);//s*Afor (row = 0;row < m;row++){for (col = 0;col < m;col++)A[row][col] = tempA[row][col];}tempA = Metrix.MetrixSubtractMetrix(Ar,A,m,m);//A*A-s*Afor (row = 0;row < m;row++){for (col = 0;col < m;col++)A[row][col] = tempA[row][col]; }tempA = Metrix.MetrixMultiplyConst(I,m,m,-1*t);//-t*Ifor (row = 0;row < m;row++){for (col = 0;col < m;col++)Ar[row][col] = tempA[row][col]; }tempA = Metrix.MetrixSubtractMetrix(A,Ar,m,m);//A*A - s*A + r*I for (row = 0;row < m;row++){for (col = 0;col < m;col++){A[row][col] = tempA[row][col];if (fabs(A[row][col]) < IPSLEN){A[row][col] = 0.0;}}}delete I;//Mk的QR分解for (int r = 0;r < m - 1;r++){dr = 0.0;for (i = r;i < m;i++) //dr{dr += A[i][r]*A[i][r];}dr = sqrt(dr);for (i = r+1;i < m;i++) //判断air是否全为零tempa += fabs(A[i][r]);if (tempa <= IPSLEN)continue;if (A[r][r] == 0.0) //crcr = dr;elsecr = -1*Sign(A[r][r])*dr;hr = cr*cr - cr*A[r][r]; //hrfor (int row = 0;row < m;row++) //ur{if (row < r)ur[row] = 0.0;else if (row == r)ur[row] = A[row][r]-cr;elseur[row] = A[row][r];}tempA = Metrix.AtoAT(A,m,m); //Btfor (row = 0;row < m;row++){for (col = 0;col < m;col++)Ar[row][col] = tempA[row][col];}tempV = Metrix.MetrixMultiplyVector(Ar,m,m,ur,m); //Bt*ur memcpy(vr,tempV,m*8);tempV = Metrix.VectorMultiplyConst(vr,m,1.0/hr); //vr = Bt*ur/hr memcpy(vr,tempV,m*8);tempA = Metrix.VectorMultiplyVectortoMetrix(ur,vr,m);//Ur*vrfor (row = 0;row < m;row++){for (col = 0;col < m;col++)Ar[row][col] = tempA[row][col];}tempA = Metrix.MetrixSubtractMetrix(A,Ar,m,m); //Br-ur*vrfor (row = 0;row < m;row++){for (col = 0;col < m;col++){A[row][col] = tempA[row][col];if (fabs(A[row][col]) < IPSLEN){A[row][col] = 0.0;}}}tempA = Metrix.AtoAT(C,m,m); //Ctfor (row = 0;row < m;row++){for (col = 0;col < m;col++)Cr[row][col] = tempA[row][col]; }tempV = Metrix.MetrixMultiplyVector(Cr,m,m,ur,m); //pr memcpy(pr,tempV,m*8);tempV = Metrix.VectorMultiplyConst(pr,m,1.0/hr);memcpy(pr,tempV,m*8);tempV = Metrix.MetrixMultiplyVector(C,m,m,ur,m); //qr memcpy(qr,tempV,m*8);tempV = Metrix.VectorMultiplyConst(qr,m,1.0/hr);memcpy(qr,tempV,m*8);tr = Metrix.VectorMultiplyVector(pr,ur,m)/hr; //trtempV = Metrix.VectorMultiplyConst(ur,m,tr); //wr memcpy(wr,tempV,m*8);tempV = Metrix.VectorSubtractVector(qr,wr,m);memcpy(wr,tempV,m*8);tempA = Metrix.VectorMultiplyVectortoMetrix(wr,ur,m);//Cr+1for (row = 0;row < m;row++){for (col = 0;col < m;col++)Cr[row][col] = tempA[row][col]; }tempA = Metrix.MetrixSubtractMetrix(C,Cr,m,m);for (row = 0;row < m;row++){for (col = 0;col < m;col++)C[row][col] = tempA[row][col]; }tempA = Metrix.VectorMultiplyVectortoMetrix(ur,pr,m);for (row = 0;row < m;row++){for (col = 0;col < m;col++)Cr[row][col] = tempA[row][col]; }tempA = Metrix.MetrixSubtractMetrix(C,Cr,m,m);for (row = 0;row < m;row++){for (col = 0;col < m;col++){C[row][col] = tempA[row][col];if (fabs(C[row][col]) < IPSLEN){C[row][col] = 0.0;}}}}str.Format("矩阵A%d QR分解结束后所得到的矩阵为:",m);//计算结果输出DisplayText(str);DisplayMetrix(A,m,m);for (row = 0;row < m;row++) //Mk的QR分解后需要把C付给A{for (col = 0;col < m;col++)A[row][col] = C[row][col];}str.Format("迭代完成后的矩阵A%d = ",k);DisplayText(str);DisplayMetrix(A,m,m);}DisplayText("矩阵A的全体特征值如下: ");for (i = 0;i<nCol;i++){str.Format("%.6e + j%.6e",eigenvalue[i].Realnum,eigenvalue[i].Imagnum);DisplayText(str);}// -------------------------------------------------//求实特征值的特征向量,在拟上三角矩阵基础上直接求解即可////(A-egiI)X = 0.0;m = nRow;for (row = 0;row < nRow;row++) //用于计算特征向量{for (col = 0;col < nCol;col++)A[row][col] = R[row][col];}double **I = new double*[m]; //求单位矩阵I,分配m*m矩阵空间double sum = 0.0;for (i = 0;i < m;i++){I[i] = new double[m];}for (i = 0;i < m;i++){for (int j = 0;j < m;j++){if(i == j)I[i][j] = 1;else I[i][j] = 0;}}for (i = 0;i < nRow;i++){if (eigenvalue[i].Imagnum != 0.0){str.Format("特征值%.6e+j%.6e为虚数,不需要求特征向量。

数值分析B(第一题)

数值分析B(第一题)

北航2009级研究生《数值分析B》计算实习题目(第一题)设计文档与源程序姓名:学号:打印内容1 算法的设计方案(1)运行平台(2)算法描述2 全部源代码3 输出结果,包含以下内容:特征值λ1,λ501,和λik(k=1,2, (39)A的(谱范数)条件数cond(A)2和行列式detA4讨论迭代初始向量的选取对计算结果的影响及其原因1 算法的设计方案(1)运行与开发平台操作系统:Windows 7;开发平台:VC++ 6.0;工程类型:Win32 Console Application;工程名:Power_EigenValue;(2)算法描述设计思想:题目要求的求解内容主要通过采用幂法和反幂法来实现。

首先计算出A各元素值(元素值为的0的不存储),然后采用幂法求解矩阵A的按模最大特征值,然后通过原点平移方法求解出另一个按模最大特征值,通过比较可以得出最大特征值λ1、最小特征值λ501;再者,对矩阵A进行LU三角分解,在此基础上采用反幂法求解按模最小特征值λs,并求出A的与μk值最接近的特征值;矩阵A的(谱范数)条件数cond(A)2由|λ1|/|λs|求得,矩阵A的行列式值由LU分解后的对角线元素相乘得出。

具体算法如下:(精度eps=le-12,最大迭代次数L=1000,n=501)(1)、计算矩阵A为了减少计算机的计算负荷,提高解算速度,对于原始稀疏矩阵A,在程序中不对矩阵的0元素进行存储,因此将矩阵转换成5×501阶阵。

其中,原对角线的元素计算如下:for(i=0;i<n;i++){a[2][i] = (1.64-0.024*(i+1))*sin(0.2*(i+1))-0.64*exp(0.1/(i+1));}其他元素存储如下:for(i=0;i<n-1;i++){a[1][i+1] = 0.16;a[3][i] = 0.16;}for(i=0;i<n-2;i++){a[0][i+2] = -0.064;a[4][i] = -0.064;}(2)、幂法函数幂法函数为:double Power_Method(double a[5][n])。

数值分析报告第二题 北航 大作业

数值分析报告第二题  北航 大作业

实用文档数值分析第二题目录数值分析第二题 (1)1 引言: (1)1.1 矩阵的拟上三角化 (1)1.2 矩阵的特征值求解 (2)1.3 矩阵的特征向量求解 (4)2 算法的程序实现 (5)2.1 主程序 (5)2.2 子程序的实现 (7)3计算结果 (8)3.2矩阵Q、R 以及乘积RQ (9)3.3 各实特征值及其相对应的特征向量 (10)4 实验结论 (12)附录源代码 (12)1 引言1.1 矩阵的拟上三角化为了减少计算量,对矩阵A 利用Householder 矩阵进行相似变换,把A 化为上三角矩阵 。

对A 拟上三角化,得到拟上三角矩阵)1(-n A ,具体算法如下: 记A A =)1(,并记)(r A 的第r 列至第n 列的元素为()n r r j n i a r ij,,1,;,,2,1)( +==。

对于2,,2,1-=n r 执行1. 若()n r r i a r ir ,,3,2)( ++=全为零,则令)()1(r r A A =+,转5;否则转2。

2. 计算()∑+==nr i r irr a d 12)(()()r r r r r r r r r r d c a d a c ==-=++则取,0sgn )(,1)(,1若)(,12r rr r r r a c c h +-=3. 令()n Tr nrr r r r r r r r R a a c a u ∈-=++)()(,2)(,1,,,,0,,0 。

4. 计算r r T r r h u A p /)(= r r r r h u A q /)(=r r Tr r h u p t /=r r r r u t q -=ωT rr T r r r r p u u A A --=+ω)()1(5. 继续。

1.2 矩阵的特征值求解使用带双步位移的QR 方法计算矩阵)1(-n A 的全部特征值,也是A 的全部特征值,具体算法如下:1. 给定精度水平0>ε和迭代最大次数L 。

北航飞行力学大作业.

飞行力学大作业1理论推导方程在平面地球假设下,推导飞机质心在体轴系下的动力学方。

质心惯性加速度的基本方程是式(5.1.7),其中动点就是在转动参考系F E 中的O y 。

这样质心相r' 对于地球的速度,已用来表示。

这里假设地轴固定于惯性空间,且。

因此,的原点的E V 0ω= E F 加速度就是与地球转动有关的向心加速度。

数值比较表明,这一加速度和g 相比通常可以略去。

0a 而对于式(5.1.7)中的向心加速度项的情况也是一样的,,也通常省略。

在式(5.1.7)中剩下r ωω' 的两项中,而哥氏加速度为。

后者取决于飞行器速度的大小和方向,并且在轨道速E r V'= 2E E V ω 度时至多为10%g 。

当然在更高速度时可能更大。

所以保留此项。

最后质心的加速度可以简化为如下形式:2E E E CE EE E a V V ω=+ 有坐标转换知:(1)()()222()E E E E E E CB BE CE BE E E E BE E BE E E E B E E E E E E E B B B B B B B B Ba L a L V V L V L V V V V V V ωωωωωωω==+=+=+-+=++ 体轴系中的力方程为:f=m 而 f=+mg+TCB a B A 设飞机的迎角为,侧滑角为,则体轴系的气动力表示为:αβ cos cos cos sin sin ()()sin cos 0sin cos sin sin cos x y BW W y Z z A D D A L A L L C C A L a a a L αβαβααβββββ----⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==--=-⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥---⎣⎦⎣⎦⎣⎦⎣⎦重力在牵连垂直坐标系下为:(3)00V g g ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦设发动机的安装角为,发动机的推力在机体坐标系的表示如下:τ (4)cos 0sin Z x y T T T T T ττ⎡⎤⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦由坐标转换可知 :(5)sin sin cos cos cos B BV V mg mL g mg θφθφθ-⎡⎤⎢⎥==⎢⎥⎢⎥⎣⎦所以由上述公式可知:+= m = m [] (6)sin sin cos cos cos mg θφθφθ-⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦X Y Z ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦CB a ()E E E B B B V V ωω++ 其中:(7)cos cos cos sin sin cos cos 0sin cos 00sin 0sin cos sin sin cos 0sin cos E B BW u V V V v L V w a a a a αβαβααβββββββ--⎡⎤⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥====⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦⎣⎦⎣⎦(8)B p q r ω⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦E B EE B BE B p q r ω⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦(9)带入原方程,可得其质心的动力学方程:cos sin [()()]cos sin [()()]sin cos cos [()()]EE x B B E Ey B B E Ez B B A T mg m u q q w r r v A mg m v r r u p p w A T mg m w p p v q q u τθθφτθφ+-=++-++=++-+-+=++-+ (10)(2)飞机的转动动力学方程:由G h = (11)且I I I h R R dm=⎰()I IB B B B R L R R ω=+ (12)由坐标变换知道:B BI I BI I IB B BI I IB B B h L h L R L R dm L R L R dmω==+⎰⎰ (13)由书上的(4.7,4)的规则知道:B BI I IB R L R L = (14)B B B B B B h R R dm R R dmω=+⎰⎰ (15)因为飞机一般认为是刚体飞机,故其变形分量一般认为为0,所以:(16)B B B B B B B B Bxxy zx B xyyyz zx yzz h R R dm R R dm I I I I I I I I I ωωκωκ==-=⎡⎤--⎢⎥=--⎢⎥⎢⎥--⎣⎦⎰⎰(17)22==0))()()()()x xy zx B xyyyz zx yzz xy yz r r x zx y z y yr ry zx z x xzr r z zx x y x y I I I I I I I I I I I L I p I r pq I I qr r h q h M I qI r p I I rp r h p h N I rI p qr I I pq q h p h κ⎡⎤--⎢⎥=--⎢⎥⎢⎥--⎣⎦=-+---+=----+-=-----+∑∑∑∑∑∑ ((考虑发动机转子的转动惯量,可得(18)r r r B B B h κω=(19)r r B B B BB B B B h R R dm h h ωκω=+=+∑∑⎰ 可知在体轴系下的各转矩为:r r B BI I B B B B B B B B B BB B B G L G h h h h ωκωκωωκωω==+=++++∑∑(20)000x xy zx x xy zx x xy zx xy yyz xy y yz xy yyz zxyz z zx yz z zx yz z L I I I p I I I p r q I I I p M I I I q I I I q r p I I I q N I I I r I I I r q p I I I r ⎡⎤⎡⎤⎡⎤-------⎡⎤⎡⎤⎡⎤⎡⎤⎡⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=--+--+---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-------⎣⎦⎣⎦⎣⎦⎣⎦⎣⎦⎣⎦⎣⎦ 000r r xx r r y y r r z z h r q h h r p h h q p h ⎤⎢⎥⎢⎥⎢⎥⎣⎦⎡⎤⎡⎤-⎡⎤⎢⎥⎢⎥⎢⎥++-⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦∑∑∑∑∑∑ (3)(21)()E V VB B B V L V W =+ ;(22)B u V v w ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦y x B z W W W W ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦()cos cos ()(sin sin cos cos sin )()(cos sin cos sin sin )E x y z xu W v W w W θψφθψφψφθψφψ=+++-+++ ()cos sin ()(sin sin sin cos cos )()(cos sin sin sin cos )E x y z yu W v W w W θψφθψφψφθψφψ=++++++-(23)()sin ()cos cos cos E x y zu W v W w θθφθ=++++ (4)由公式32V i j k ωωφθψ-=++ 再根据欧拉角的矩阵变化知(24)100i ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦30cos sin j φφ⎡⎤⎢⎥=⎢⎥⎢⎥-⎣⎦2sin cos sin cos cos k θθφθφ-⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦当和均予忽略时,则[P ,Q ,R]=[p ,q ,r],即F B 相对于F I 的角速度,方程可写成如下形式:V ωE ω(25)10sin 0cos cos sin 0sin cos cos P Q R θφφθφθφθφψ⎡⎤-⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦通过求逆,知:(26)1sin tan cos tan 0cos sin 0sin sec cos sec P Q R φφθφθθφφψφθφθ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=-⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ (5)当无风和具有对称面的刚体飞机,其六自由度运动方程为:质心动力学方程:(27)cos sin [()()]cos sin [()()]sin cos cos [()()]EE x B B E E y B B E Ez B B A T mg m u q q w r r v A mg m v r r u p p w A T mg m w p p v q q u τθθφτθφ+-=++-++=++-+-+=++-+ 若忽略地球的自转则可得:(28)cos sin []cos sin []sin cos cos []x y z A T mg m uqw rv A mg m vru pw A T mg m wpv qu τθθφτθφ+-=+-+=+--+=+- 绕质心转动的动力学方:由于具有对称面,且可以忽略有:B κ==0xy yz I I 根据(2)推出其简化的动力学方程为:(29)22))()()()()x zx y z y zx z x z zx x y L I p I r pq I I qrM I qI r p I I rp N I rI p qr I I pq =-+--=----=---- ((质心运动学方程:根据(3)可知,(30)()cos cos ()(sin sin cos cos sin )()(cos sin cos sin sin )()cos sin ()(sin sin sin cos cos )()(cos sin sin sin cos )()sin ()cos cos cos E x y z E x y z E x y xu W v W w W yu W v W w W zu W v W w θψφθψφψφθψφψθψφθψφψφθψφψθθφθ=+++-+++=++++++-=++++ 由于是无风,故(31)0x y z W W W ===(32)cos cos (sin sin cos cos sin )(cos sin cos sin sin )cos sin (sin sin sin cos cos )(cos sin sin sin cos )sin cos cos cos E E E xu v w yu v w zu v w θψφθψφψφθψφψθψφθψφψφθψφψθθφθ=+-++=+++-=++ 绕质心转动的运动学方程:根据(4)可知(33)sin tan cos tan cos sin sin sec cos sec P Q R Q R Q R φφθφθθφφψφθφθ=++=-=+ 二、小扰动线化设基准运动为对称定常直线水平飞行,假设飞机是具有对称面的刚体。

北航数值分析大作业第二题

数值分析第二次大作业史立峰SY1505327一、 方案(1)利用循环结构将sin(0.50.2)()1.5cos( 1.2)(){i j i j ij i j i j a +≠+==(i,j=1,2,……,10)进行赋值,得到需要变换的矩阵A ;(2)然后,对矩阵A 利用Householder 矩阵进行相似变换,把A 化为上三角矩阵A(n-1)。

对A 拟上三角化,得到拟上三角矩阵A(n-1),具体算法如下:记A(1)=A ,并记A(r)的第r 列至第n 列的元素为()n r r j n i a r ij,,1,;,,2,1)(ΛΛ+==。

对于2,,2,1-=n r Λ执行 1. 若()n r r i a r ir,,3,2)(Λ++=全为零,则令A(r+1) =A(r),转5;否则转2。

2. 计算()∑+==nr i r irr a d 12)(()()r r r r r r r r r r d c a d a c ==-=++则取,0sgn )(,1)(,1若)(,12r rr r r r a c c h +-=3. 令()nTr nrr r r r r r r r R a a c a u ∈-=++)()(,2)(,1,,,,0,,0ΛΛ。

4. 计算r r T r r h u A p /)(= r r r r h u A q /)(=r r Tr r h u p t /=r r r r u t q -=ωT rr T r r r r p u u A A --=+ω)()1(5. 继续。

(3)使用带双步位移的QR 方法计算矩阵A (n-1)的全部特征值,也是A 的全部特征值,具体算法如下:1. 给定精度水平0>ε和迭代最大次数L 。

2. 记n n ij n a A A ⨯-==][)1()1()1(,令n m k ==,1。

3. 如果ε≤-)(1,k m m a ,则得到A 的一个特征值)(k mm a ,置1:-=m m (降阶),转4;否则转5。

北航数值分析大作业第二题

“数值分析“计算实习大作业第二题——SY1415215孔维鹏一、计算说明本程序采用带双步位移的QR方法求解矩阵A的所有特征值,然后采用反幂法求解矩阵A的实特征值对应的特征向量。

在采用带双步位移的QR方法求解特征值时,对教材上所提供的具体算法作稍微的改动,以简化程序,具体算法如下所示:1、计算出A拟上三角化后的矩阵,给定精度水平和最大迭代次数L;2、记,令k=1,m=n;3、如果,则可直接计算出最后1或2个特征值,转8,否则转4;4、如果,则可得一个特征值,置m=m-1;转3,否则转5;5、如果,则可得两个特征值,置m=m-2;转3,否则转6;6、记,计算7、k=k+1,转38、A的全部特征值已经求出,停止计算。

二、计算源程序(FORTRAN)PROGRAM SY1415215_2PARAMETER (N=10)DIMENSION A(N,N),A1(N,N),A2(N,N),C(2,N),Q(N,N),R(N,N),CR(N),CM(N)!C为存储特征值的数组,1为实部,为虚部REAL(8) A,A1,A2,C,Q,R,CME=1E-12 !精度水平L=1000 !迭代最大次数OPEN(1,FILE='数值分析大作业第二题计算结果.TXT')DO I=1,NDO J=1,NIF(I==J) THENA(I,J)=*COS(I+*J)ELSEA(I,J)=SIN*I+*J)ENDIFENDDOENDDOA1=AWRITE(*,"('矩阵A为:')")WRITE(1,"('矩阵A为:')")DO I=1,NDO J=1,NWRITE(*,"(2X,,2X,\)") A(I,J)WRITE(1,"(2X,,2X,\)") A(I,J)ENDDOWRITE(*,"(' ')")WRITE(1,"(' ')")ENDDO!使用矩阵的拟上三角化的算法将矩阵A化为拟上三角矩阵A(n-1)CALL HESSENBERG(A,N)WRITE(*,"('拟上三角化后矩阵A(n-1)为:')")WRITE(1,"('拟上三角化后矩阵A(n-1)为:')")DO I=1,NDO J=1,NWRITE(*,"(2X,,2X,\)") A(I,J)WRITE(1,"(2X,,2X,\)") A(I,J)ENDDOWRITE(*,"('')")WRITE(1,"('')")ENDDO!计算对矩阵A(n-1)实行QR方法迭代结束后所得矩阵A2=ACALL QRD(A2,N,Q,R)WRITE(*,"('对矩阵A(n-1)实行QR方法迭代结束后所得Q为:')") WRITE(1,"('对矩阵A(n-1)实行QR方法迭代结束后所得Q为:')") DO I=1,NDO J=1,NWRITE(*,"(2X,,2X,\)") Q(I,J)WRITE(1,"(2X,,2X,\)") Q(I,J)ENDDOWRITE(*,"('')")WRITE(1,"('')")ENDDOWRITE(*,"('对矩阵A(n-1)实行QR方法迭代结束后所得R为:')") WRITE(1,"('对矩阵A(n-1)实行QR方法迭代结束后所得R为:')") DO I=1,NDO J=1,NWRITE(*,"(2X,,2X,\)") R(I,J)WRITE(1,"(2X,,2X,\)") R(I,J)ENDDOWRITE(*,"('')")WRITE(1,"('')")ENDDO!使用带双步位移的QR方法求解矩阵A(n-1)的特征值K=1M=NDO WHILE(K<=L)IF(M<=2) THENIF(M==1) THENC(1,M)=A(M,M)ELSE IF(M==2) THENCALL CALCUS(A,N,M,C)ENDIFEXITELSE IF(ABS(A(M,M-1))<E) THENC(1,M)=A(M,M)M=M-1ELSE IF(ABS(A(M-1,M-2))<E) THENCALL CALCUS(A,N,M,C)M=M-2ELSECALL CALM(A,M,N)ENDIFK=K+1ENDDOWRITE(*,"('矩阵A的全部特征值为:')")WRITE(1,"('矩阵A的全部特征值为:')")DO J=1,NWRITE(*,",'+',,'i')") C(1,J),C(2,J)WRITE(1,",'+',,'i')") C(1,J),C(2,J)ENDDO!使用反幂法求解A的相应于实特征值的特征向量J=1DO I=1,NIF(C(2,I)==0)THENCR(J)=C(1,I)J=J+1ENDIFENDDOJC=J-1WRITE(*,"('矩阵A的实特征值为:')")WRITE(1,"('矩阵A的实特征值为:')")DO I=1,JCWRITE(*,"") CR(I)WRITE(1,"") CR(I)ENDDODO II=1,JCDO I=1,NDO J=1,NIF(I==J) THENA(I,J)=A1(I,J)-CR(II)ELSEA(I,J)=A1(I,J)ENDIFENDDOENDDOCALL INPOVERMETHOD(A,N,CM)WRITE(*,"('与实特征值',,'对应的特征向量为:')") CR(II) WRITE(1,"('与实特征值',,'对应的特征向量为:')") CR(II) DO I=1,NWRITE(*,"(2X,,2X,\)") CM(I)WRITE(1,"(2X,,2X,\)") CM(I)ENDDOWRITE(*,"('')")WRITE(1,"('')")ENDDOCLOSE(1)END!***************拟上三角化子函数*************************!SUBROUTINE HESSENBERG(A,N)DIMENSION A(N,N),P(N),Q(N),W(N),U(N),AT(N,N)REAL(8) A,P,Q,W,U,ATREAL(8) S0,S1,S2,S3,S4,TDO L=1,N-2JUDGE=0DO I=L+2,NIF(A(I,L)/=0) THENJUDGE=1EXITENDIFENDDOIF(JUDGE==0) THENA=ACYCLEELSE IF(JUDGE/=0) THEN!计算DRS0=0DO I=L+1,NS0=S0+A(I,L)**2ENDDODR=SQRT(S0)!计算CRIF(A(L+1,L)==0)THENCR=DRELSECR=-SGN(A(L+1,L))*DRENDIF!计算HRHR=CR**2-CR*A(L+1,L)!给u赋值IF(I<L+1) THENU(I)=0ELSE IF(I==L+1) THEN U(I)=A(I,L)-CRELSE IF(I>L+1) THEN U(I)=A(I,L)ENDIFENDDO!计算PDO I=1,NDO J=1,NAT(I,J)=A(J,I)ENDDOENDDODO I=1,NS1=0DO J=1,NS1=S1+AT(I,J)*U(J)ENDDOP(I)=S1/HRENDDO!计算QDO I=1,NS2=0DO J=1,NS2=S2+A(I,J)*U(J)ENDDOQ(I)=S2/HRENDDO!计算TS3=0DO I=1,NS3=S3+P(I)*U(I)ENDDOT=S3/HR!计算WDO I=1,NW(I)=Q(I)-T*U(I)!计算A(r+1)DO I=1,NDO J=1,NA(I,J)=A(I,J)-W(I)*U(J)-U(I)*P(J)ENDDOENDDOENDIFENDDORETURNEND!***************符号函数子程序*****************!FUNCTION SGN(X)REAL(8) XIF(X>0) THENSGN=1ELSE IF(X<0) THENSGN=-1ELSE IF(X==0) THENSGN=0ENDIFEND!*********计算二阶子阵特征值s1,s2子函数*******!SUBROUTINE CALCUS(X,N,M,Y)DIMENSION X(N,N),Y(2,N)REAL(8) A,B,C,D,X,YA=1C=X(M-1,M-1)*X(M,M)-X(M-1,M)*X(M,M-1)B=-(X(M-1,M-1)+X(M,M))D=B**2-4*CIF(D>=0) THENY(1,M)=(-B-SQRT(D))/2Y(1,M-1)=(-B+SQRT(D))/2ELSEIF(D<0) THENY(1,M)=-B/2Y(1,M-1)=-B/2Y(2,M)=-SQRT(-D)/2Y(2,M-1)=-SQRT(-D)/2ENDIFRETURNEND!*********计算Mk,Ak+1子函数************!SUBROUTINE CALM(A,M,N)DIMENSION A(N,N),MK(M,M),X(M,M),QK(M,M),RK(M,M),S1(M,M),S2(M,M),QKT(M,M) REAL(8) A,MK,X,QK,RK,QKTREAL(8) S0,S1,S2DO I=1,MDO J=1,MIF(I==J) THENX(I,J)=1ELSEX(I,J)=0ENDIFENDDOENDDOS=A(M-1,M-1)+A(M,M)T=A(M-1,M-1)*A(M,M)-A(M,M-1)*A(M-1,M)DO I=1,MDO J=1,MS0=0DO K=1,MS0=S0+A(I,K)*A(K,J)ENDDOMK(I,J)=S0-S*A(I,J)+T*X(I,J)ENDDOENDDO!对Mk做QR分解CALL QRD(MK,M,QK,RK)DO I=1,MDO J=1,MQKT(I,J)=QK(J,I)ENDDOENDDODO I=1,MDO J=1,MS1(I,J)=0DO K=1,MS1(I,J)=S1(I,J)+QKT(I,K)*A(K,J)ENDDOENDDOENDDOA=S1DO I=1,MDO J=1,MS2(I,J)=0DO K=1,MS2(I,J)=S2(I,J)+A(I,K)*QK(K,J)ENDDOENDDOENDDOA=S2RETURNEND!************QR分解子程序***************!SUBROUTINE QRD(A,N,Q,R)DIMENSION A(N,N),AT(N,N),Q(N,N),U(N),W(N),P(N),R(N,N) REAL(8) A,AT,Q,U,W,P,RREAL(8) DR,S0,CR,HR,S1,S2DO I=1,NDO J=1,NIF(I==J) THENQ(I,J)=1ELSEQ(I,J)=0ENDIFENDDOENDDODO L=1,N-1JUDGE=0DO I=L+1,NIF(A(I,L)/=0) THENJUDGE=1EXITENDIF!A(I,L)中有一个不为零,判断条件为真,跳出循环转ENDDOIF(JUDGE==0) THENQ=QA=ACYCLE!A(I,L)全为零,结束本循环,进入下一个ELSE IF(JUDGE/=0) THEN!计算DRS0=0DO I=L,NS0=S0+A(I,L)**2ENDDODR=SQRT(S0)!计算CRIF(A(L,L)==0)THENCR=DRELSECR=-SGN(A(L,L))*DRENDIF!计算HRHR=CR**2-CR*A(L,L)!给u赋值DO I=1,NIF(I<L) THENU(I)=0ELSE IF(I==L) THENU(I)=A(I,L)-CRELSE IF(I>L) THENU(I)=A(I,L)ENDIFENDDO!计算WDO I=1,NS1=0DO J=1,NS1=S1+Q(I,J)*U(J)ENDDOW(I)=S1ENDDO!计算Q(r+1)DO I=1,NDO J=1,NQ(I,J)=Q(I,J)-W(I)*U(J)/HRENDDOENDDO!计算PDO I=1,NDO J=1,NAT(I,J)=A(J,I)ENDDOENDDODO I=1,NS2=0DO J=1,NS2=S2+AT(I,J)*U(J)ENDDOP(I)=S2/HRENDDO!计算A(r+1)DO I=1,NDO J=1,NA(I,J)=A(I,J)-U(I)*P(J)ENDDOENDDOENDIFENDDOQ=QR=ARETURNEND!*************运用反幂法求解矩阵A实特征值的特征向量***********!SUBROUTINE INPOVERMETHOD(A,N,Y)DIMENSION A(N,N),U(N),Y(N),U1(N,N),L1(N,N)REAL(8) E,Z,Z1,Z2,S1,S2,BREAL(8) A,U,Y,U1,L1U(I)=1ENDDO!任取非零向量UCALL DETA(A,N,U1,L1)Z2=EIZ1=E=1K=1DO WHILE (E>1E-12)S1=0DO I=1,NS1=S1+U(I)**2ENDDOB=SQRT(S1) !1DO I=1,NY(I)=U(I)/BENDDO!2CALL DOOLITTLE(U1,L1,Y,N,U) !3利用DOOLITTLE分解法法求解Au=yS2=0DO I=1,NS2=S2+Y(I)*U(I)ENDDOZ1=Z2Z2=S2 !4E=ABS(1/Z2-1/Z1)/ABS(1/Z2) !判断是否满足精度K=K+1ENDDORETURNENDSUBROUTINE DOOLITTLE(U,L,B1,N,X)DIMENSION B(N),U(N,N),X(N),Y(N),B1(N)REAL(8) L(N,N)REAL(8) B,U,X,Y,B1REAL(8) S1,S2,S3,S4B=B1Y(1)=B(1)S3=0DO M=1,I-1S3=S3+L(I,M)*Y(M)ENDDOY(I)=B(I)-S3ENDDOX(N)=Y(N)/U(N,N)DO I=N-1,1,-1S4=0DO M=I+1,NS4=S4+U(I,M)*X(M)ENDDOX(I)=(Y(I)-S4)/U(I,I)ENDDORETURNENDSUBROUTINE DETA(A1,N,U,L) DIMENSION A(N,N),U(N,N),A1(N,N) REAL(8) L(N,N)REAL(8) X,S1,S2REAL(8) A,U,A1X=1A=A1!对矩阵A进行Doolittle分解DO K=1,NDO J=K,NS1=0DO M=1,K-1S1=S1+L(K,M)*U(M,J)ENDDOU(K,J)=A(K,J)-S1A(K,J)=U(K,J)ENDDOIF (K==N) THENEXITELSEDO I=K+1,NS2=0DO M=1,K-1S2=S2+L(I,M)*U(M,K)ENDDOL(I,K)=(A(I,K)-S2)/U(K,K)A(I,K)=L(I,K)ENDDOENDIFENDDORETURNEND三、计算结果矩阵A为:+00 +00 +00 +00 +00 +00 +00 +00 +00 +00+00 +00 +00 +00 +00 +00 +00 +00 +00 +00+00 +00 +01 +00 +00 +00 +00 +00 +00+00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00+00 +00 +00 +00 +01 +00 +00 +00 +00+00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00+00 +00 +00 +00 +00 +00 +00 +00 +01拟上三角化后矩阵A(n-1)为:+00 +01 +00 +00 +01 +00 +00 +00+01 +01 +01 +00 +00 +01 +00 +01 +00 +00+01 +01 +01 +00 +01 +00 +00 +00 +00+01 +01 +01 +01 +00 +00 +00 +00+01 +00 +00 +00 +00 +00+00 +01 +00 +00 +00 +00+00 +00 +00+00 +00 +00 +00+00 +00 +00+00 +00对矩阵A(n-1)实行QR方法迭代结束后所得Q为:+00 +00 +00 +00 +00 +00+00 +00 +00 +00+00 +00 +00 +00+00 +00 +00 +00 +00 +00+00 +00+00 +00 +00 +00 +00+00 +00 +00 +00+00+00 +00 +00+00 +00对矩阵A(n-1)实行QR方法迭代结束后所得R为:+01 +01 +01 +00 +01 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +01 +01 +00 +01 +00 +01 +00 +00 +00 +00 +01 +00 +00 +00 +00+00 +00 +01 +01 +00 +00 +00+00 +00 +01 +00 +00 +00 +00+00 +00 +00 +00 +00 +00 +00+00 +00 +00 +00 +01 +00 +00+00 +00 +00 +00 +00 +00+00 +00 +00 +00矩阵A的全部特征值为:+01+ +00i+01++00i+01++00i+01+ +00i+01+ +00i+00++00i+00++00i+00+ +00i+00+ +00i+ +00i矩阵A的实特征值为:+01+01+01+00+00与实特征值 +01对应的特征向量为:+00 +00 +00 +00 +00 +00 +00 +00 +00与实特征值 +01对应的特征向量为:+00 +00 +00 +00 +00 +00 +00与实特征值+01对应的特征向量为:+00 +00 +00与实特征值 +00对应的特征向量为:+00 +00 +00 +00 +00与实特征值 +00对应的特征向量为:+00 +00 +00 +00 +00 +00 +00与实特征值对应的特征向量为:+00 +00 +00 +00 +00 +00 +00 +00。

北航计算流体力学大作业题目及分析

• 体积力模型 • 要求:阐述清楚各类模型的特点及其适用性,利用 文献中的算例说明各模型的优缺点
无反射边界条件方法
• Thompson特征边界条件(一维到高维) • Giles无反射边界条件(二维) • 要求:要阐述清楚以上两种无反射边界条 件方法的原理以及推导过程,并利用文献 中的算例说明各种边界条件定义方法对模 拟结果的影响
• • • • 当地时间步长方法 残差光顺法 多重网格方法 低速预处理方法
• 要求:三种方法的原理、数值方法、适用 性等要阐述清楚,要有文献的算例和分析
网格生成方法及网格质量控制
• 结构化网格生成方法 • 非结构网格生成方法
• 网格类型及网格质量对模拟结果准确性的 影响分析
• 要求:要阐述清楚常用的网格生成方法, 对网格质量对模拟结果的影响要利用文献 的算例进行分析
通量差分分裂格式
• • • • Riemann问题及近似Riemann解 Godnov格式 Roe格式 膨胀激波问题、Carbuncle问题(运动强激 波的计算不稳定问题)、以及熵修正方法
• 要求:要阐述清楚格式的构造思路和方法、 格式的特点、与其它类型通量格式的计算 比较等
对流迎风分裂格式
• AUSM格式(Liou M.S.)
– 格式构造的思想 – AUSM、AUSMD/P格式(Jameson)
– SLIP格式、CUSP格式、…… – LED概念
• 要求:要阐述清楚格式的构造思路和方法、 格式的特点、与其它类型通量格式的计算 比较等
通量计算的高精度格式
• ENO、WENO概念及格式 • 间断Galerkin方法 • 拟谱方法
– Spectral Difference – Spectral Volume – Penalty Lifting method
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析B》大作业一 SY1103120 朱舜杰 一. 算法设计方案: 1.矩阵A的存储与检索

将带状线性矩阵A[501][501]转存为一个矩阵MatrixC[5][501] . 由于C语言中数组角标都是从0开始的,所以在数组MatrixC[5][501]中检索A的带内元素aij

的方法是:

A的带内元素aij=C中的元素ci-j+2,j

2.求解λ1,λ501,λs

① 首先分别使用幂法和反幂法迭代求出矩阵按摸最大和最小的特征值λmax和λmin。λmin即为λs

如果λmax>0,则λ501=λmax;如果λmax<0,则λ1=λmax

②使用带原点平移的幂法(mifa()函数),令平移量p=λmax

,求出

对应的按摸最大的特征值λ,max,

如果λmax>0,则λ1=λ,max+p;如果λmax<0,则λ501=λ,max

+p。

3.求解A的与数μk=λ1+k(λ501-λ1)/40的最接近的特征值λik

(k=1,2,…,39)。 使用带原点平移的反幂法,令平移量p=μk,即可求出与μk最接近的特征值λik

4.求解A的(谱范数)条件数cond(A)2和行列式detA。 ①cond(A)2=|λ1/λn|,其中λ1和λn

分别是矩阵A的模最大和最

小特征值。 ②矩阵A的行列式可先对矩阵A进行LU分解后,detA等于U所有对角线上元素的乘积。

二. 源程序 #include #include #include #include #include #include #include

#define E 1.0e-12 /*定义全局变量相对误差限*/ int max2(int a,int b) /*求两个整型数最大值的子程序*/ { if(a>b) return a; else return b; } int min2(int a,int b) /*求两个整型数最小值的子程序*/ { if(a>b) return b; else return a; } int max3(int a,int b,int c) /*求三整型数最大值的子程序*/ { int t; if(a>b) t=a; else t=b; if(treturn(t); }

void assignment(double array[5][501]) /*将矩阵A转存为数组C[5][501]*/ { int i,j,k; //所有元素归零 for(i=0;i<=4;) { for(j=0;j<=500;) { array[i][j]=0; j++; } i++; } //第0,4行赋值 for(j=2;j<=500;) { k=500-j; array[0][j]=-0.064; array[4][k]=-0.064; j++; } //第1,3行赋值 for(j=1;j<=500;) { k=500-j; array[1][j]=0.16; array[3][k]=0.16; j++; } //第2行赋值 for(j=0;j<=500;) { k=j; j++; array[2][k]=(1.64-0.024*j)*sin((double)(0.2*j))-0.64*exp((double)(0.1/j)); }

} double mifa(double u[501],double array[5][501],double p) /*带原点平移的幂法*/ { int i,j; /* u[501]为初始迭代向量*/ double a,b,c=0; /* array[5][501]为矩阵A的转存矩阵*/ double y[501]; /*p为平移量*/ for(;;) { a=0; b=0; /*选用第一种迭代格式*/ //求ηk-1

for(i=0;i<=500;i++)

{ a=a+u[i]*u[i]; } a=sqrt(a); //求yk-1

for(i=0;i<=500;i++)

{ y[i]=u[i]/a; } //求uk

for(i=0;i<=500;i++)

{ u[i]=0; for(j=max2(i-2,0);j<=min2(i+2,500);j++) { u[i]+=array[i-j+2][j]*y[j]; } u[i]=u[i]-p*y[i]; /*引入平移量*/ } //求βk

for(i=0;i<=500;i++)

{ b+=y[i]*u[i]; } if(fabs((b-c)/b)<=E) /*达到精度水平,迭代终止*/ break; c=b; } return (b+p); /*直接返回A的特征值*/

} void chuzhi(double a[]) /*用随机数为初始迭代向量赋值*/ { int i; srand((int)time(0)); for(i=0;i<=500;i++) { a[i]=(10.0*rand()/RAND_MAX); /*生成0~10的随机数*/ } } void chuzhi2(double a[],int j) /*令初始迭代向量为ei*/ { int i; for(i=0;i<=500;i++) { a[i]=0; } a[j]=1; }

void LU(double array[5][501]) /*对矩阵A进行Doolittle分解*/ { /*矩阵A转存在C[5][501]中*/ int j,k,t; /*分解结果L,U分别存在C[5][501]的上半部与下半部*/ for(k=0;k<=500;k++) { for(j=k;j<=min2((k+2),500);j++) { for(t=max3(0,k-2,j-2);t<=(k-1);t++) { array[k-j+2][j]-=array[k-t+2][t]*array[t-j+2][j];

} } if(k<500) for(j=k+1;j<=min2((k+2),500);j++) { for(t=max3(0,k-2,j-2);t<=(k-1);t++) { array[j-k+2][k]-=array[j-t+2][t]*array[t-k+2][k];

} array[j-k+2][k]=array[j-k+2][k]/array[2][k]; }

} }

double fmifa(double u[501],double array[5][501],double p) { /*带原点平移的反幂法*/ int i,j; double a,b,c=0; double y[501]; //引入平移量 for(i=0;i<=500;i++) { array[2][i]-=p; } //先将矩阵Doolittle分解 LU(array);

for(;;) { a=0; b=0; //求ηk-1

for(i=0;i<=500;i++)

{ a=a+u[i]*u[i]; } a=sqrt(a); //求yk-1

for(i=0;i<=500;i++)

{ y[i]=u[i]/a; } //回带过程,求解uk

for(i=0;i<=500;i++)

{ u[i]=y[i]; }

for(i=1;i<=500;i++) { for(j=max2(0,(i-2));j<=(i-1);j++) { u[i]-=array[i-j+2][j]*u[j]; }

} u[500]=u[500]/array[2][500]; for(i=499;i>=0;i--) { for(j=i+1;j<=min2((i+2),500);j++) { u[i]-=array[i-j+2][j]*u[j]; }

u[i]=u[i]/array[2][i]; }

//求βk

for(i=0;i<=500;i++)

{ b+=y[i]*u[i]; } if(fabs((b-c)/b)<=E) /*达到精度要求,迭代终止*/ break; c=b; }

return (p+(1/b)); /*直接返回距离原点P最接近的A的特征值*/ } //主函数 main() { int i; double d1,d501,ds,d,a; double u[501]; double MatrixC[5][501]; printf(" 《数值分析》计算实习题目第一题\n"); printf(" SY1103120 朱舜杰\n");

//将矩阵A转存为MatrixC assignment(MatrixC);

//用带原点平移的幂法求解λ1,λ501 chuzhi(u); d=mifa(u,MatrixC,0); chuzhi(u); a=mifa(u,MatrixC,d); if(d<0) { d1=d; d501=a;

相关文档
最新文档