数值分析第二题.docx

上传人:b****8 文档编号:9920644 上传时间:2023-05-22 格式:DOCX 页数:12 大小:123.73KB
下载 相关 举报
数值分析第二题.docx_第1页
第1页 / 共12页
数值分析第二题.docx_第2页
第2页 / 共12页
数值分析第二题.docx_第3页
第3页 / 共12页
数值分析第二题.docx_第4页
第4页 / 共12页
数值分析第二题.docx_第5页
第5页 / 共12页
数值分析第二题.docx_第6页
第6页 / 共12页
数值分析第二题.docx_第7页
第7页 / 共12页
数值分析第二题.docx_第8页
第8页 / 共12页
数值分析第二题.docx_第9页
第9页 / 共12页
数值分析第二题.docx_第10页
第10页 / 共12页
数值分析第二题.docx_第11页
第11页 / 共12页
数值分析第二题.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数值分析第二题.docx

《数值分析第二题.docx》由会员分享,可在线阅读,更多相关《数值分析第二题.docx(12页珍藏版)》请在冰点文库上搜索。

数值分析第二题.docx

数值分析第二题

一、算法的设计方案

(一)求矩阵特征值

(1)使用拟上三角化的算法把矩阵A化为拟上三角化矩阵

给定精度水平和迭代最大次数L。

(2)记

,令k=1,m=n。

(3)如果

,则得到A的一个特征值

,置

(降阶),转(4);否则转(5)。

(4)如果m=1,则得到A的一个特征值

,转(10);如果m=0,则直接转(10);如果m>1,则转

(2)。

(5)求二阶子阵

的两个特征值

,即计算二次方程的两个根。

(6)如果m=2,则得到A的两个特征值

,转(11);否则转(7)。

(7)如果

,则得到A的两个特征值

,置

(降阶),转(4);否则转(8)。

(8)如果k=L,则终止计算,未得到A的全部特征值;否则转(9)。

(9)记

),计算

(I是m阶单位阵)

(10)置

,转(4)。

(11)A的全部特征值已计算完毕,停止计算。

(二)求矩阵特征向量

特征向量为方程组

的解向量,采用列主元素Gauss消去法求解方程组的算法:

1、消元过程

对于k=1,2,…,n-1执行

(1)选行号

,使

(2)交换

以及

所含的数值。

(3)对于

计算

2、回代过程

二、

全部源程序

#include

#include

voidCreatA(doublea[10][10])/*创建矩阵*/

{inti,j;

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

{for(j=0;j<=9;j++)

{if(i!

=j)

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

else

a[i][j]=1.5*cos((i+1)+1.2*(j+1));

}

}

}

voidHessenberg(double(*p)[10],intn)/*拟上三角化*/

{intw,i,r,j;doublesum,tr,dr,cr,hr;doubleur[10],pr[10],qr[10],wr[10];

for(r=0;r<=n-3;r++)

{w=0;

for(i=r+2;i<=n-1;i++)

{if((*(*(p+i)+r))!

=0){w=1;break;}}

if(w==0)continue;

sum=0;

for(i=r+1;i<=n-1;i++)

{sum=sum+(*(*(p+i)+r))*(*(*(p+i)+r));}

dr=sqrt(sum);

if((*(*(p+r+1)+r))>0){cr=-dr;}

else{cr=dr;}

hr=cr*cr-cr*(*(*(p+r+1)+r));

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

{ur[i]=0;}

ur[r+1]=(*(*(p+r+1)+r))-cr;

for(i=r+2;i<=n-1;i++)

{ur[i]=(*(*(p+i)+r));}

tr=0;

for(i=0;i<=n-1;i++)

{pr[i]=0;qr[i]=0;

for(j=0;j<=n-1;j++)

{pr[i]=(*(*(p+j)+i)*ur[j])/hr+pr[i];qr[i]=(*(*(p+i)+j)*ur[j])/hr+qr[i];}

tr=pr[i]*ur[i]/hr+tr;

}

for(i=0;i<=n-1;i++)

{wr[i]=qr[i]-tr*ur[i];}

for(i=0;i<=n-1;i++)

for(j=0;j<=n-1;j++)

{*(*(p+i)+j)=*(*(p+i)+j)-wr[i]*ur[j]-ur[i]*pr[j];}

}

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

{for(j=0;j<=9;j++)

printf("%e",*(*(p+i)+j));

printf("\n");

}

}

 

voidMkMAT(doublea[10][10],doubleMk[10][10],doubles,doublet,intm)

{inti,j,k;

for(i=0;i<=m-1;i++)

for(j=0;j<=m-1;j++)

{Mk[i][j]=0;

for(k=0;k<=m-1;k++)

Mk[i][j]=a[i][k]*a[k][j]+Mk[i][j];

}

for(i=0;i<=m-1;i++)

for(j=0;j<=m-1;j++)

{if(i==j)

{Mk[i][j]=Mk[i][j]-s*a[i][j]+t;}

else

{Mk[i][j]=Mk[i][j]-s*a[i][j];}

}

}

 

voidQRMAT(double(*b)[10],double(*c)[10],intm)

