数值分析幂法c语言实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.运行结果: