数值分析之幂法及反幂法C语言程序实例

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

数值分析之幂法及反幂法C 语言程序实例

1、算法设计方案:

①求1λ、501λ和s λ的值:

s λ:s λ表示矩阵的按模最小特征值,为求得s λ直接对待求矩阵A 应用反幂法即可。 1λ、501λ:已知矩阵A 的特征值满足关系 1n λλ<<,要求1λ、及501λ时,可按如下方法求解:

a . 对矩阵A 用幂法,求得按模最大的特征值1m λ。

b . 按平移量1m λ对矩阵A 进行原点平移得矩阵1m B

A I λ=+,对矩阵

B 用反幂法求得B 的按模最小特征值2m λ。

c . 321m m m λλλ=-

则:113min(,)m m λλλ=,13max(,)n m m λλλ=即为所求。

②求和A 的与数5011

140k k λλμλ-=+最接近的特征值ik λ(k=0,1,…39):

求矩阵A 的特征值中与k μ最接近的特征值的大小,采用原点平移的方法: 先求矩阵 B=A-k μI 对应的按模最小特征值k β,则k β+k μ即为矩阵A 与k μ最接近的特征值。

重复以上过程39次即可求得

ik λ(k=0,1,…39)的值。

③求A 的(谱范数)条件数2cond()A 和行列式det A :

在(1)中用反幂法求矩阵A 的按模最小特征值时,要用到Doolittle 分解方法,在Doolittle 分解完成后得到的两个矩阵分别为L 和U ,则A 的行列式可由U 阵求出,即:det(A)=det(U)。

求得det(A)不为0,因此A 为非奇异的实对称矩阵,则: max 2()s

cond A λλ=,max λ和s λ分别为模最大特征值与模最小特征值。

2、程序源代码:

#include<>

#include<>

#include<>

#define N 501 3e\n",k,k,value_s);

}

}

void main()

{

float cond;

double value_det;

printf("Contact me\n");

Init_matrix_A(); 3e\n",value_1);

printf("λ501=%.13e\n",value_N);

value_det=Det_matrix(); 3e\n",value_s);

cond=Get_cond_A(); 3e\n",cond);

printf("value_det=%.13e\n",value_det); }

3、程序运行结果:

4、迭代初始向量的选取对计算结果的影响:

本次计算实习求矩阵A的具有某些特征的特征值,主要用到的方法是幂法和反幂法,这两种方法从原理上看都是迭代法,因此迭代初始向量的选择对计算结果会产生一定影响,主要表现在收敛速度上。

通过实际调试发现,对某些特殊的迭代初始值,确实对收敛结果及收敛速度产生影响,具体如下所列:

以下结论建立在float数据类型基础之上;

1.迭代初始值u[i]=c(i=1,2,…,501)且c的绝对值值极大(例如以上),收敛结果可以稳定但收敛速度减慢,其原因为c的数量级与矩阵A中元素数量级差距过大,导致迭代次数以及运算量增大;

2.迭代初始值u[i]=c(i=1,2,…,501)且c的绝对值值极小(例如以下),收敛结果并不稳定,且收敛速度减慢,其原因是计算机舍入误差将会影响计算结果;

3.迭代初始值u[i] (i=1,2,…,501)之间数量级偏差很大(例如倍以上),收敛结果亦不稳定,且收敛速度减慢,其原因是人为使迭代过程中的权重发生较大区别,使迭代复杂化。

结论,对于迭代初始值的选取应尽量与矩阵A中元素数量级保持相近,且应保证相近的数量级。

PS: F urther details please Contact me:

2011-11-15

相关文档
最新文档