目标:使用带双步位移的QR 分解法求矩阵10*10[]ijAa的全部特征值,并对其中的每一个实特征值求相应的特征向量
已知:sin(0
2 )()1
5cos(1
2 )(){ij ijijij ija (i,j=1,2,……,10) 算法: 以上是程序运作的逻辑,其中具体的函数的算法,大部分都是数值分析课本上的逻辑,在这里特别写出矩阵A 的实特征值对应的一个特征向量的求法: 111111I00000innnB AIgauseinQAI uBuu 选主元的消元检查知无重特征值由于=0iAI,因此在经过选主元的高斯消元以后,iAI即B 的最后一行必然为零,左上方变为n-1 阶单位矩阵 11Inn ,右上方变为n-1 阶向量 11nQ ,然后令nu1 ,则1,2,,1jjuQjn
开始 输入矩阵A 用函数“nishangsanjiadiv”将矩阵A 拟上三角化即为A用函数“characteristic”求解矩阵A(n-1)即A的所有特征值 用函数“qrdiv”将A(n-1)QR 分解 用函数“characteristicvector”求解矩阵A(n-1)即A 的所有实输出A 的所有特征值λ、A 的所有实特征值对应的特征向量、拟上三角矩阵A(n-1)、及其Q、R 和 R*Q 这样即求出所有A 所有实特征值对应的一个特征向量
#include #include #include #define N 10 #define E 1
0e-12 #define MAX 10000 //以下是符号函数 double sgn(double a) { double z; if(a>E) z=1;