北航数值分析B大作业一

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1、题目 (1)

2、算法设计方案 (1)

3、源程序 (2)

4、输出结果 (12)

5、迭代初始向量选取对计算结果的影响分析 (14)

1、 题目

设有501×501的矩阵

A = ⎥⎥⎥⎥

⎥⎥⎥⎥⎥⎦

⎤⎢⎢⎢⎢⎢

⎢⎢⎢⎢⎣

⎡501500499321

a b a c b a ...............

c b a c b a c b a b

c

b c

b c

b c b 其中0.1=(1.640.024)sin(0.24)0.64(=1,2,501)

i

ai i i e i --…,;b=0.16,c=-0.064。矩阵A 的特征值(=1,2,501)i i λ…,

满足 12<<<λλλ501 (1501)

=min s i i λλ≤≤

试求:

1. 1λ,501λ和s λ的值;

2. A 的与1

1=+40

k k

λλμλ501-最接近的特征值(=1,2,39)k i k λ…,。

3. A 的(谱范数)条件数2cond(A)和行列式det A 。

2、算法设计方案

由已知可知,矩阵A 为带状矩阵,为了节省类存空间,对于矩阵中的大量0元素不存储。根据带状矩阵的特点,选择一个5行501列的二维数组存储。

1. 求解矩阵A 的最大、最小特征值和按模最小特征值,采用幂法进行计算。计算步骤如下:

a) 用幂法求出矩阵A 的按模最大特征值'λ,用反幂法求出矩阵A 的按模最小特征值s λ;

b) 用幂法求出矩阵A -'λI 的按模最大特征值''λ; c) 比较''λ+'λ与'λ的大小,较大特征值为

501λ,较小值1λ。

2. 求解与1

1=+40

k k

λλμλ501-最接近的特征值(=1,2,39)k i k λ…,,

可以按以下步骤完成: a) 用反幂法求出矩阵A -k μI 的按模最小特征值λμ; b) 则k i λ=λμ+k μ。

3. 求解矩阵A 的条件数和行列式值。对于条件数而言,由于A 为对称矩阵,根据条件数的定义可知,2'

cond(A)=

s

λλ,其中'λ为矩阵A 的按模最大特征值,s λ为矩阵A 的按模最小特征值;对于行列式值而言,可以先将矩阵A 按Doolittle 分解,则A = LU ,则

===A LU L U U 。

4. 程序设计思路。通过对题目进行分析以及算法可知,任务涉及矩阵Doolittle 分解求解带状方程组、求矩阵按模最大特征值、求矩阵按模最小特征值和用Doolittle 分解求解矩阵A 的行列式。为了能够简化主函数的复杂程度,可以将分模块完成相应的功能,最后在主函数中调用已经完成的功能函数即可。

3、源程序

源程序如下:

#include

#include

#define M 5

#define N 501

/************************************************************

求最大、最小值的函数

************************************************************/ int Max(int para1,int para2)

{

if(para1 >= para2)

return para1;

else

return para2;

}

int Min(int para1,int para2)

{

if(para1 < para2)

return para1;

else

return para2;

}

/************************************************************

初始化矩阵

************************************************************/ void Creat(double A[M][N],double b,double c)

{

int i = 0;

int j = 0;

/*初始化第一行*/

A[i][j] = 0;

j++;

A[i][j] = 0;

j++;

for (j=2; j < N;j++)

{

A[i][j] = c;

}

/*初始化第二行*/

i++;

j = 0;

A[i][j] = 0;

j++;

for (j=1; j < N;j++)

{

A[i][j] = b;

}

/*初始化第三行*/

i++; j = 0;

for (j=0; j < N;j++)

{

A[i][j] = (1.64 - 0.024 * (j+1)) * sin(0.2 * (j+1)) - 0.64 * exp(0.1 / (j+1));

}

/*初始化第四行*/

i++; j = 0;

for (j=0;j < (N - 1);j++)

{

A[i][j] = b;

}

A[i][j] = 0;

/*初始化第五行*/

i++; j= 0;

for (j=0;j < (N - 2);j++)

{

A[i][j] = c;

}

A[i][j] = 0; j++;

A[i][j] = 0;

}

相关文档
最新文档