西华数学与计算机学院上机实践报告
课程名称:计算方法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