一、算法设计方案。
1. 按照题目给出的矩阵定义对矩阵a赋初值:对应的函数为a_init();
2. 对矩阵a进行householder变换,使其拟上三角化:对应的函数为householder();
3. 输出拟上三角化后的a:对应的函数为aout(int);
4. 对拟上三角化后的矩阵a使用带双步位移的qr分解法逐次迭代(最大迭代次数l=500),逐个求出其特征值,对应的函数为eigen_a();中间包含两个子程序:calc_mk()和qr_analyze(),分别用来计算矩阵mk和对mk进行qr分解并得到ak+1;
5. 输出qr分解过程完毕后的a及求得的特征向量:对应的函数为aout()和eigenvalout();
6. 对于在第三步中求得的每个实特征值,使用带原点平移的反幂法求出其对应的特征向量,对应的函数为eigenvec();其中包含一个解方程(a-μi)=yk-1的程序段。这部分也用迭代完成,仍然将最大迭代次数l设置为500;
7. 输出矩阵a的特征向量,结束计算:对应的函数为eigenvecout()。
算法编译环境:vlsual c++6.0
二、源程序如下:
#include <>
#include <>
#define n 10矩阵阶数;
#define epsl 1.0e-12 //迭代的精度水平;
#define l 500迭代最大次数;
#define outputmode 1 //输出格式:0--输出至屏幕,1--输出至文件
double a[n][n], a2[n][n], eigen[n][n声明矩阵a;
double sa_re[n] =sa_im[n] =定义反幂法中使用的初始向量u;
/主程序开始;
int main()
file *p;
void a_init();
void householder();
void equal_zero(double matrix[n][n], int);
void eigenvec();
int eigen_a();
void aout(int);
void eigenvalout(int);
void eigenvecout(int);
if(outputmode)
a_init对矩阵a进行初始化;
householder对矩阵a进行拟上三角化;
equal_zero(a, n对矩阵a的元素进行归零处理,消除误差;
aout(outputmode输出a;
if(eigen_a())printf("迭代超过最大次数,特征值求解结果可能不正确。");求矩阵a的特征值;
equal_zero(a, n对矩阵a的元素进行归零处理,消除误差;
aout(outputmode输出a;
eigenvalout(outputmode); 输出矩阵的特征值;
eigenvec求矩阵a的特征向量;
eigenvecout(outputmode); 输出矩阵a的特征向量;
getchar();
void a_init()
int i,j;
for(i = 1; i <=n; i++)
for(i = 1; i <=n; i++)
a2[i - 1][i - 1] =a[i - 1][i - 1] =cos(i + 1.2 * i) *1.5这里使用if语句反而更慢,所以赋值赋了两次。
void householder() 对矩阵进行拟上三角化;
int r,i,j;
double tmp_ir, tmp_dr, tmp_pr, tmp_qr, tmp_tr, dr, cr, hr, tr;
double ur[n] =pr[n] =qr[n] =wr[n] =
int sgn2(double);
for(r = 0; r < n-2; r++)
int eigen_a() 计算a的特征值;
北航研究生数值分析B作业
设有的矩阵。其中矩阵的特征值满足 试求 1.的值。2.的与数最接近的特征值。3.的 谱范数 条件数和行列式。1.算法的设计方案 本题的核心算法是幂法 带原点平移的幂法 反幂法和lu分解法,要点在于选择算法时,应使的所有零元素都不存储。故算法设计的思路如下,第一步,对使用幂法 powermethod ...
北航研究生数值分析A作业三
数值分析 a 计算实习题目三。一 题目。关于x,y,t,u,v,w的下列方程组。0.5cost u v w x 2.67 t 0.5sinu v w y 1.07 0.5t u cosv w x 3.74 t 0.5u v sinw y 0.79 以及关于z,t,u的下列二维数表。确定了一个二元函数...
研究生数值分析作业题
11级研究生数值分析习题。第一章误差及相关问题。1.设的相对误差为,求的绝对误差。2.要使的相对误差不超过0.1 应取几位有效数字?解 知识点 有效数字和相对误差间的关系。因为的首位数字为4,设近视数有n位有效数字,所以有 令 解得 所以有4位有效数字。3.用x近似即最大为多少时,该近似计算的截断误...