数值分析幂法c语言实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

{

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

{

u1[i]=0;

for (j=0;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

{

u[i]=u[i]/t;

}

}

float fan(u0,u1)

float u0[],u1[];

{

float max();

int i;

float uu[M];

for (i=0;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

{

if (u[i]>m)

{

m=u[i];

}

}

return m;

}

void ex(u0,u1)

float u0[],u1[];

{

int i;

for (i=0;i

{

u0[i]=u1[i];

}

}

void print_x(u)

float u[];

{

int i;

for (i=0;i

{

printf("%12.6f",u[i]);

}

}

3.运行结果:

相关文档
最新文档