📄 幂法.cpp
字号:
#include "stdio.h"
#include "malloc.h"
#include "math.h"
#define Aij A[i*n+j]
double *chushiA(int n)
{int i,j;
double *A;
A=(double *)malloc((n*n)*sizeof(double));
printf("请输入矩阵:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%lf",&Aij);
return A;
}
double *chushiU(int n)
{int i,k=0;
double *U;
U=(double *)malloc(n*sizeof(double));
printf("请输入初始向量:\n");
for(i=0;i<n;i++)
scanf("%lf",&U[i]);
printf("幂法得到特征向量及特征值的过程如下表:\n");
printf(" k Uk maxVk \n");
printf(" %d (%.4lf,%.4lf,%.4lf) \n",k,U[0],U[1],U[2]);
return U;
}
void mifa(double *A,double *U,int n)
{int i,j,k=0;
double *V,b1,b2=0;
V=(double *)malloc(n*sizeof(double));
do{
k++;
b1=b2;
b2=0;
for(i=0;i<n;i++)
{V[i]=0;
for(j=0;j<n;j++)
V[i]+=Aij*U[j];}
for(i=0;i<n;i++)
if(fabs(V[i])>b2) b2=fabs(V[i]);
for(i=0;i<n;i++)
U[i]=V[i]/b2;
printf(" %d (%.4lf,%.4lf,%.4lf) %lf\n",k,U[0],U[1],U[2],b2);}
while(fabs(b2-b1)>0.00001);
}
void main()
{int n;
double *A,*U;
printf("请输入矩阵的阶数:");
scanf("%d",&n);
A=chushiA(n);
U=chushiU(n);
mifa(A,U,n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -