欢迎来到天天文库
浏览记录
ID:36275260
大小:1.40 MB
页数:14页
时间:2019-05-08
《北航数值分析报告大作业一》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实用文案《数值分析B》大作业一SY1103120朱舜杰一.算法设计方案:1.矩阵A的存储与检索将带状线性矩阵A[501][501]转存为一个矩阵MatrixC[5][501].由于C语言中数组角标都是从0开始的,所以在数组MatrixC[5][501]中检索A的带内元素aij的方法是:A的带内元素aij=C中的元素ci-j+2,j2.求解λ1,λ501,λs①首先分别使用幂法和反幂法迭代求出矩阵按摸最大和最小的特征值λmax和λmin。λmin即为λs;如果λmax>0,则λ501=λmax;如果λmax<0,则λ1=λ
2、max。②使用带原点平移的幂法(mifa()函数),令平移量p=λmax,求出对应的按摸最大的特征值λ,max,如果λmax>0,则λ1=λ,max+p;如果λmax<0,则λ501=λ,max+p。3.求解A的与数μk=λ1+k(λ501-λ1)/40的最接近的特征值λik(k=1,2,…,39)。使用带原点平移的反幂法,令平移量p=μk,即可求出与μk最接近的特征值λik。4.求解A的(谱范数)条件数cond(A)2和行列式detA。①cond(A)2=
3、λ1/λn
4、,其中λ1和λn分别是矩阵A的模最大和最小特征值。
5、标准文档实用文案②矩阵A的行列式可先对矩阵A进行LU分解后,detA等于U所有对角线上元素的乘积。一.源程序#include#include#include#include#include#include#include#defineE1.0e-12/*定义全局变量相对误差限*/intmax2(inta,intb)/*求两个整型数最大值的子程序*/{if(a>b)returna;elser
6、eturnb;}intmin2(inta,intb)/*求两个整型数最小值的子程序*/{if(a>b)returnb;elsereturna;}intmax3(inta,intb,intc)/*求三整型数最大值的子程序*/{intt;if(a>b)t=a;elset=b;if(t7、;j<=500;){array[i][j]=0;j++;}i++;}//第0,4行赋值for(j=2;j<=500;){k=500-j;array[0][j]=-0.064;array[4][k]=-0.064;j++;}//第1,3行赋值for(j=1;j<=500;){k=500-j;array[1][j]=0.16;array[3][k]=0.16;j++;}//第2行赋值for(j=0;j<=500;){k=j;j++;array[2][k]=(1.64-0.024*j)*sin((double)(0.2*j))8、-0.64*exp((double)(0.1/j));}}doublemifa(doubleu[501],doublearray[5][501],doublep)/*带原点平移的幂法*/{inti,j;/*u[501]为初始迭代向量*/标准文档实用文案doublea,b,c=0;/*array[5][501]为矩阵A的转存矩阵*/doubley[501];/*p为平移量*/for(;;){a=0;b=0;/*选用第一种迭代格式*///求ηk-1for(i=0;i<=500;i++){a=a+u[i]*u[i];}a=sq9、rt(a);//求yk-1for(i=0;i<=500;i++){y[i]=u[i]/a;}//求ukfor(i=0;i<=500;i++){u[i]=0;for(j=max2(i-2,0);j<=min2(i+2,500);j++){u[i]+=array[i-j+2][j]*y[j];}u[i]=u[i]-p*y[i];/*引入平移量*/}//求βkfor(i=0;i<=500;i++){b+=y[i]*u[i];}if(fabs((b-c)/b)<=E)/*达到精度水平,迭代终止*/break;c=b;}retur10、n(b+p);/*直接返回A的特征值*/}voidchuzhi(doublea[])/*用随机数为初始迭代向量赋值*/{标准文档实用文案inti;srand((int)time(0));for(i=0;i<=500;i++){a[i]=(10.0*rand()/RAND_MAX);/*生成0~10的随机数*/}}vo
7、;j<=500;){array[i][j]=0;j++;}i++;}//第0,4行赋值for(j=2;j<=500;){k=500-j;array[0][j]=-0.064;array[4][k]=-0.064;j++;}//第1,3行赋值for(j=1;j<=500;){k=500-j;array[1][j]=0.16;array[3][k]=0.16;j++;}//第2行赋值for(j=0;j<=500;){k=j;j++;array[2][k]=(1.64-0.024*j)*sin((double)(0.2*j))
8、-0.64*exp((double)(0.1/j));}}doublemifa(doubleu[501],doublearray[5][501],doublep)/*带原点平移的幂法*/{inti,j;/*u[501]为初始迭代向量*/标准文档实用文案doublea,b,c=0;/*array[5][501]为矩阵A的转存矩阵*/doubley[501];/*p为平移量*/for(;;){a=0;b=0;/*选用第一种迭代格式*///求ηk-1for(i=0;i<=500;i++){a=a+u[i]*u[i];}a=sq
9、rt(a);//求yk-1for(i=0;i<=500;i++){y[i]=u[i]/a;}//求ukfor(i=0;i<=500;i++){u[i]=0;for(j=max2(i-2,0);j<=min2(i+2,500);j++){u[i]+=array[i-j+2][j]*y[j];}u[i]=u[i]-p*y[i];/*引入平移量*/}//求βkfor(i=0;i<=500;i++){b+=y[i]*u[i];}if(fabs((b-c)/b)<=E)/*达到精度水平,迭代终止*/break;c=b;}retur
10、n(b+p);/*直接返回A的特征值*/}voidchuzhi(doublea[])/*用随机数为初始迭代向量赋值*/{标准文档实用文案inti;srand((int)time(0));for(i=0;i<=500;i++){a[i]=(10.0*rand()/RAND_MAX);/*生成0~10的随机数*/}}vo
此文档下载收益归作者所有