QR方法求矩阵全部特征值Word文件下载.doc

上传人:b****1 文档编号:13065602 上传时间:2022-10-04 格式:DOC 页数:16 大小:423KB
下载 相关 举报
QR方法求矩阵全部特征值Word文件下载.doc_第1页
第1页 / 共16页
QR方法求矩阵全部特征值Word文件下载.doc_第2页
第2页 / 共16页
QR方法求矩阵全部特征值Word文件下载.doc_第3页
第3页 / 共16页
QR方法求矩阵全部特征值Word文件下载.doc_第4页
第4页 / 共16页
QR方法求矩阵全部特征值Word文件下载.doc_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

QR方法求矩阵全部特征值Word文件下载.doc

《QR方法求矩阵全部特征值Word文件下载.doc》由会员分享,可在线阅读,更多相关《QR方法求矩阵全部特征值Word文件下载.doc(16页珍藏版)》请在冰豆网上搜索。

QR方法求矩阵全部特征值Word文件下载.doc

一、QR方法原理及收敛性

设已实现了QR分解,记

其中是正交阵,是上三角阵。

因为,用对作正交相似变换有

可改写为

显然只是的QR分解因子阵的逆序相乘,而且与原矩阵有相同的特征值。

对矩阵再重复以上过程并继续下去,可以得到一个与原矩阵A有相同特征值的矩阵序列。

其过程如下:

对作正交分解

作矩阵,~

作矩阵,~~,~

重复以上过程可得一般的形式为

对作正交分解

构成矩阵序列(k=1,2……)

~A

从矩阵A开始得到一个矩阵序列

这个矩阵序列中每一个矩阵都与原矩阵相似,即都有与A相同的特征值。

这个矩阵序列在实质上收敛于依次以为对角元的上三角阵。

具体可以表示为

其中

的极限不一定存在。

二、用正交相似变换约化矩阵为上Hessenberg阵

用Householder变换可以将一个向量指定的某个分量以下的各分量变为0。

我们只要求消掉A的次对角线以下的元素,即将A约化为上Hessenberg阵。

为了使变换前后矩阵的特征值不变,需要用Householder矩阵对A作相似变换,即用正交阵同时左乘和右乘A时,原来已变为0的元素不再改变。

若设是Householder矩阵,用它对A的第一列元素的变换示意如下:

依次对A的各列进行类似的变换,一共要进行次变换,最终可以得到一个与原矩阵A有相同特征值的上Hessenberg阵。

以上约化A为上Hessenberg阵的过程可以用一系列Householder矩阵来实现。

其中,对于每一个有

经过步约化就可得到一个上Hessenberg阵(A的第列不需要约化)

三、Hessenberg阵的QR算法

设矩阵,其特征值都是实数。

若已用Householder变换约化为上Hessenberg阵

对已得到的上Hessenberg阵可用QR变换,经过迭代过程约化为上三角形矩阵以求出A的特征值。

只要A的特征值是实数,将B约化为上三角形矩阵总是可以做到的。

由于B矩阵结构上的特点,对B矩阵的约化只需将每列次对角线上的元素约化为0.可用平面旋转阵(Givens变换阵)来进行约化。

n阶方阵为平面旋转阵

还是一个非对称的正交阵,有,也是一个平面旋转阵。

有以下几种作用:

1、左乘向量只改变x的第i个和第j个分量。

现构造对x作变换使的结果将x的第j个分量约化为0。

令,有

调整角可使。

若记,按下式选取

于是

有。

2、对非零的n维向量x连续左乘,可将x的第i+1到第n个分量都约化为零;

其中

3、用对矩阵A作变换得到的结论是

左乘A只改变A的第i,j行;

右乘A只改变A的第i,j列;

用对A作正交相似变换改变了A的i行和j行以及i列和j列。

用一系列连续左乘矩阵A,可以将矩阵A化为上三角阵。

数据结构描述

主要数据成员

说明

doubleA[n][n]

存放矩阵A

doubleQ[n][n],

存放QR分解式的正交矩阵Q

doubleR[n][n]

存放QR分解式的上三角阵R

doublep[n][n]

Givens矩阵p

doubleI[n][n]

N阶单位阵

doubleV[n][n]

存放Q矩阵的转置

