数值分析之幂法及反幂法C语言程序实例.doc_第1页
数值分析之幂法及反幂法C语言程序实例.doc_第2页
数值分析之幂法及反幂法C语言程序实例.doc_第3页
数值分析之幂法及反幂法C语言程序实例.doc_第4页
数值分析之幂法及反幂法C语言程序实例.doc_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值分析之幂法及反幂法C语言程序实例1、算法设计方案:求、和的值:表示矩阵的按模最小特征值,为求得直接对待求矩阵A应用反幂法即可。、:已知矩阵A的特征值满足关系 ,要求、及时,可按如下方法求解:a 对矩阵A用幂法,求得按模最大的特征值。b 按平移量对矩阵A进行原点平移得矩阵,对矩阵B用反幂法求得B的按模最小特征值。c则:,即为所求。求和A的与数最接近的特征值(k=0,1,39):求矩阵A的特征值中与最接近的特征值的大小,采用原点平移的方法:先求矩阵 B=A-I 对应的按模最小特征值,则+即为矩阵A与最接近的特征值。重复以上过程39次即可求得(k=0,1,39)的值。求A的(谱范数)条件数和行列式:在(1)中用反幂法求矩阵A的按模最小特征值时,要用到Doolittle分解方法,在Doolittle分解完成后得到的两个矩阵分别为L和U,则A的行列式可由U阵求出,即:det(A)=det(U)。 求得det(A)不为0,因此A为非奇异的实对称矩阵,则:,和分别为模最大特征值与模最小特征值。2、程序源代码:#include#include#include#define N 501/列#define M 5/行#define R 2/下带宽#define S 2/上带宽#define K 39#define e 1.0e-12/误差限float AMN;/初始矩阵float uN;/初始向量float yN,yyN;float maximum,value1,value2,value_1,value_N,value_s,value_abs_max;const float b=0.16f,c=-0.064f;int max_sign,max_position;void Init_matrix_A()/初始化矩阵Aint i;for(i=2;iN;i+)A0i= c;for(i=1;iN;i+)A1i= b;for(i=0;iN;i+)A2i= (1.64-0.024*(i+1)*sin(0.2*(i+1)-0.64*exp(0.1/(i+1);for(i=0;iN-1;i+)A3i= b;for(i=0;iN-2;i+)A4i= c;void Init_u()/初始化迭代向量int i;for(i=0;iN;i+)ui=1.0;void Get_max()/获得绝对值最大的数值的模int i;max_position=0;maximum=fabs(u0);for(i=1;iN;i+)if(maximumfabs(ui)max_position=i;maximum=fabs(ui);if(umax_position0)max_sign=-1;else max_sign=1;void Get_y()/单位化迭代向量int i;for(i=0;iN;i+)yi=ui/maximum;void Get_u()/获得新迭代向量int i;u0=A20*y0+A11*y1+A02*y2;u1=A30*y0+A21*y1+A12*y2+A03*y3;uN-2=A4N-4*yN-4+A3N-3*yN-3+A2N-2*yN-2+A1N-1*yN-1;uN-1=A4N-3*yN-3+A3N-2*yN-2+A2N-1*yN-1;for(i=2;iN-2;i+)ui=A4i-2*yi-2+A3i-1*yi-1+A2i*yi+A1i+1*yi+1+A0i+2*yi+2;void Get_value()/获得迭代后特征值value2=value1;value1=max_sign*umax_position;void Check_value()/幂法第二迭代格迭代Init_u();Get_max();Get_y();Get_u();Get_value();while(1)Get_max();Get_y();Get_u();Get_value();if(fabs(value2-value1)/value1)e)break;void The_value()/获取绝对值最大的特征值_501Check_value();value_abs_max=value1;void The_Other_value()/获取特征值_1int i;float value_temp=value1;for(i=0;iN;i+)A2i-=value_temp;Check_value();value1+=value_temp;if(value1value_temp)value_1=value1;value_N=value_temp;elsevalue_N=value1;value_1=value_temp;int min(int a,int b)/两值中取最小if(ab)return a;elsereturn b;int max(int a,int b)/两值中取最大if(ab)return b;elsereturn a;void Resolve_LU()int k,i,j,t;float temp;for(k=1;k=N;k+) for(j=k;j=min(k+S,N);j+)temp=0; for(t=max(max(1,k-R),j-S);t=k-1;t+) temp+=Ak-t+St-1*At-j+Sj-1;Ak-j+Sj-1=Ak-j+Sj-1-temp; for(i=k+1;i=min(k+R,N);i+) temp=0;for(t=max(max(1,i-R),k-S);t=k-1;t+) temp+=Ai-t+St-1*At-k+Sk-1;Ai-k+Sk-1=(Ai-k+Sk-1-temp)/ASk-1; void Back_substitution()/方程组回代过程int i,t;float temp=0;for(i=2;iN+1;i+)for(t=max(1,i-R);t0;i-)temp=0;for(t=i+1;t=min(i+S,N);t+)temp+=Ai-t+St-1*ut-1;ui-1=(yi-1-temp)/ASi-1;double Det_matrix()/求矩阵行列式值int i;double det=1;Init_matrix_A();Resolve_LU();for(i=0;iN;i+)det=det*A2i;return det;float Get_norm()/获得迭代向量模int i;float normal=0;for(i=0;iN;i+)normal+=ui*ui;normal=sqrt(normal);return normal;void Get_yy(float normal)/迭代向量单位化int i;for(i=0;iN;i+)yi=ui/normal;yyi=yi;void Get_value_s()/获得绝对值最小的特征值int i;value2=value1;value1=0;for(i=0;iN;i+)value1+=yyi*ui;value1=1/value1;void Value_min()/反幂法求绝对值最小的特征值float norm=0;int count=0;value1=0,value2=0;Init_u();norm=Get_norm();Get_yy(norm);Back_substitution();Get_value_s();while(count10000)count+;norm=Get_norm();Get_yy(norm);Back_substitution();Get_value_s();if(fabs(value2-value1)/value1)e)break;value_s=value1;float Get_cond_A()/求矩阵条件数float cond1;cond1=fabs(value_abs_max/value_s);return cond1;void Value_translation_min()/偏移条件下反幂法求特征值int i,k;float tr;for(k=1;kK+1;k+)tr=value_1+k*(value_N-value_1)/40;Init_matrix_A();for(i=0;ii%d=%.13en,k,k,value_s);void main()float cond;double value_det;printf(Contact me: 731363227n);Init_matrix_A();/初始化矩阵AThe_value();/获取绝对值最大的特征值_501The_Other_value();/获取特征值_1printf(1=%.13en,value_1);printf(501=%.13en,value_N);value_det=Det_matrix();/求矩阵行列式值Value_min();/反幂法求绝对值最小的特征值printf(s=%.13en,value_s);cond=Get_cond_A();/求矩阵条件数Value_translation_min();/偏移条件下反幂法求特征值printf(cond_A=%.13en,cond);printf(value_det=%.13en,value_det);3、程序运行结果:4、迭代初始向量的选取对计算结果的影响:本次计算实习求矩阵A的具有某些特征的特征值,主要用到的方法是幂法和反幂法,这两种方法从原理上看都是迭代法,因此迭代初始向量的选择对计算结果会产生一定影响,主要表现在收敛速度上。通过实际调试发现,对某些特殊的迭代初始值,确实对收敛结果及收敛速度产生影响,具体如下所列:以下结论建立在float数据类型基础之上;1.迭代初始值ui=c(i=1,2,501)且c的绝对值值极大(例如1.0e12以上),收敛结果可以稳定但收敛速度减慢,其原因为c的数量级与矩阵A中元素数量级差距过大,导致迭代次数以及运算量增大;2.迭代初始值ui=c(i=1,2,501)且c的绝对值值极小(例如1.0e-12以下),收敛结果并不稳定,且收

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论