数值分析之幂法及反幂法C 语言程序实例
1、算法设计方案:
①求
1、
501 和
s 的 :
s :
s 表示矩 的按模最小特征 , 求得
s 直接 待求矩
A 用反 法即可。
1 、
501 :已知矩
A 的特征 足关系
1
L
n ,要求
1、及
501 ,可按如下
方法求解:
矩
A 用 法,求得按模最大的特征
m1 。
按平移量
m1 矩
A 行原点平移得矩
B
A
m1I
, 矩
B 用反 法求得
B 的按
模最小特征
m2
。
m3
m2
m1
:1min(m1 , m3 ) ,nmax( m1, m 3 ) 即 所求。
②求和 A 的与数
k
1
k 5011
最接近的特征
ik ( k=0, 1,? 39):
40
求矩 A 的特征 中与
k 最接近的特征 的大小,采用原点平移的方法:
先求矩 B=A-
k I 的按模最小特征
k , k +
k 即 矩 A 与 k 最接近的特征 。
重复以上 程 39 次即可求得
ik ( k=0,1,? 39)的 。
③求 A 的( 范数)条件数
cond( A)2 和行列式 det A :
在( 1)中用反 法求矩
A 的按模最小特征 ,要用到
Doolittle 分解方法,在
Doolittle 分解
完成后得到的两个矩 分
L 和 U, A 的行列式可由
U 求出,即: det(A)=det(U) 。
求得 det(A) 不 0,因此 A 非奇异的 称矩 , :
cond( A) 2
max ,
max 和 s 分 模最大特征 与模最小特征 。
s
2、程序源代码:
#include<>
#include<>
#include<>
#define N 5013e\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=%\n",value.13e_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: Further details please Contact me:
2011-11-15