doubleT[n][n]

初等反射阵T

doubleeps

精度

doublemax

最大值

doubledet

存放行列式的值

intcount

存放迭代次数

主要函数成员

doubleDet(doubleL[n][n])

用高斯列主元方法求行列式

intNon_singularMatrix(doubleL[n][n])

判断是否是非奇异矩阵

voidDisp(doubleH[n][n])

输出矩阵

intIsZero(doublea[],intj)

判断数组是否全为0

intsgn(doubley)

符号函数

voidHessenberg(doubleA[n][n])

将矩阵化为上Hessenberg矩阵

intIsHessenberg(doubleE[n][n])

判断是否是上Hessenberg矩阵

voidQRAlgorithm(doubleA[n][n])

QR算法求特征值

voidSeekEigenvalue(doubleA[n][n])

判断是否满足QR算法条件,满足则进行QR方法求特征值

算法的描述(流程图)

 

源程序

C程序为:

#include<

stdio.h>

math.h>

#definen3

#defineeps1E-5

doubleDet(doubleL[n][n]){//用高斯列主元方法求行列式

doubledet=1,t;

for(intk=0;

k<

n-1;

k++){

doublemax=L[k][k];

intIk=k;

for(intj=k+1;

j<

n;

j++)

if(max<

L[j][k]){

max=L[j][k];

Ik=j;

}

if(max==0)return0;

if(Ik!

=k){

for(intj=k;

j++){

t=L[Ik][j];

L[Ik][j]=L[k][j];

L[k][j]=t;

det*=-1;

}

for(inti=k+1;

i<

i++){

t=L[i][k]/L[k][k];

L[i][k]=t;

for(intj=k+1;

j++)

L[i][j]=L[i][j]-t*L[k][j];

det*=L[k][k];

}

if(L[n-1][n-1]==0)return0;

else{

printf("

矩阵A[][]的行列式为:

%.5f\n"

det*L[n-1][n-1]);

returndet*L[n-1][n-1];

}

intNon_singularMatrix(doubleL[n][n]){//判断是否是非奇异矩阵

printf("

判断矩阵A[][]的行列式是否为0?

\n"

);

if(Det(L)!

=0)return1;

return0;

voidDisp(doubleH[n][n]){//输出矩阵

for(inti=0;

for(intj=0;

printf("

%.6f"

H[i][j]);

intIsZero(doublea[],intj){//判断数组是否全为0

j;

i++)

if(a[i]!

=0)

return0;

return1;

intsgn(doubley){//符号函数

if(y>

0)return1;

elseif(y==0)return0;

elsereturn-1;

voidHessenberg(doubleA[n][n]){//将矩阵化为上Hessenberg矩阵

原矩阵为:

Disp(A);

//输出原矩阵

doubleT[n][n],B[n][n],C[n][n],c[n-1],v[n-1],u[n-1],R[n-1][n-1],I[n-1][n-1],t,w,s;

inti,j,k,m;

for(k=0;

n-2;

for(i=0;

n-k-1;

for(j=0;

if(i==j)I[i][j]=1;

elseI[i][j]=0;

//定义单位阵I[][]

doublemax=fabs(A[k+1][k]);

//求最大值

fabs(A[i+k+1][k]))

max=fabs(A[i+k+1][k]);

c[i]=A[i+k+1][k]/max;

//标准化数组

if(IsZero(c,n-k-1))//判断数组是否全为0

continue;

//数组为0,则这一步不需要约化

for(i=0,t=0.0;

t+=c[i]*c[i];

v[k]=sgn(A[k+1][k])*sqrt(t);

//

u[0]=c[0]+v[k];

for(j=1;

u[j]=c[j];

//求矩阵u[][]

w=v[k]*(c[0]+v[k]);

R[i][j]=I[i][j]-u[i]*u[j]/w;

if(i==j)T[i][j]=1;

elseT[i][j]=0;

//定义矩阵T[][]为单位阵

T[i+k+1][j+k+1]=R[i][j];

//初等反射阵T[][]

i++)//矩阵T[][]左乘矩阵A[][]

for(m=0,s=0.0;

m<

m++)

s+=T[i][m]*A[m][j];

B[i][j]=s;

i++)//矩阵T[][]右乘矩阵A[][]

for

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1