幂法.cpp

来自「运用幂法求矩阵的主特征值(及最大特征值)」· C++ 代码 · 共 62 行

CPP
62
字号
#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 + =
减小字号Ctrl + -
显示快捷键?