北航数值分析实习第一题.docx

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北航数值分析实习第一题

数值分析计算实习报告第一题所在班级A1 班学生姓名学生学号2015年11月算法设计方案矩阵的压缩存储A矩阵是一个带宽为5的带状矩阵,众多的0会占据很多存储空间,因此可以将其压缩存储。存储方法是将矩阵逆时针旋转45度,并调整使列号不变,调整后的矩阵如下:求解最大、最小的特征值及模最小的特征值1.利用幂法计算出矩阵A按模最大的特征值(它是和中的一个)。2.利用幂法计算出矩阵(其中I为单位矩阵)按模最大的特征值,令(它是和中的另一个)。3.比较和的大小,大的是,小的是。4. 利用反幂法直接计算出矩阵A按模最小的特征值。求与某值接近的特征值采用原点平移法即可方便求解与某值接近的特征值。对于每个k值,先利用反幂法计算出矩阵按模最小的特征值,令即可。求解条件书和行列式值对于非奇异实对称矩阵A,它的条件数,其中是按模最大的特征值,是按模最小的特征值。行列式的值为上三角矩阵对角线元素的乘积。过在进行反幂法求解中要进行Doolittle分解,Doolittle分解可以得到一个上三角矩阵,其对角线元素的乘积就是行列式值。C++程序#includestdio.h#includemath.hvoid caculateA(double a[5][501]);//计算出A矩阵,并且将其压缩存储double mifa2(double a[5][501]);//用2范数的幂法求按模最大特征值double fanmifa2(double a[5][501]);//用2范数的反幂法求按模最小特征值void ludoolittle(double a[5][501]);//简易存储的矩阵的doolittle分解double findlamnear(double x);//求x处的特征值int max3(int x,int y,int z);//求三个数的最大值int min2(int x,int y);//求两个数的最小值double fanshu2(double a[]);//向量的2范数double inner(double x[],double y[]);//向量乘积void multi(double a[5][501],double x[],double y[]);//矩阵与向量相乘void solve(double a[5][501],double y[],double x[]);//根据doolittle分解的结果,求解方程解向量xvoid main(){#define err 1e-12printf(数值分析计算实习第一次作业\n);printf(班\n);double a[5][501];doublelam1,lam501,lamm,lams,temp,cond,det,x;int i;caculateA(a);lam1=mifa2(a);lamm=lam1;for(i=0;i501;i++)a[2][i]=a[2][i]-lam1;lam501=mifa2(a)+lam1;if(lam1lam501){temp=lam1;lam1=lam501;lam501=temp;}caculateA(a);ludoolittle(a);det=1.0;for(i=0;i501;i++){det=det*a[2][i];}lams=fanmifa2(a);cond=fabs(lamm/lams);printf(最小特征值λ1=%.11e\n,lam1);printf(最大特征值λ501=%.11e\n,lam501);printf(按模最小特征值λs=%.11e\n,lams);for(i=0;i39;i++){temp=lam1+(i+1)*(lam501-lam1)/40;x=findlamnear(temp);printf(λi%d=%.11e\t,i+1,temp);if(i%2==1)printf(\n);}printf(\n);printf(条件数cond(A)=%.11e\n,cond);printf(行列式值det(A)=%.11e\n,det);}void caculateA(double a[5][501]){double b=0.16;double c=-0.064;int i;for(i=2;i501;i++)a[0][i]=c;for(i=1;i501;i++)a[1][i]=b;for(i=0;i501;i++)a[2][i]=(1.64-0.024*(i+1))*sin(0.2*(i+1))-0.64*exp(0.1/(i+1));for(i=0;i500;i++)a[3][i]=b;for(i=0;i501-2;i++)a[4][i]=c;}double mifa2(double a[5][501]){double beta=

文档评论(0)

youshen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档