资源描述:
《北航研究生数值分析编程大作业1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、......数值分析大作业一、算法设计方案1、矩阵初始化矩阵的下半带宽r=2,上半带宽s=2,设置矩阵,在矩阵C中检索矩阵A中的带内元素的方法是:。这样所需要的存储单元数大大减少,从而极大提高了运算效率。2、利用幂法求出幂法迭代格式:当时,迭代终止。首先对于矩阵A利用幂法迭代求出一个,然后求出矩阵B,其中(为单位矩阵),对矩阵B进行幂法迭代,求出,之后令,比较,大者为,小者为。3、利用反幂法求出反幂法迭代格式:当时,迭代终止,。参考材料......每迭代一次都要求解一次线性方程组,求解过程为:(1)作分解对于执行(2)求解(数组b先
2、是存放原方程组右端向量,后来存放中间向量y)使用反幂法,直接可以求得矩阵按模最小的特征值。求与数最接近的特征值,对矩阵实行反幂法,即可求出对应的。4、求出A的条件数和行列式根据,其中分子分母分别对应按模最大和最小的特征值。的计算:由于,其中为下三角矩阵,且对角线元素为1,故,所以有,又为上三角矩阵,故为对其对角线上各元素的乘积,最后可得。参考材料......二、程序源代码(1)定义所需要的函数:#include#include#include#defineN501#defineR2
3、#defineS2intmin(inta,intb);//求最小值intmax(inta,intb,intc);//求最大值doubleFan_two(doublex[N]);//计算二范数voidFenjieLU(double(*C)[N]);//解线性方程组的LU分解过程voidSolve(double(*C)[N],double*b,double*x);//解线性方程组的求解过程doublePowerMethod(doubleC[][N],doubleu[N],doubley[N],doublebta,doubleD);//幂
4、法参考材料......doubleInversePowerMethod(doubleC[][N],doubleu[N],doubley[N],doublebta,doubleD);//反幂法};(2)程序的主函数,Main.cpp代码如下:voidmain(){doubleC[R+S+1][N];doubleu[N];doubley[N];doublemiu[39];doubleC1[R+S+1][N];doublebta=1.0;doubleNamda1,Namda501,NamdaS;doubleNamda[39];double
5、CondA2;doubledetA=1.0;doubleD=1.0e-12;inti,j,k;FILE*fp;fp=fopen("Namda.txt","w");参考材料......//对数组进行初始化//inti,j;for(i=0;i6、
7、i==4){C[i][j]=-0.064;}elseif(i==1
8、
9、i==3){C[i][j]=0.16;}elseif(i==2){C[i][j]=(1.64-0.024
10、*(j+1))*sin(0.2*(j+1))-0.64*exp(0.1/(j+1));参考材料......}}}//幂法求Namda1//Namda1=PowerMethod(C,u,y,bta,D);printf("================================================");printf("Namda1=%12.11e",Namda1);printf("================================================");//幂法求Namda
11、501//bta=1.0;for(i=0;i12、ntf("================================================");//反幂法求NamdaS//bta=1.0;NamdaS=InversePowerMethod(C,u,y,bta