北航数值分析实习第二题Word文档下载推荐.docx

上传人:b****9 文档编号:13010939 上传时间:2022-10-02 格式:DOCX 页数:17 大小:267.83KB
下载 相关 举报
北航数值分析实习第二题Word文档下载推荐.docx_第1页
第1页 / 共17页
北航数值分析实习第二题Word文档下载推荐.docx_第2页
第2页 / 共17页
北航数值分析实习第二题Word文档下载推荐.docx_第3页
第3页 / 共17页
北航数值分析实习第二题Word文档下载推荐.docx_第4页
第4页 / 共17页
北航数值分析实习第二题Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

北航数值分析实习第二题Word文档下载推荐.docx

《北航数值分析实习第二题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北航数值分析实习第二题Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

北航数值分析实习第二题Word文档下载推荐.docx

因此,求解时候,需要给特征向量某个元素赋值,本题,将最后一个元素统一赋值为1,即可求出对应于某个特征值的特征向量的基础解系,而全部特征向量为,k取不等于0的任意实数。

2C++程序

#include<

stdio.h>

math.h>

stdlib.h>

time.h>

#definen11

#defineerr1e-12

#defineL2500

voidcaculateA();

//计算矩阵A的系数

voidhessenberg();

//将A拟上三角化

voidQR();

//对矩阵进行QR分解

voidQRshuangbu();

//对矩阵进行带双步位移的QR分解

voidgauss();

//列主元的高斯消元法求解特征向量

inti,j,s,p,k,ik,nR,nC;

doubleA[n][n],q[n][n],r[n][n],rq[n][n],I[n][n];

doubleP[n],W[n],u[n],Q[n];

doubledr,cr,hr,ar,tr;

doubles1,t,x,tzR[n],tzC[2][n],sum,M[n][n],v[n];

voidmain()

{for(i=1;

i<

n;

i++)

{for(j=1;

j<

j++)

{if(i==j)

{I[i][j]=1;

q[i][j]=1;

}

else{I[i][j]=0;

q[i][j]=0;

}}}

caculateA();

hessenberg();

QR();

QRshuangbu();

gauss();

printf("

运行时间为%d\n"

clock());

voidcaculateA()//计算矩阵A的系数

{

for(i=1;

{for(j=1;

{if(j!

=i)

A[i][j]=sin(0.5*i+0.2*j);

else

A[i][j]=1.52*cos(i+1.2*j);

}

voidhessenberg()//将A拟上三角化

for(s=1;

s<

n-2;

s++)

{for(ar=0.0,i=s+2;

ar+=A[i][s]*A[i][s];

if(ar<

=err)

continue;

else{

ar+=A[s+1][s]*A[s+1][s];

dr=sqrt(ar);

if(A[s+1][s]>

0)

cr=-dr;

else

cr=dr;

hr=cr*cr-cr*A[s+1][s];

for(i=1;

=s;

u[i]=0.0;

u[s+1]=A[s+1][s]-cr;

for(i=s+2;

u[i]=A[i][s];

for(j=1;

{for(P[j]=0.0,i=1;

P[j]+=A[i][j]*u[i]/hr;

for(tr=0.0,i=1;

{tr+=P[i]*u[i]/hr;

for(i=1;

{for(Q[i]=0.0,j=1;

Q[i]+=A[i][j]*u[j]/hr;

{W[i]=Q[i]-tr*u[i];

{for(j=1;

A[i][j]-=(W[i]*u[j]+u[i]*P[j]);

}

for(i=1;

{for(j=1;

if(fabs(A[i][j])<

err)

A[i][j]=0.0;

printf("

数值分析计算实习第二次作业\n"

);

A1班\n"

\n"

矩阵A经过拟上三角化后得到的矩阵为:

for(i=1;

{

for(j=1;

j++)

printf("

%1.12e,"

A[i][j]);

printf("

voidQR()//对矩阵进行QR分解

doubleu[n],w[n],F[n];

for(p=1;

p<

p++)

r[s][p]=A[s][p];

n-1;

{

for(dr=0.0,i=s;

dr+=r[i][s]*r[i][s];

dr=sqrt(dr);

if(dr<

continue;

else

{if(A[s][s]>

0)cr=-dr;

elsecr=dr;

hr=cr*cr-cr*r[s][s];

s;

u[i]=0;

u[s]=r[s][s]-cr;

for(i=s+1;

u[i]=r[i][s];

{for(F[i]=0.0,j=1;

F[i]+=r[j][i]*u[j]/hr;

{for(j=1;

r[i][j]=r[i][j]-u[i]*F[j];

for(i=1;

{for(w[i]=0.0,j=1;

w[i]+=q[i][j]*u[j];

i++)

{for(j=1;

q[i][j]-=w[i]*u[j]/hr;

}

}

for(i=1;

{for(j=1;

{for(rq[i][j]=0.0,s=1;

rq[i][j]+=r[i][s]*q[s][j];

}}

A经过QR分解后得到的正交矩阵Q为:

for(i=1;

if(fabs(q[i][j])<

q[i][j]=0.0;

{for(j=1;

q[i][j]);

A经过QR分解后得到的上三角矩阵R为:

if(fabs(r[i][j])<

r[i][j]=0.0;

r[i][j]);

正交矩阵Q乘以上三角矩阵R得到的RQ为:

if(fabs(rq[i][j])<

rq[i][j]=0.0;

rq[i][j]);

voidQRshuangbu()//对矩阵进行带双步位移的QR分解

intK=1,m=10;

nR=0,nC=0;

loop3:

if(fabs(A[m][m-1])<

{nR++;

tzR[nR]=A[m][m];

m--;

gotoloop4;

elsegotoloop5;

loop4:

if(m==1)

{

nR++;

tzR[nR]=A[1][1];

gotoloop9;

elseif(m==2)

{

s1=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];

x=s1*s1-4*t;

if(x>

=0)

nR++;

tzR[nR]=(s1+sqrt(x))/2;

tzR[nR]=(s1-sqrt(x))/2;

nC++;

tzC[0][nC]=s1/2;

tzC[1][nC]=sqrt(-x)/2;

tzC[1][nC]=-sqrt(-x)/2;

elsegotoloop3;

loop5:

if(fabs(A[m-1][m-2])<

s1=A[m

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1