版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数 值 分 析(B) 大 作 业(二)1、算法设计:矩阵的拟上三角化:对实矩阵A进行相似变换化为拟上三角矩阵,其变换矩阵采用Householder矩阵,变换过程如下:若,则;否则,。当时,得,令又是对称正交矩阵,于是成立,因而与 相似。矩阵的QR分解:矩阵的QR分解过程与拟上三角化过程相似,在这里不再重复其原理。 求全部特征值矩阵拟上三角化后利用带双步位移的QR方法,采用书本Page 63页具体算法实现。为了使编程方便,并体会goto语句使用的灵活性,程序中的跳转均使用goto Loop*实现。求A的相应于实特征值的特征向量求实特征值对应的特征向量,即是求解线性方程组,。因此,为得到全部实特征
2、值对应的特征向量,解线性方程组的过程要循环n次(n为矩阵阶数)。线性方程组的求解采用列主元素Gauss消去法。#include <stdio.h>#include <math.h>#define ERR1.0e-12/误差限#define N10/矩阵行列数 #define L1.0e5/最大迭代次数double ANN=0;void Init_A()/初始化矩阵int i,j;for(i=0;i<N;i+)for(j=0;j<N;j+)if(i=j)Aij=1.5*cos(i+1)+1.2*(j+1);else Aij=sin(0.5*(i+1)+0.2*
3、(j+1);/*void Display_A()int i,j;for(i=0;i<N;i+)for(j=0;j<N;j+)printf("%8.4f",Aij);printf("n");*/int Sgn(double a)if(a>=0)return 1;else return -1;void On_To_The_Triangle()/矩阵拟上三角化int i,j,r,flag=0;double cr,dr,hr,tr,temp;double urN,prN,qrN,wrN;for(r=1;r<=N-2;r+)flag=0;f
4、or(i=r+2;i<=N;i+)if(Ai-1r-1!=0)flag=1;break;if(0=flag)continue;dr=0;for(i=r+1;i<=N;i+)dr+=Ai-1r-1*Ai-1r-1;dr=sqrt(dr);if(0=Arr-1)cr=dr;else cr=-Sgn(Arr-1)*dr;hr=cr*cr-cr*Arr-1;for(i=1;i<=r;i+)uri-1=0;urr=Arr-1-cr;for(i=r+2;i<=N;i+)uri-1=Ai-1r-1;for(i=1;i<=N;i+)temp=0;for(j=1;j<=N;j
5、+)temp+=Aj-1i-1*urj-1;pri-1=temp/hr;for(i=1;i<=N;i+)temp=0;for(j=1;j<=N;j+)temp+=Ai-1j-1*urj-1;qri-1=temp/hr;temp=0;for(i=1;i<=N;i+)temp+=pri-1*uri-1;tr=temp/hr;for(i=1;i<=N;i+)wri-1=qri-1-tr*uri-1;for(i=1;i<=N;i+)for(j=1;j<=N;j+)Ai-1j-1=Ai-1j-1-wri-1*urj-1-uri-1*prj-1;void Get_Roo
6、ts(double eigenvalue2,int m,double ss,double tt)/求一元二次方程的根double discriminant=ss*ss-4*tt;/if(discriminant<0)*(*(eigenvalue+m-2)=0.5*ss;*(*(eigenvalue+m-2)+1)=0.5*sqrt(-discriminant);*(*(eigenvalue+m-1)=0.5*ss;*(*(eigenvalue+m-1)+1)=-0.5*sqrt(-discriminant);else*(*(eigenvalue+m-2)=0.5*(ss+sqrt(dis
7、criminant);*(*(eigenvalue+m-2)+1)=0;*(*(eigenvalue+m-1)=0.5*(ss-sqrt(discriminant);*(*(eigenvalue+m-1)+1)=0;void Get_Mk(double mkN,int m,double ss,double tt)/获取Mk,用于带双步位移的QR分解int i,j,k;for(i=0;i<m;i+)for(j=0;j<m;j+)*(*(mk+i)+j)=0;for(i=0;i<m;i+)for(j=0;j<m;j+)for(k=0;k<m;k+)*(*(mk+i)+
8、j)+=Aik*Akj;*(*(mk+i)+j)-=ss*Aij;if(j=i)*(*(mk+i)+j)+=tt;void QR_Reslove(double mkN,int m)/QR分解int i,j,r,flag=0;double cr,dr,hr,tr,temp;double urN,vrN,prN,qrN,wrN;double BNN,CNN;for(i=0;i<m;i+)for(j=0;j<m;j+)Bij=*(*(mk+i)+j);Cij=Aij;for(r=1;r<=m-1;r+)flag=0;for(i=r+1;i<=m;i+)if(Bi-1r-1!=
9、0)flag=1;break;if(0=flag)continue;dr=0;for(i=r;i<=m;i+)dr+=Bi-1r-1*Bi-1r-1;dr=sqrt(dr);if(0=Br-1r-1)cr=dr;else cr=-Sgn(Br-1r-1)*dr;hr=cr*cr-cr*Br-1r-1;for(i=1;i<r;i+)uri-1=0;urr-1=Br-1r-1-cr;for(i=r+1;i<=m;i+)uri-1=Bi-1r-1;for(i=1;i<=m;i+)temp=0;for(j=1;j<=m;j+)temp+=Bj-1i-1*urj-1;vri
10、-1=temp/hr;for(i=0;i<m;i+)for(j=0;j<m;j+)Bij-=uri*vrj;for(i=1;i<=m;i+)temp=0;for(j=1;j<=m;j+)temp+=Cj-1i-1*urj-1;pri-1=temp/hr;for(i=1;i<=m;i+)temp=0;for(j=1;j<=m;j+)temp+=Ci-1j-1*urj-1;qri-1=temp/hr;temp=0;for(i=1;i<=m;i+)temp+=pri-1*uri-1;tr=temp/hr;for(i=1;i<=m;i+)wri-1=qr
11、i-1-tr*uri-1;for(i=1;i<=m;i+)for(j=1;j<=m;j+)Ci-1j-1=Ci-1j-1-wri-1*urj-1-uri-1*prj-1;for(i=0;i<m;i+)for(j=0;j<m;j+)Aij=Cij;void Display_Eigenvalue(double value2)/显示特征值int i;for(i=0;i<N;i+)printf("%d=%8.4f",i+1,*(*(value+i);if(*(*(value+i)+1)>0)printf("+%8.4f",*(
12、*(value+i)+1);else if(*(*(value+i)+1)<0)printf("%8.4f",*(*(value+i)+1);printf("n");printf("n");int QR_With_Double_Step_Displacement(double eigenvalue2)/带双步位移QR分解求特征值int i,j,k=1,m=N;double s,t;double MkNN;for(i=0;i<N;i+)for(j=0;j<2;j+)eigenvalueij=0;dok+;if(m=1)
13、eigenvaluem-10=Am-1m-1;m-;continue;else if(m=2)s=Am-2m-2+Am-1m-1;t=Am-2m-2*Am-1m-1-Am-1m-2*Am-1m-2;Get_Roots(eigenvalue,m,s,t);/求一元二次方程的根m=0;continue;else if(m=0)return 0;else if(fabs(Am-1m-2)<=ERR)eigenvaluem-10=Am-1m-1;m-;continue;elses=Am-2m-2+Am-1m-1;t=Am-2m-2*Am-1m-1-Am-1m-2*Am-2m-1;if(fabs(
14、Am-2m-3)<=ERR)Get_Roots(eigenvalue,m,s,t);/求一元二次方程的根m-=2;continue;elseGet_Mk(Mk,m,s,t);/获取Mk,用于带双步位移的QR分解QR_Reslove(Mk,m);/QR分解while(k<L);printf("Errern");/迭代过程不成功,报错void Select_Principal_Element(int k)/Gauss消元法求解方程组之选主元int i,max=k;double transN;for(i=k+1;i<N;i+)if(fabs(Aik)>fa
15、bs(Amaxk)max=i;if(k=max)return;elsefor(i=k;i<N;i+)transi=Aki;Aki=Amaxi;Amaxi=transi;void Eliminant(int k)/Gauss消元法求解方程组之消元int i,j;double rate;for(i=k+1;i<N;i+)rate=Aik/Akk;for(j=k;j<N;j+)Aij=Aij-rate*Akj;void Back_Substitution(double Eigenvector)/Gauss消元法求解方程组之回代int i,j,k;double Temp_MNN+1;
16、for(i=0;i<N-1;i+)for(j=i;j<N;j+)Temp_Mij=Aij;Temp_MiN=0;Temp_MN-1N-1=1;Temp_MN-1N=1;for(k=N-1;k>=0;k-)*(Eigenvector+k)=Temp_MkN;for(i=k;i<N-1;i+)*(Eigenvector+k)=*(Eigenvector+k)-*(Eigenvector+i+1)*Temp_Mki+1;*(Eigenvector+k)=*(Eigenvector+k)/Temp_Mkk;void Display_Eigenvector(double Eige
17、nvector,double eigenvalue)/显示特征值对应特征向量int i;printf("When =%8.4fnEigenvector=n",eigenvalue);for(i=0;i<N;i+)printf("%8.4f",*(Eigenvector+i);printf("n");void Get_Eigenvector(double value2)/利用Gauss消元法求解特征向量int i,j;double eigenvalue;double EigenvectorN;for(i=0;i<N;i+)i
18、f(*(*(value+i)+1)=0)Init_A();/初始化矩阵eigenvalue=*(*(value+i);for(j=0;j<N;j+)Ajj-=eigenvalue;for(j=0;j<N-1;j+)Select_Principal_Element(j);/Gauss消元法求解方程组之选主元Eliminant(j);/Gauss消元法求解方程组之消元Back_Substitution(Eigenvector);/Gauss消元法求解方程组之回代Display_Eigenvector(Eigenvector,eigenvalue);/显示特征值对应特征向量main()double eigenvalueN2;Init_A(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动物赛事活动方案策划(3篇)
- 抽奖活动策划方案汽车(3篇)
- 演出主题营销方案(3篇)
- 妊娠合并自身免疫病胎儿的干预
- 华为营销控制方案(3篇)
- 字词综合基础解题达标能力卷
- 材料作文多角度立意拓展快速测评试卷
- 铜仁营销方案服务(3篇)
- 妊娠合并胰腺炎的多学科协作模式创新
- 妊娠合并胰腺炎的个体化药物治疗方案
- 2026山东菏泽生物医药职业学院招聘工作人员120人农业考试参考题库及答案解析
- 3.4 我们来造“环形山”课件(内嵌视频) 2025-2026学年教科版科学三年级下册
- 广东省茂名电白区七校联考2026届中考一模数学试题含解析
- 直播基地规划建设方案报告
- (新疆二模)新疆2026年普通高考三月适应性检测文科综合试卷(含答案)
- 喷漆房安全管理制度
- 《无人机导航定位技术》全套教学课件
- TCEC《 有机液体储氢载体 》编制说明
- 拆除房屋施工沟通协调
- 韦源口镇中心小学教学楼新建工程防水施工专项方案
- 近十年化工安全事故案例
评论
0/150
提交评论