{intflag,i,r,j;doublex,tr,dr,cr,hr;doubleur[10],pr[10],qr[10],wr[10],vr[10];

for(r=0;r<=m-2;r++)

{flag=0;

for(i=r+1;i<=m-1;i++)

{if((*(*(b+i)+r))!

=0){flag=1;break;}}

if(flag==0)continue;

x=0;

for(i=r;i<=m-1;i++)

{x=x+(*(*(b+i)+r))*(*(*(b+i)+r));}

dr=sqrt(x);

if((*(*(b+r)+r))>0){cr=-dr;}

else{cr=dr;}

hr=cr*cr-cr*(*(*(b+r)+r));

for(i=0;i<=r-1;i++)

{ur[i]=0;}

ur[r]=(*(*(b+r)+r))-cr;

for(i=r+1;i<=m-1;i++)

{ur[i]=(*(*(b+i)+r));}

tr=0;

for(i=0;i<=m-1;i++)

{pr[i]=0;qr[i]=0;vr[i]=0;

for(j=0;j<=m-1;j++)

{pr[i]=(*(*(c+j)+i)*ur[j])/hr+pr[i];qr[i]=(*(*(c+i)+j)*ur[j])/hr+qr[i];vr[i]=(*(*(b+j)+i)*ur[j])/hr+vr[i];}

tr=pr[i]*ur[i]/hr+tr;

}

for(i=0;i<=m-1;i++)

{wr[i]=qr[i]-tr*ur[i];}

for(i=0;i<=m-1;i++)

for(j=0;j<=m-1;j++)

{*(*(c+i)+j)=*(*(c+i)+j)-wr[i]*ur[j]-ur[i]*pr[j];*(*(b+i)+j)=*(*(b+i)+j)-ur[i]*vr[j];}

}

}

voidDL(doublea[10][10],doubleb[10],doublex[10])/*杜立特尔分解*/

{

inti,j,k,r;

doublel[10][10],u[10][10],y[10];

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

{

for(j=0;j<10;j++)

{

if(i==j)

l[i][i]=1.0;

else

{

l[i][j]=0.0;

if(i>j)

u[i][j]=0.0;

}

}

}

for(k=0;k<10;k++)

{

for(j=k;j<10;j++)

{

u[k][j]=a[k][j];

for(r=0;r<=k-1;r++)

u[k][j]-=l[k][r]*u[r][j];

}

for(i=k+1;i<10;i++)

{

l[i][k]=a[i][k];

for(r=0;r<=k-1;r++)

l[i][k]-=l[i][r]*u[r][k];

l[i][k]/=u[k][k];

}

}

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

{

y[i]=b[i];

for(j=0;j<=i-1;j++)

y[i]-=l[i][j]*y[j];

}

for(i=9;i>=0;i--)

{

x[i]=y[i];

for(j=i+1;j<10;j++)

y[i]-=u[i][j]*x[j];

x[i]=y[i]/u[i][i];

}

}

voidVector(doubleA[10][10],doublea)/*求特征向量*/

{doubleu[10]={1,2,3,4,5,6,7,8,9,0},b,sum,x,y[10],B[10][10];inti,j,k;

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

for(j=0;j<=9;j++)

{if(i==j)B[i][j]=A[i][j]-(float)a;

elseB[i][j]=A[i][j];

}

for(k=1;k<=20;k++)

{sum=0;

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

{sum=sum+u[i]*u[i];}

x=sqrt(sum);

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

y[i]=u[i]/x;

DL(B,y,u);

b=0;

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

{b=b+y[i]*u[i];}

if(b>1e+12)break;

}

printf("\n");

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

{printf("%.13.7e",y[i]);}

printf("\n");

}

 

voidmain()

{doubleA[10][10],Mk[10][10],precision=1e-12,s,t,S1,S2,Re[10],Im[10],a;intL=200,k=1,m=10,i,j;

CreatA(A);

Hessenberg(A,10);

while(m>=1)

{if(fabs(A[m-1][m-2])<=precision){Re[m-1]=A[m-1][m-1];Im[m-1]=0;m--;}

else

{s=A[m-2][m-2]+A[m-1][m-1];

t=A[m-2][m-2]*A[m-1][m-1]-A[m-1][m-2]*A[m-2][m-1];

S1=s/2;S2=sqrt(fabs(s*s-4*t))/2;

if(m==2)

{if((s*s-4*t)<0){Re[m-1]=S1;Im[m-1]=-S2;Re[m-2]=S1;Im[m-2]=S2;}

else{Re[m-1]=S1+S2;Im[m-1]=0;Re[m-2]=S1-S2;Im[m-2]=0;}

break;}

else

{if(fabs(A[m-2][m-3])<=precision)

{if((s*s-4*t)<0){Re[m-1]=S1;Im[m-1]=-S2;Re[m-2]=S1;Im[m-2]=S2;}

else{Re[m-1]=S1+S2;Im[m-1]=0;Re[m-2]=S1-S2;Im[m-2]=0;};m=m-2;}

else{if(k==L){printf("fail!

");break;}

else{MkMAT(A,Mk,s,t,m);QRMAT(Mk,A,m);k=k+1;continue;}

}

}

}

if(m==1){Re[m-1]=A[m-1][m-1];Im[m-1]=0;m--;}

}

for(m=0;m<=9;m++)

{printf("%13.7e,%13.7ei\n",Re[m],Im[m]);

}

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

{for(j=0;j<=9;j++)

printf("%e\t",A[i][j]);

printf("\n");}

CreatA(A);

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

{if(Im[i]==0){a=Re[i];Vector(A,a);}}

}

三、

计算结果

(1)拟上三角化矩阵及特征值

(2)QR分解后矩阵

(3)实特征值的特征向量

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

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2