#include
#include
#define n 3
#define p 12
float max(float x[])
{
int i;
float max;
max=x[0];
for(i=1;i
if(fabs(x[i])>fabs(max)) max=x[i];
return max;
}
void main()
{
int i,j,r,k;
float t1,t2,t3,t4,t,m=12,epsilon=1;
float U[5][5],L[5][5],c[5][5],y[5];
float u[5]={1,1,1},v[5]={1,1,1};
float a[5][5]={{-8,1,4},{1,-2,1},{4,1,-2}};
for(i=0;i<=n-1;i++)
{
c[i][i]=a[i][i]-p;
for(j=0;j<=n-1;j++)
if(j!=i) c[i][j]=a[i][j];
}
for(i=0;i<=n-1;i++) //LU分解
{
U[0][i]=c[0][i];
L[i][i]=1;
}
for(i=0;i<=n-1;i++)
L[i][0]=c[i][0]/U[0][0];
for(r=1;r<=n-1;r++)
{
for(i=r;i<=n-1;i++)
{
t1=0;
for(j=0;j<=r-1;j++)
t1+=L[r][j]*U[j][i];
U[r][i]=c[r][i]-t1;
}
if(r!=n-1)
{
for(i=r+1;i<=n-1;i++)
{
t2=0;
for(j=0;j<=r-1;k++)
t2+=L[i][j]*U[j][r];
L[i][r]=(c[i][r]-t2)/U[r][r];
}
}
}
while(epsilon>=1e-3)
{
y[0]=u[0];
for(i=1;i<=n-1;i++)
{
t3=0;
for(j=0;j<=i-1;j++)
t3+=L[i][j]*y[j];
y[i]=u[i]-t3;
}
v[n-1]=y[n-1]/U[n-1][n-1];
for(i=n-2;i>=0;i--)
{
t4=0;
for(j=i+1;j<=n-1;j++)
t4+=U[i][j]*v[j];
v[i]=(y[i]-t4)/U[i][i];
}
t=m;
m=max(v);
for(i=0;i<=n-1;i++)
u[i]=v[i]/m;
epsilon=fabs(m-t);
k++;
}
printf("此矩阵的反幂法指定特征值为:%f\n",12+1.0/m);
printf("此矩阵的反幂法的特征向量为:\n");
for(i=0;i<=n-1;i++)
printf("%f\n",u[i]);
}
程序运行的时候语句没有错误,可是结果出不来
(不知道为什么前面几段有些显示不出来,就放了截图)