欢迎来到天天文库
浏览记录
ID:60836593
大小:693.50 KB
页数:23页
时间:2020-12-21
《数值分析实习第二题.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数值分析实习第二题一、算法设计方案1.采用C语言进行算法设计输出。2.由于矩阵A的为10×10的矩阵,所以采用双步位移的QR分解法求矩阵A的全部特征值。3.先对矩阵A进行初始化赋值。4.先采用Householder矩阵将矩阵A拟上三角化,得到矩阵A(n-1)。5.为了完成题目要求,减少运算次数,此时运行独立函数QR_UP_HE()另外声明3个10×10局部的二维数组变量Q,R,RQ对A(n-1)进行一次QR分解,得到相对应的矩阵Q,R和乘积矩阵RQ,用于输出。6.之后开始用双步位移法求解矩阵A的特征值。在求解过
2、程中,遇到解一元二次方程组,采用数组S_Re[2]来存根的实数部分,用数组S_Im[2]来存根的虚数部分,用公式r=s2±s24-t来求解方程x2-sx+t=0。QR分解时候选用精度ε=10-12,不限制最大迭代次数。7.将双步位移的判断逻辑进行合理设定如下:1)变量m从9(采用10维数组)开始循环运算,当m小于零的时候即认为QR分解完成,结束循环。2)先判断m是否为零,若为零,那么A[0][0]即为最后一个特征值,结束循环。否则继续。3)之后判断A[m][m-1]的绝对值是否小于精度要求,若小于,则认为A[m
3、][m]即为其中一个特征值,运算维数降为m–1,跳过这次循环。否则继续。1)此时求二阶子阵Dk=A[m-1][m-1]A[m-1][m]A[m][m-1]A[m][m]的两个特征值s1和s2。2)此时如果m=1,那么这就是A剩下的最后两个特征值,结束循环。否则继续。3)如果A[m-1][m-2]的绝对值小于精度要求,那么即可判断s1和s2是A的其中两个特征值,运算维数降为m–2,跳过这次循环。否则继续。4)上述判断完之后,即可开始用双步位移的QR分解法循环求A得全部特征值了。1.全部特征值求得后,将其打印出来,
4、之后开始求A的相应于实特征值的特征向量。特征向量采用解方程组(λI-A)X=0的方法进行,先用Gauss列主元的方法,将A上三角化。由于b为0,所以不用记录A对角化过程中的行交换的次序。2.在反解X的过程中,需先判断A的行是否全为0(即小于一个精度值,程序中精度值定为ε=10-9,取太小会导致程序判断出错,从而得出错误的特征值)。若最后一行不为零,则对特征向量X的最后一个值赋1,即X=[0,0,0,…,0,1],若倒数第二行也不为零,则对特征向量X的倒数第二行的值也赋1,以此类推。3.之后回代X,得到其中的一个
5、特征向量X。然后将其归一化,即可输出。一、运算结果1.矩阵经过拟上三角化后得到的矩阵1.进行QR分解后所得到的矩阵Q、R和乘积矩阵RQ1.矩阵的全部特征值1.相应于特征值的特征向量一、源程序#include#include#include#defineEPS1.0e-12#defineN10doubleA[N][N];doubleLambda_Re[N];doubleLambda_Im[N];voidINI_A(void)//矩阵A进行赋值{chari,j;
6、for(i=0;i7、charRow,charStr,charEnd,doubleMat[][N])//求矩阵A中列向量的模{charn;doublenorm;for(n=Str,norm=0;n8、ector_2[n]*Vector_2[n]);}return(sqrt(norm_2));}charSP_SGN(doubles)//取符号{if(s>0){return(1);}else{return(-1);}}doubleVECT_T_VEC(charMax_N,doubleVector_T[],doubleVector[])//向量转置乘向量{charn;doublepowe
7、charRow,charStr,charEnd,doubleMat[][N])//求矩阵A中列向量的模{charn;doublenorm;for(n=Str,norm=0;n8、ector_2[n]*Vector_2[n]);}return(sqrt(norm_2));}charSP_SGN(doubles)//取符号{if(s>0){return(1);}else{return(-1);}}doubleVECT_T_VEC(charMax_N,doubleVector_T[],doubleVector[])//向量转置乘向量{charn;doublepowe
8、ector_2[n]*Vector_2[n]);}return(sqrt(norm_2));}charSP_SGN(doubles)//取符号{if(s>0){return(1);}else{return(-1);}}doubleVECT_T_VEC(charMax_N,doubleVector_T[],doubleVector[])//向量转置乘向量{charn;doublepowe
此文档下载收益归作者所有