1.实验目的:
1熟练掌握C 语言程序设计,编程求解问题。
2.运用幂法求解住特征值和特征向量。
2.实验内容:
例题:
用幂法求 A=
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡0.225.05.025.00.10.15.00.10.1 的特征值和特征向量。
完整代码以及截图如下:
#include "stdio.h"
#include "math.h"
#define M 3
void main()
{
float fan(),max(),e1,e2,r1,r2;
void au(),ex(),print_x(),std();
static float a[M][M]={{1.0,1.0,0.5},{1.0,1.0,0.25},{0.5,0.25,2.0}}; static float u0[M],u1[M],maxn0,maxn1;
int i;
printf("*********************************\n");
printf("****** 幂法*********\n");
printf("******求特征值与特征向量*********\n");
printf("*********************************\n\n");
printf("input precision e1,e2:");
scanf("%f,%f",&e1,&e2);
printf("\ninput u(%d):",M);
for (i=0;i<M;++i)
{
scanf("%f",&u0[i]);
}
std(u0);
maxn0=max(u0);
i=0;
printf("\n- - - - - - - - - - - - - - - - - -\n");
printf(" ............NMD\n");
do
{
au(a,u0,u1);
maxn1=max(u1);
std(u1);
r1=fan(u0,u1);
r2=(float)fabs(maxn0-maxn1);
maxn0=maxn1;
if (r1>e1 || r2>e2)
{
printf("%4d",i++);
print_x(u0);
printf("\n");
ex(u0,u1);
}
else
break;
} while (1);
}
void au(a,u0,u1)
float a[][M],u0[],u1[];
{
int i,j;
for (i=0;i<M;i++)
{
u1[i]=0;
for (j=0;j<M;j++)
{
u1[i]+=a[i][j]*u0[j];
}
}
}
void std(u)
float u[];
{
int i;
float t,max();
t=max(u);
for (i=0;i<M;i++)
{
u[i]=u[i]/t;
}
}
float fan(u0,u1)
float u0[],u1[];
{
float max();
int i;
float uu[M];
for (i=0;i<M;i++)
{
uu[i]=u0[i]-u1[i];
}
return max(uu);
}
float max(u)
float u[];
{
int i;
float m;
m=u[0];
for (i=0;i<M;i++)
{
if (u[i]>m)
{
m=u[i];
}
}
return m;
}
void ex(u0,u1)
float u0[],u1[];
{
int i;
for (i=0;i<M;i++)
{
u0[i]=u1[i];
}
}
void print_x(u)
float u[];
{
int i;
for (i=0;i<M;i++)
{
printf("%12.6f",u[i]);
}
}
3.运行结果:。