实验7Jacobi法求实对称矩阵全部特征值.docx

上传人:b****7 文档编号:11147210 上传时间:2023-02-25 格式:DOCX 页数:8 大小:126.85KB
下载 相关 举报
实验7Jacobi法求实对称矩阵全部特征值.docx_第1页
第1页 / 共8页
实验7Jacobi法求实对称矩阵全部特征值.docx_第2页
第2页 / 共8页
实验7Jacobi法求实对称矩阵全部特征值.docx_第3页
第3页 / 共8页
实验7Jacobi法求实对称矩阵全部特征值.docx_第4页
第4页 / 共8页
实验7Jacobi法求实对称矩阵全部特征值.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

实验7Jacobi法求实对称矩阵全部特征值.docx

《实验7Jacobi法求实对称矩阵全部特征值.docx》由会员分享,可在线阅读,更多相关《实验7Jacobi法求实对称矩阵全部特征值.docx(8页珍藏版)》请在冰豆网上搜索。

实验7Jacobi法求实对称矩阵全部特征值.docx

实验7Jacobi法求实对称矩阵全部特征值

西华数学与计算机学院上机实践报告

课程名称:

计算方法A

年级:

上机实践成绩:

指导教师:

严常龙

姓名:

 

上机实践名称:

Jacobi法求实对称矩阵特征值

学号:

上机实践日期:

上机实践编号:

1

 

上机实践时间:

 

 

 

一、目的

1.通过本实验加深对Jacobi法的构造过程的理解;

2.能对Jacobi法提出正确的算法描述编程实现,得到计算结果。

Jacobi法求实对称矩阵特征值

二、内容与设计思想

自选方阵,用Jacobi法求其全部特征值及其特征向量。

可使用实例:

三、使用环境

操作系统:

WindowsXP

软件环境:

MicrosoftVisualC++

四、核心代码及调试过程

#include

#include

voidmain()

{

floata[10][10],t[10][10],s[10][10],s1[10][10],Q[10][10],q1[10][10],lam[10];

floata1,c,s2,t1,amax,eps=0.001,d=0,r=1;

inti,j,n,p,q,m,N=100,k=1;

printf("矩阵a的维数为:

\nn=");

scanf("%d",&n);

printf("\n输入矩阵a:

\n");

for(i=1;i

{

j=1;

while(j

{

printf("a%d%d=",i,j);

scanf("%f",&a[i][j]);

j++;

}

}

for(i=1;i

{

for(j=1;j

{

if(j==i)

Q[i][j]=1;//将初始Q[i][j]置为单位矩阵

else

Q[i][j]=0;

}

}

while(r>=eps&&k<=N)

{

p=1;q=1;amax=0;

for(i=1;i

{

for(j=1;j

{

if((j!

=i)&&fabs(a[i][j])>amax)

{

amax=fabs(a[i][j]);//找非对角元素绝对值最大的元

p=i;q=j;

}

}

}

r=amax;//重置当前误差

a1=(a[q][q]-a[p][p])/(2*a[p][q]);

if(a1>=0)

t1=1/(fabs(a1)+sqrt(1+a1*a1));

else

t1=-1/(fabs(a1)+sqrt(1+a1*a1));

c=1/sqrt(1+t1*t1);

s2=t1*c;

for(i=1;i

{

for(j=1;j

{

if(j==i)

s[i][j]=1;

else

s[i][j]=0;

}

}

s[p][p]=c;s[p][q]=s2;

s[q][p]=-s2;s[q][q]=c;

for(i=1;i

{

for(j=1;j

{

s1[i][j]=s[j][i];//将矩阵s1[i][j]化为s[i][j]的转置

}

}

for(i=1;i

{

for(j=1;j

{

for(m=1;m

d=d+s1[i][m]*a[m][j];//计算s1[i][j]*a[i][j]

t[i][j]=d;

d=0;

}

}

for(i=1;i

{

for(j=1;j

{

for(m=1;m

d=d+t[i][m]*s[m][j];//计算t[i][j]*s[i][j]

a[i][j]=d;

d=0;

}

}

for(i=1;i

{

for(j=1;j

{

for(m=1;m

d=d+Q[i][m]*s[m][j];//计算Q[i][j]*s[i][j]

q1[i][j]=d;

d=0;

}

}

for(i=1;i

{

for(j=1;j

{

Q[i][j]=q1[i][j];//将矩阵q1[i][j]还原为q[i][j]

}

}

printf("第%d次平面旋转矩阵s为:

\n",k);

for(i=1;i

{

for(j=1;j

printf("%10.7f",s[i][j]);

printf("\n");

}

printf("第%d次矩阵a为:

\n",k);

for(i=1;i

{

for(j=1;j

printf("%10.7f",a[i][j]);

printf("\n");

}

k=k+1;

}

if(k>N)

printf("不收敛!

\n");

else

for(i=1;i

lam[i]=a[i][i];

printf("矩阵a的特征值为:

\n");

for(i=1;i

printf("%10.7f",lam[i]);

printf("\n相应的特征向量为:

\n");

for(i=1;i

{

for(j=1;j

printf("%10.7f",Q[i][j]);

printf("\n");

}

}

运算结果:

矩阵的特征值为:

λ1=0.5601 λ2=-1.3077  λ3=17.7475

矩阵的特征向量为:

V1=[0.8938 -0.4223 0.1505]T

V2=[0.3978 0.5921 -0.7007]T

V3=[0.2068 0.6862 0.6973]T

五、总结

本次试验利用C语言实现了用Jacobi法求矩阵全部特征值及其特征向量,通过本实验加深了对Jacobi法的构造过程的理解,对c语言在计算方法中的应用有了进一步的掌握。

六、附录

参考:

《数值计算方法与算法》(第二版)

 

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

当前位置:首页 > 解决方案 > 学习计划

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

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