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

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

课程名称:计算方法A

指导教师:严常龙

上机实践名称:Jacobi法求实对称矩阵特征值

上机实践编号:7

年级:2010级 姓名: 学号: 上机实践成绩: 上机实践日期:yyyy.mm. dd 上机实践时间: 一、目的

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

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

二、内容与设计思想

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

可使用实例:

1A2

328939 8

三、使用环境

操作系统:

软件平台:

四、核心代码及调试过程

#include

#include

#include

#define n 3

#define e 0.000001

main()

{

int i,j,p,q,cj=0,k;

float a[n][n],sum=0.0,s,max,t,t1,t2,c,d,v[n],L[n][n],L1[n][n],L2[n][n];

a[0][0]=1;a[0][1]=2;a[0][2]=3;

a[1][0]=2;a[1][1]=8;a[1][2]=9;

a[2][0]=3;a[2][1]=9;a[2][2]=8;

for(i=0;i

{

for(j=0;j

{

if(j==i)

{

L[i][j]=1;

}

else

{

L[i][j]=0;

}

}

}

memcpy(L2,L,sizeof(L2));//复制数组 memcpy(L1,L,sizeof(L1));

printf("矩阵A为\n");

for(i=0;i

{

for(j=0;j

{

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

}

printf("\n");

}

sum=0.0;

for(i=0;i

{

for(j=0;j

{

if(i!=j)

{

sum=sum+a[i][j]*a[i][j];

}

}

}

while(sum>e)

{

max=fabs(a[0][1]);p=0;q=1;

for(i=0;i

for(j=0;j

{

if(i!=j)

{

if(max

{

max=fabs(a[i][j]); p=i;q=j;

}

}

}

}

s=(a[q][q]-a[p][p])/(a[p][q]*2.0);

if(s==0)

{

t=1;

}

else

{

t1=-s-sqrt(s*s+1);

t2=-s+sqrt(s*s+1);

if(fabs(t1)>fabs(t2))

{

t=t2;

}

else

{

t=t1;

}

}

c=1.0/sqrt(1+t*t);

d=t/sqrt(1+t*t);

for(i=0;i

{

if(i!=p && i!=q)

{

a[i][p]=c*a[p][i]-d*a[q][i]; a[i][q]=c*a[q][i]+d*a[p][i]; a[q][i]=a[i][q];

a[p][i]=a[i][p];

}

}

a[p][p]=a[p][p]-t*a[p][q];

a[q][q]=a[q][q]+t*a[p][q];

a[p][q]=0;

a[q][p]=0;

sum=0.0;

for(i=0;i

{

for(j=0;j

{

if(i!=j)

{

sum=sum+a[i][j]*a[i][j]; }

}

}

L2[p][p]=c;

L2[q][q]=c;

L2[p][q]=d;

L2[q][p]=-d;

//L=L1*L2;

//L1=L;

for(i=0;i

{

for(j=0;j

{

L[i][j]=0;

for(k=0;k

{

L[i][j]=L[i][j]+L1[i][k]*L2[k][j];

}

}

}

memcpy(L1,L,sizeof(L1));

}

printf("矩阵B为\n");

for(i=0;i

{

for(j=0;j

{

printf("%f\t",L[i][j]);

}

printf("\n");

}

printf("正交矩阵为\n"); for(i=0;i

{

for(j=0;j

{

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

}

printf("\n");

}

printf("特征值为\n"); for(i=0;i

{

v[i]=a[i][i];

printf("v[%d]=%f\n",i+1,v[i]);

}

printf("特征向量为\n");

for(i=0;i

{

printf("t[%d]=(\t",i+1); for(j=0;j

{

printf("%f\t",L[j][i]); }

printf(")T");

printf("\n");

}

}

五、总结

六、附录

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

课程名称:计算方法A

指导教师:严常龙

上机实践名称:Jacobi法求实对称矩阵特征值

上机实践编号:7

年级:2010级 姓名: 学号: 上机实践成绩: 上机实践日期:yyyy.mm. dd 上机实践时间: 一、目的

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

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

二、内容与设计思想

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

可使用实例:

1A2

328939 8

三、使用环境

操作系统:

软件平台:

四、核心代码及调试过程

#include

#include

#include

#define n 3

#define e 0.000001

main()

{

int i,j,p,q,cj=0,k;

float a[n][n],sum=0.0,s,max,t,t1,t2,c,d,v[n],L[n][n],L1[n][n],L2[n][n];

a[0][0]=1;a[0][1]=2;a[0][2]=3;

a[1][0]=2;a[1][1]=8;a[1][2]=9;

a[2][0]=3;a[2][1]=9;a[2][2]=8;

for(i=0;i

{

for(j=0;j

{

if(j==i)

{

L[i][j]=1;

}

else

{

L[i][j]=0;

}

}

}

memcpy(L2,L,sizeof(L2));//复制数组 memcpy(L1,L,sizeof(L1));

printf("矩阵A为\n");

for(i=0;i

{

for(j=0;j

{

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

}

printf("\n");

}

sum=0.0;

for(i=0;i

{

for(j=0;j

{

if(i!=j)

{

sum=sum+a[i][j]*a[i][j];

}

}

}

while(sum>e)

{

max=fabs(a[0][1]);p=0;q=1;

for(i=0;i

for(j=0;j

{

if(i!=j)

{

if(max

{

max=fabs(a[i][j]); p=i;q=j;

}

}

}

}

s=(a[q][q]-a[p][p])/(a[p][q]*2.0);

if(s==0)

{

t=1;

}

else

{

t1=-s-sqrt(s*s+1);

t2=-s+sqrt(s*s+1);

if(fabs(t1)>fabs(t2))

{

t=t2;

}

else

{

t=t1;

}

}

c=1.0/sqrt(1+t*t);

d=t/sqrt(1+t*t);

for(i=0;i

{

if(i!=p && i!=q)

{

a[i][p]=c*a[p][i]-d*a[q][i]; a[i][q]=c*a[q][i]+d*a[p][i]; a[q][i]=a[i][q];

a[p][i]=a[i][p];

}

}

a[p][p]=a[p][p]-t*a[p][q];

a[q][q]=a[q][q]+t*a[p][q];

a[p][q]=0;

a[q][p]=0;

sum=0.0;

for(i=0;i

{

for(j=0;j

{

if(i!=j)

{

sum=sum+a[i][j]*a[i][j]; }

}

}

L2[p][p]=c;

L2[q][q]=c;

L2[p][q]=d;

L2[q][p]=-d;

//L=L1*L2;

//L1=L;

for(i=0;i

{

for(j=0;j

{

L[i][j]=0;

for(k=0;k

{

L[i][j]=L[i][j]+L1[i][k]*L2[k][j];

}

}

}

memcpy(L1,L,sizeof(L1));

}

printf("矩阵B为\n");

for(i=0;i

{

for(j=0;j

{

printf("%f\t",L[i][j]);

}

printf("\n");

}

printf("正交矩阵为\n"); for(i=0;i

{

for(j=0;j

{

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

}

printf("\n");

}

printf("特征值为\n"); for(i=0;i

{

v[i]=a[i][i];

printf("v[%d]=%f\n",i+1,v[i]);

}

printf("特征向量为\n");

for(i=0;i

{

printf("t[%d]=(\t",i+1); for(j=0;j

{

printf("%f\t",L[j][i]); }

printf(")T");

printf("\n");

}

}

五、总结

六、附录


相关文章

  • 第七章 矩阵特征值的计算
  • 第7章矩阵特征值和特征向量的计算引言 很多工程计算中,会遇到特征值和特征向量的计算,如:机械.结构或电磁振动中的固有值问题,如桥梁或建筑物的振动,机械机件.飞机机翼的振动:物理学中的各种临界值等.这些特征值的计算往往意义重大. 求解线性方程 ...查看


  • 历年山西省专升本高代试题
  • 山西省2006年专升本招生考试试题(高等代数) 一.单项选择题(每小题2分,10小题,共20分) 1.下列数集中按通常的加法和乘法构成数域的是( ) A.整数集Z B.有理数集Q C.a,bZ  D. 3aaQ 2.若多项式f ...查看


  • 教师资格证考试目录
  • 高一上学期学必修1.3,下学期学必修2.4,高二上半学期(期中考试前)学必修5,再学选修,其中理科期中考试后期末考试前学选修2-1,文科是选修1-1,到年后第二学期理科在期中考试前学选修2-2,文科是1-2,期中考试后到期末考试理科学选修2 ...查看


  • 数值分析作业思考题
  • 数值分析思考题1 1.讨论绝对误差(限).相对误差(限)与有效数字之间的关系. 2.相对误差在什么情况下可以用下式代替? e *x *-x e =*= x x * *r 3.查阅何谓问题的"病态性",并区分与" ...查看


  • 对称矩阵的性质及应用
  • 目 录 摘 要......................................................................................................... 错误!未定义书 ...查看


  • 矩阵对角化及应用论文
  • 矩阵对角化及应用 理学院 数学082 缪仁东 指导师:陈巧云 摘 要:本文是关于矩阵对角化问题的初步研究, 对矩阵对角化充要条件的归纳, 总结, 通过对实对称矩阵, 循环矩阵, 特殊矩阵对角化方法的计算和研究, 让读者对矩阵对角化问题中求特 ...查看


  • 线性代数知识点总结
  • 线性代数知识点总结 第一章 行列式 (一) 要点 1.二阶.三阶行列式 2.全排列和逆序数,奇偶排列(可以不介绍对换及有关定理),n 阶行列式的定义 3.行列式的性质 4.n 阶行列式D =a ij ,元素a ij 的余子式和代数余子式,行 ...查看


  • 关于化二次型为标准型的相似变换方法的讨论_朱前永
  • 第21卷 第1期 2004年3月 吉 林 化 工 学 院 学 报 JOURNALOFJILININSTITUTEOFCHEMICALTECHNOLOGYVol.21No.1Mar. 2004 文章编号:1007-2853(2004)01-0 ...查看


  • 对称矩阵与反对称矩阵
  • 实对称矩阵 实数域内 定义:设A为一n阶实方阵,则A称为是对称的如果Aˊ=A. 性质:设A为一n阶实对称矩阵,令 A=(aij), i=1,2,3,···,n:j=1,2,3,···,n. 则有: 1) A'A; 2) aijaji, ...查看


热门内容