《北航数值分析B第一次上机作业算法作业.doc》由会员分享,可在线阅读,更多相关《北航数值分析B第一次上机作业算法作业.doc(10页珍藏版)》请在装配图网上搜索。
数值分析第一次上机作业
班级:ZY16131
学号:ZY16131
姓名:
一、算法方案设计
(1)存储矩阵A(参考课本25页):
矩阵A501501为大型带状矩阵,上半带宽S=2,下半带宽R=2,参照课本,可将其用循环语句存储在一个5行501列的二维数组A[5][501]中,使得矩阵A的第j列存放数组A 的第j列带状元素,并使得矩阵的主对角元素存放在数组的第三行。检索矩阵的元素时只要按照公式:aij=数组a[i-j+3][j]即可。
(2)求λ1,λ501,λs:
第一步,用幂法求出矩阵A按模最大特征值,再对其判断正负,如果是正数,则该特征值为λ501,如果是负数,则该特征值为λ1。
幂法实现过程具体为:
第二步,用反幂法求矩阵A按模最小特征向量λS。
第三步,由于λ1≤λ2≤…..≤λ501,可采用原点平移法对矩阵A平移λ1,得到矩阵(-λ1I+A),记为矩阵B,再用用幂法求出B的模最大特征值λB,则λ501=λB+λ1。
(3)距离μk最近的特征值:
还是用原点平移法,将矩阵A平移μk个单位,再用反幂法求出平移后矩阵模最小特征值ηk,矩阵A与μk最接近的特征值为:
λik = ηk + μk =ηk +
(4)A的谱范数条件数与detA:
a、求矩阵A的行列式值:
在用反幂法时需要对矩阵A进行Doolittle三角分解,A=LU,根据det(A)=det(LU)=det(L)*det(U),其中det(L)=1,det(A)即为U矩阵的对角线元素的乘积。
b、求A的(谱范数)条件数cond(A)2:
由于A是非奇异实对称阵,从而cond(A)2 =∣λ1∣/∣λs∣。
2、 运行结果分析
(1) 取初始向量为 u_0[501]={1,1…1},计算结果截图如下:
(2)讨论初始迭代向量取值对计算结果的影响
在编程实现算法的过程中遇到了很多问题,多次尝试才得以解决。例如,对各个函数的定义后需要对矩阵A进行初始化;为简化程序,方便改变变量值,应该尽可能地将某些多级变量写成函数的形式,只需要对初级变量赋值即可。
猜想:幂法迭代的精度跟初始向量 u_0[501]的取值有关。
①取初始向量为[1,1,…,0]T(共50个1),计算结果如下:
对比初始向量为 [1,1,…,1]T 计算结果可发现,最小特征值和按模最小特征值均发生较大变化。
②取初始向量为[1,1,…,0]T(共100个1),计算结果如下:
计算结果与初始向量为 [1,1,…,1]T 时的计算结果基本一样。
③取初始向量为[1,1,…,0]T(共300个1),计算结果如下:
对比初始向量为 [1,1,…,1]T 计算结果可发现,最大、最小特征值以及按模最小特征值都发生变化,其中最小特征值和按模最小特征值相较初始向量中含0较多的①②情况更接近初始向量为 [1,1,…,1]T 的计算结果,但最大特征值变化比较明显。
④取初始向量为[10,10,…,10]T(元素全为10),计算结果如下:
计算结果跟初始向量为 [1,1,…,1]T 时的计算结果一样,没有变化。
⑤取初始向量为[0,0,…,0]T(元素全为0),计算结果如下:
计算出错。
总结:
通过以上五组计算结果对比,可以初步发现:
采用幂法迭代时,选取的初始向量中0元素的多少对于计算结果和运算次数有很大的影响。基本规律是:0元素越少,结果越准确。由于对初始向量进行了单位化,所以初始向量的模的大小对于运算结果没有太大影响。
这是因为,如果所选的u0使得α1=0,由于计算过程中的舍入误差影响,必然会使得迭代过程中的某一步出现x1方向分量不为零的情况,相当于重新进行迭代,增大计算量和误差。(参考课本49页)
附:C程序代码
#include
#include
#define N 502 /*数组记法:从a[1,1]到a[501,501]*/
#define accuracy 1.0e-12
#define r 2
#define s 2
double c[6][N]; /*定义c矩阵存储压缩后的带状矩阵*/
double fuzhi(); /*赋值函数*/
void Doolittle(); /*Doolittle三角分解程序*/
int max(int a,int b); /*求两个数较大值函数*/
int min(int a,int b); /*求两个数较小值函数*/
double mifa(); /*幂法计算*/
double fanmifa(); /*反幂法计算*/
double fuzhi() /*定义赋值程序,将带状函数逆时针旋转45后,按行赋值,行从1到5,列从1到501,未赋值区域值为0*/
{
int i,j;
i=1;
for(j=3;jb)?a:b);
}
int min(int a,int b) /*定义求最小值函数*/
{ return((a=accuracy); /*判断精度水平是否满足,不满足则继续迭代*/
return(beta); /*满足精度要求之后返回beta值*/
}
double fanmifa() /*反幂法计算程序*/
{
double u0[N],u1[N],u2[N];
double temp,yita,beta=0,beta0;
int i,t;
for(i=1;i=1;i--)
{ temp=0;
for(t=i+1;t<=min(i+s,N-1);t++)
{temp=temp+c[i-t+s+1][t]*u0[t];}
u0[i]=(u2[i]-temp)/c[s+1][i];
}
temp=0;
for(i=1;i=accuracy); /*迭代运行条件判断*/
return(beta);
}
main() /*主函数*/
{
double u[40]; /*定义数组,用于计算第2问*/
double lambda_1,lambda_501,lambda_s,a,b,d,cond,det;
int i,j,k;
fuzhi();
a=mifa(); /*幂法计算按模最大值*/
fuzhi();
for(j=1;jb) /*比较两个按模最大值大小,并相应输出最大特征值λ和最小特征值λ*/
{
lambda_1=b;
lambda_501=a;
printf("Lmd_1=%13.11e\n",lambda_1);
printf("Lmd_501=%13.11e\n",lambda_501);
}
else
{
lambda_1=a;
lambda_501=b;
printf("Lmd_1=%13.11e\n",lambda_1);
printf("Lmd_501=%13.11e\n",lambda_501);
}
fuzhi();
d=fanmifa(); /*反幂法计算按模最小值*/
printf("Lmd_s=%13.11e\n",d); /*输出按模最小特征值λs*/
printf("\n");
for(k=1;k<40;k++) /*对每一个进行移项反幂法运算,求出最接近μk的特征值并输出*/
{
u[k]=(lambda_501-lambda_1)*k/40+lambda_1;
fuzhi();
for(j=1;j
下载提示(请认真阅读)
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
5
积分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
-
北航
数值
分析
第一次
上机
作业
算法
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
链接地址:https://www.zhuangpeitu.com/p-12773120.html