实验6反幂法求矩阵按模最小特征值

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

课程名称:计算方法A

指导教师:严常龙

上机实践名称:反幂法求矩阵按模最小特征值

上机实践编号:6

年级:2010级 姓名:李国强 上机实践成绩: 上机实践时间:14:00 学号:[**************] 上机实践日期:2013.12.18

一、目的

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

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

自选方阵,用反幂法求解其按模最小特征值。

可使用实例:

⎛1336135⎫ ⎪A = 44546⎪

-88-6-90⎪⎝⎭二、内容与设计思想

三、使用环境

操作系统:Win 8

软件平台:Visual C++ 6.0

四、核心代码及调试过程

#include

#include

#define MAX_N 20 //矩阵最大维数

#define MAXREPT 100

#define epsilon 0.00001 //求解精度

int main()

{

int n;

int i,j,k;

double xmax,oxmax;

static double a[MAX_N][MAX_N];

static double l[MAX_N][MAX_N],u[MAX_N][MAX_N];

static double x[MAX_N],nx[MAX_N];

printf("\n请输入矩阵阶数n:"); //输入矩阵维数

scanf("%d",&n);

if(n>MAX_N)

{

printf("the input n is larger than MAX_N,please redefine the MAX_N.\n");

return 1;

}

if(n

{

printf("please input a number between 1 and %d.\n",MAX_N);

return 1;

}

//输入A 矩阵

printf("请输入矩阵的值a[i][j] i,j=0...%d;\n",n-1);

for(i=0;i

for(j=0;j

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

for(i=0;i

x[i]=1;

oxmax=0;

for(i=0;i

{

for(j=0;j

{

nx[j]=0;

for(k=0;k

nx[j]+=a[j][k]*x[k];

}

xmax=0.0;

for(j=0;j

if(fabs(nx[j])>xmax)

xmax=fabs(nx[j]);

for(j=0;j

nx[j]/=xmax;

for(j=0;j

x[j]=nx[j];

if(fabs(xmax-oxmax)

{

printf("solve...max lamda=%lf\n",xmax); //输出

printf("the vector is:\n");

for(i=0;i

printf("%f\n",nx[i]);

break;

//return 0;

}

oxmax=xmax;

}

//printf("after %d repeat ,max no result ...\n",MAXREPT);

for(i=0;i

u[i][i]=1; //U矩阵对角元为

for(k=0;k

{

for(i=k;i

{

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

for(j=0;j

l[i][k]-=(l[i][j]*u[j][k]);

}

for(j=k+1;j

{

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

for(i=0;i

u[k][j]-=(l[k][i]*u[i][j]);

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

}

}

for(i=0;i

x[i]=1;

for(i=0;i

{

for(j=0;j

{

nx[j]=x[j];

for(k=0;k

nx[j]-=l[j][k]*nx[k];

nx[j]/=l[j][j];

}

for(j=n-1;j>=0;j--)

{

x[j]=nx[j];

for(k=j+1;k

x[j]-=u[j][k]*x[k];

}

xmax=0.0;

for(j=0;j

if(fabs(x[j])>xmax)

xmax=fabs(x[j]);

for(j=0;j

x[j]/=xmax;

if(fabs(xmax-oxmax)

{

printf("solve... min lamda=%lf\n",1/xmax); //输出

printf("the vector is:\n");

for(i=0;i

printf("%f\n",x[i]);

break;

//return 0;

}

oxmax=xmax;

}

return 1;

}

显示结果:

五、总结

本次试验利用C 语言实现了用反幂法求解其按模最小特征值,通过本实验加深对反幂法的构

造过程的理解。对于利用C 语言实现该算法有了进一步的掌握,为今后的深入学习打下坚实基础。

六、附录

《数值计算方法与算法(第二版)》,张韵华主编,2012.1

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

课程名称:计算方法A

指导教师:严常龙

上机实践名称:反幂法求矩阵按模最小特征值

上机实践编号:6

年级:2010级 姓名:李国强 上机实践成绩: 上机实践时间:14:00 学号:[**************] 上机实践日期:2013.12.18

一、目的

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

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

自选方阵,用反幂法求解其按模最小特征值。

可使用实例:

⎛1336135⎫ ⎪A = 44546⎪

-88-6-90⎪⎝⎭二、内容与设计思想

三、使用环境

操作系统:Win 8

软件平台:Visual C++ 6.0

四、核心代码及调试过程

#include

#include

#define MAX_N 20 //矩阵最大维数

#define MAXREPT 100

#define epsilon 0.00001 //求解精度

int main()

{

int n;

int i,j,k;

double xmax,oxmax;

static double a[MAX_N][MAX_N];

static double l[MAX_N][MAX_N],u[MAX_N][MAX_N];

static double x[MAX_N],nx[MAX_N];

printf("\n请输入矩阵阶数n:"); //输入矩阵维数

scanf("%d",&n);

if(n>MAX_N)

{

printf("the input n is larger than MAX_N,please redefine the MAX_N.\n");

return 1;

}

if(n

{

printf("please input a number between 1 and %d.\n",MAX_N);

return 1;

}

//输入A 矩阵

printf("请输入矩阵的值a[i][j] i,j=0...%d;\n",n-1);

for(i=0;i

for(j=0;j

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

for(i=0;i

x[i]=1;

oxmax=0;

for(i=0;i

{

for(j=0;j

{

nx[j]=0;

for(k=0;k

nx[j]+=a[j][k]*x[k];

}

xmax=0.0;

for(j=0;j

if(fabs(nx[j])>xmax)

xmax=fabs(nx[j]);

for(j=0;j

nx[j]/=xmax;

for(j=0;j

x[j]=nx[j];

if(fabs(xmax-oxmax)

{

printf("solve...max lamda=%lf\n",xmax); //输出

printf("the vector is:\n");

for(i=0;i

printf("%f\n",nx[i]);

break;

//return 0;

}

oxmax=xmax;

}

//printf("after %d repeat ,max no result ...\n",MAXREPT);

for(i=0;i

u[i][i]=1; //U矩阵对角元为

for(k=0;k

{

for(i=k;i

{

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

for(j=0;j

l[i][k]-=(l[i][j]*u[j][k]);

}

for(j=k+1;j

{

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

for(i=0;i

u[k][j]-=(l[k][i]*u[i][j]);

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

}

}

for(i=0;i

x[i]=1;

for(i=0;i

{

for(j=0;j

{

nx[j]=x[j];

for(k=0;k

nx[j]-=l[j][k]*nx[k];

nx[j]/=l[j][j];

}

for(j=n-1;j>=0;j--)

{

x[j]=nx[j];

for(k=j+1;k

x[j]-=u[j][k]*x[k];

}

xmax=0.0;

for(j=0;j

if(fabs(x[j])>xmax)

xmax=fabs(x[j]);

for(j=0;j

x[j]/=xmax;

if(fabs(xmax-oxmax)

{

printf("solve... min lamda=%lf\n",1/xmax); //输出

printf("the vector is:\n");

for(i=0;i

printf("%f\n",x[i]);

break;

//return 0;

}

oxmax=xmax;

}

return 1;

}

显示结果:

五、总结

本次试验利用C 语言实现了用反幂法求解其按模最小特征值,通过本实验加深对反幂法的构

造过程的理解。对于利用C 语言实现该算法有了进一步的掌握,为今后的深入学习打下坚实基础。

六、附录

《数值计算方法与算法(第二版)》,张韵华主编,2012.1


相关文章

  • 仓储与配送实验报告
  • 实验一 层次分析法应用 一.试验目的:利用层次分析法解决配送或仓库选址问题 二.实验原理: 层次分析法(Analytic Hierarchy Process,简称AHP法)是国外于20世纪70年代提出来的,它是一种对较为模糊或较为复杂的决策 ...查看


  • 遥感图像处理实验报告_灰度共生矩阵
  • 遥感图像处理 实验报告 (2013 -2014 学年第1学期) 实验名称: 实验时间: 实验地点: 指导教师: 专业班级: 姓名: 学号: 一:实验目的 通过实验,理解并掌握灰度共生矩阵的概念,理解灰度共生矩阵对于纹理描述的意义,理解从纹理 ...查看


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


  • 二维人脸识别实验报告
  • 实 验 报 告 课程名称 人工智能 实验名称 班 级 学 号 姓 名 成 绩 指导教师 实验日期 一.实验目的 (1)通过本次人脸识别实验,进一步加深图像处理和基本算法的掌握,能利用已有的算法和程序去找出和识别人脸. (2)通过本次人脸识别 ...查看


  • 一种改进的稀疏子空间聚类算法_欧阳佩佩
  • 2014年8月 第27卷第3期 青岛大学学报(自然科学版) )OURNALOFINGDAOUNIVERSITY(NaturalScienceEditionJ Q ol.27No.3V Au.2014 g ()文章编号:10000603720 ...查看


  • 高等数学大纲(物理类)
  • <高等数学>教学大纲 课程名称:高等数学 适用层次.专业:理科.工科各专业 学 时:320学时 学 分:20学分 课程类型:通识教育平台课 课 程 性 质:必修课 一.课程的教学目标与任务 高等数学是理.工.管等相关专业的第一基 ...查看


  • 自然伽马能谱测井谱解析方法研究
  • 第32卷2010年第5期10月 西南石油大学学报(自然科学版) Journal of Southwest Petroleum University (Science &Technology Edition ) Vol.32Oct. ...查看


  • 实验四 选区电子衍射与晶体取向分析
  • 实验四 选区电子衍射与晶体取向分析 一.实验内容及实验目的 1.通过选区电子衍射的实际操作演示,加深对选区电子衍射原理的了解. 2.选择合适的薄晶体样品,利用双倾台进行样品取向的调整,使学生掌握利用电子衍射花样测定晶体取向的基本方法. 二. ...查看


  • 一种圆形禁令交通标志快速提取和识别方法
  • Geomatics Science and Technology 测绘科学技术, 2016, 4(2), 45-52 Published Online April 2016 in Hans. A Quickly Detecting and ...查看


热门内容