您的当前位置:首页正文

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

2020-02-10 来源:独旅网
数值分析之幂法及反幂法C语言程序实例

1、算法设计方案:

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

s:s表示矩阵的按模最小特征值,为求得s直接对待求矩阵A应用反幂法即可。

1、501:已知矩阵A的特征值满足关系 1Ln,要求1、及501时,可

按如下方法求解:

a. 对矩阵A用幂法,求得按模最大的特征值m1。 b. 按平移量m1对矩阵A进行原点平移得矩阵B求得B的按模最小特征值m2。 c. m3Am1I,对矩阵B用反幂法

m2m1

则:1min(m1,m3),nmax(m1,m3)即为所求。

②求和A的与数k1k501140最接近的特征值

ik(k=0,1,…39):

求矩阵A的特征值中与k最接近的特征值的大小,采用原点平移的方法:

先求矩阵 B=A-kI 对应的按模最小特征值k,则k+k即为矩阵A与k最接近的特征值。

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

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

在(1)中用反幂法求矩阵A的按模最小特征值时,要用到Doolittle分解方法,在

Doolittle分解完成后得到的两个矩阵分别为L和U,则A的行列式可由U阵求出,即:det(A)=det(U)。

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

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

cond(A)2max,max和s分别为模最大特征值与模最小特征值。 s

2、程序源代码:

#include<> #include<> #include<>

#define N 501 3e\\n\ } }

void main() {

float cond;

double value_det;

printf(\"Contact me\\n\");

Init_matrix_A(); 3e\\n\ printf(\"λ501=%.13e\\n\

value_det=Det_matrix(); 3e\\n\ cond=Get_cond_A(); 3e\\n\

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

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: Further details please Contact me: 2011-11-15

因篇幅问题不能全部显示,请点此查看更多更全内容