⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 幂法.cpp

📁 运用幂法求矩阵的主特征值(及最大特征值)
💻 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 + -