当前位置:文档之家› 北航数值分析大作业第一题幂法与反幂法.doc

北航数值分析大作业第一题幂法与反幂法.doc

《数值分析》计算实习题目
第一题:
1.算法设计方案
(1) 1 , 501 和 s 的值。

1) 首先通过幂法求出按模最大的特征值λ t1 ,然后根据λ t1 进行原点平移求出另一特征
值λ t2 ,比较两值大小,数值小的为所求最小特征值λ 1 ,数值大的为是所求最大特征值λ501。

2) 使用反幂法求λs,其中需要解线性方程组。

因为 A 为带状线性方程组,此处采用 LU 分解法解带状方程组。

( 2)与k = 1+k 501 1 最接近的特征值ik。

40
通过带有原点平移的反幂法求出与数k 最接近的特征值ik。

(3)cond(A)2和detA。

1)cond(A)2= 1 ,其中1和n分别是按模最大和最小特征值。

n
2)利用步骤( 1)中分解矩阵 A 得出的 LU 矩阵, L 为单位下三角阵 ,U 为上三角阵,其
中 U 矩阵的主对角线元素之积即为det A 。

由于 A 的元素零元素较多,为节省储存量,将 A 的元素存为 6×501 的数组中,程序中
采用 get_an_element() 函数来从小数组中取出 A 中的元素。

2. 全部源程序
#include <>
#include <>
void init_a();算结果
结果如下图所示:
部分中间结果:给出了偏移量(offset),误差(err),迭代次数(k)
4.讨论迭代初始向量的选取对计算结果的影响, 并说明原因
使用u[i]=1(i=1,2,...,501)作为初始向量进行迭代,可得出以上结果。

经过Mathematica 计算验证结果正确。

现修改初始向量u[1]=1 ,u[i]=0,(i=2,3,...,501)。

得出结果
此结果与正确结果相差较多。

令初始向量u[m]=1 , u[n]=0 , (m=1,2,...,250 n=251,252,....,501),得出结果:
此结果也与正确结果相差较多。

但与上次结果相比,更加靠近准确值一些。

再增加初始向量 u[] 中等于 1 的元素个数,可以发现其结果更加靠近准确值。

经验证, 只有当不为 0 元素的个数达到比较高的一个值时,
才能得到精确的收敛结果, 与元素的绝对 值大小无关。

分 析 算 法 , 设 1 为 按 模 最 大 特 征 值 , 观 察 式 子 u 01x 1 2 x 2
... n x n 和
k u k
k
2 x 2 L 11x 1 2 1 k n n x n ,如果选取的 u 0 使得 1 0 ,由于计算的 1
精度较高, 可能无法求出按模最大的特征值, 而求出次大的特征值。

实际上, 当初始向量 u 0
中的 0 元素较多时, 可能 i 0 的情况较为普遍, 许多 都有可能等于 0,此时计算出的结
果便与最大特征值差距较大。

特征向量 x 1, x 2 ,L , x n 是已确定的,因此迭代初始向量的不合理选取完全有可能产生这样的 i 。

相关主题