北航数值分析第二次大作业

发布 2022-09-25 19:36:28 阅读 8578

题目:使用带双步位移的qr分解法求矩阵的全部特征值,并对其中的每一个实特征值求相应的特征向量。已知: (i,j=1,2,……10)

一、 算法的设计方案:

一)、总体方案设计:

构造矩阵 a,先利用householder矩阵对矩阵a作相似变换,把a化为拟上三角矩阵a(n-1),然后进行带双步位移的qr分解求解矩阵的全部特征值,然后对实特征值利用列主元高斯消元法求解其对应的特征向量。

题目要求输出矩阵a(n-1)qr分解得到的矩阵q、r以及乘积矩阵rq,可用单独的qr分解法进行计算输出。

二)具体算法设计:

1、对矩阵赋值:即为下述程序中的double fuzhi()子程序。

2、对上述生成的矩阵进行拟上三角化:即为下述程序中的void nssjh()子程序,输出矩阵a(n-1)。

3、对拟上三角化后的矩阵进行qr分解:程序中用void qr()子程序来对拟上三角化过后的a阵进行qr分解,并输出q阵、r阵和乘积矩阵rq阵。

4、对拟上三角化后的矩阵进行带双步位移的qr分解。

子程序void doubleqr()实现对拟上三角化后的a阵进行带双步位移的qr分解,得出特征值并输出。

5、求解每一个实特征值相应的特征向量:用子程序void tzxl()对其中的实数特征值进行求解,得出对应的特征向量并输出。

二、源程序:

#include<>

#include

#include<>

#include<>

#include<>

#include头文件*/

*定义全局变量*/

#define epsilon 1e-12 /*定义精度*/

#define n 11取n为11,可实现从1到10的存储,方便计算*/

#define n 10 /*为了方便计算取n*/

#define l 1000 /*规定迭代次数*/

double a[n][n];

double lambda[n][2];

double fuzhi();赋值函数*/

void nssjh();拟上三角化函数*/

void qrqr分解函数*/

void doubleqr();带双步位移的qr分解函数*/

void tzxl();求取实特征根对应特征向量的函数*/

double fuzhi() 赋值函数,存储行列均为1-10*/

int i,j;

for(i=1;i

return a[i][j];

void nssjh() 拟上三角化函数*/,qr[n]=,ur[n],wr[n]=;

fuzhi();

for(r=1;r<=n-2;r++)

dr=sqrt(temp求解dr*/

if(a[r+1][r]>0)

cr=-dr;

else cr=dr求解cr*/

hr=cr*cr-cr*a[r+1][r]; 求解hr

for(i=1;i<=r;i++)

ur[r+1]=a[r+1][r]-cr;

for(i=r+2;i<=n;i++)

ur[i]=a[i][r]; 生成ur[n]*/

for(i=1;i<=n;i++)

/*求解pr[n]*/

for(i=1;i<=n;i++)

/*求解qr[n]*/

for(i=1;i<=n;i++)

for(i=1;i<=n;i++)

for(i=1;i<=n;i++)

printf("%对a进行拟上三角化得到的矩阵a(n-1):");

for(i=1;i<=n;i++)

printf("",a[i][j]);输出拟上三角化后的a(n-1)*/

void qr() qr分解函数*/

int i,j,k,r;

double dr,cr,hr,temp,sum;

double q[n][n]=,wr[n]=,ur[n]=,pr[n]=,a[n][n]=,b[n]=;

for(i=1;i<=n;i++)

生成q[n]*/

nssjh();

for(r=1;rsum=0;

for(i=r+1;i<=n;i++)

sum=sum+a[i][r]*a[i][r];}

if(sum==0)

continue;/*如果a[i][r](i=r+1,……n)全为零,r++,继续循环*/

elsesum=sum+a[r][r]*a[r][r];

dr=sqrt(sum); 求解dr*/

if(a[r][r]>0)

cr=-dr;

else cr=dr; /求解cr*/

hr=cr*cr-cr*a[r][r]; 求解hr*/

for(i=1;iur[i]=0;}

ur[r]=a[r][r]-cr;

for(i=r+1;i<=n;i++)

ur[i]=a[i][r];}生成ur[n]*/

for(i=1;i<=n;i++)

temp=0;

for(j=1;j<=n;j++)

wr[i]=temp; /求解wr[n]*/

for(i=1;i<=n;i++)

求解q[n],即为所求矩阵q*/

for(i=1;i<=n;i++)

pr[i]=temp; /求解pr[n]*/

for(i=1;i<=n;i++)

求解a[n][n],即为所求r矩阵*/

for(i=1;i<=n;i++)

a[i][j]=temp;

求解a[n],即为所求乘积矩阵rq*/

printf("%对a进行qr得到的矩阵q:");输出q、r、rq*/

for(i=1;i<=n;i++)

printf("");

printf("%对a进行qr得到的矩阵r:");

for(i=1;i<=n;i++)

printf("");

printf("%对a进行qr得到的乘积矩阵rq:");

for(i=1;i<=n;i++)

printf("");

void doubleqr() 带双步位移的qr分解函数*/

int i,j,k,m,r,l;

double b,c,d,s,t,m[n][n]=,i[n][n]=;

double cr,dr,hr,tr,temp,sum;

double pr[n]=,qr[n]=,ur[n]=,wr[n]=,vr[n]=;

北航数值分析第二次大作业 QR分解

数值分析a 计算实习题目二。2012年10月。一 算法设计方案。整个程序主要分为四个函数,主函数,拟上三角化函数,qr分解函数以及使用双步位移求解矩阵特征值 特征向量的函数。因为在最后一个函数中也存在qr分解,所以我没有采用参考书上把矩阵m进行的qr分解与矩阵ak的迭代合并的方法,而是在该函数中调用...

北航数值分析大作业第二次

数值分析 计算实习作业。第二题 算法设计方案 1 对矩阵a赋值,取计算精度 1 10 12 2 对矩阵a进行拟上三角化,得到a n 1 并输出a n 1 对矩阵a的拟上三角化,通过直接调用子函数inftrianglize a 来实现 拟上三角化得到的矩阵a n 1 输出至文件中。3 对a n 1 进...

第二次大作业

一 填空题。是指人们关于基本价值的立场 取向 态度 信念 理想系统。是指一种哲学思想或道德标准,用来辨别行为的善与恶,即这会关系中判断行为的一种道德标准。是指风俗习惯及社会传统,它是调节和约束人们行为的一种社会规范。社会工作伦理困境是指由于社会工作者所秉承的 之间的不一致而产生的困顿局面。社会工作专...