欢迎来到天天文库
浏览记录
ID:31008678
大小:109.50 KB
页数:6页
时间:2019-01-05
《两个矩阵同时相似对角化的matlab程序》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、两个矩阵同时相似对角化的MATLAB程序 摘要:使用Matlab语言设计出实现两个复矩阵同时相似对角化的计算机程序。 关键词:同时相似对角化;Matlab;程序 矩阵对角化是重要的数学方法,但因其计算过程繁琐,人们往往望之生畏,尤其是多个矩阵同时对角化问题,因此本文设计出判断及计算两个复矩阵能否同时相似对角化的Matlab程序,用此能够方便地解决两个复矩阵同时相似对角化问题。 1.理论基础 定义[1]:设A、B是数域F上两个n阶矩阵,若存在f上的n阶可逆矩阵t,使得T-1AT与T-1BT同时为对角矩阵,则称A、B可同时相似对角化. 定理[1]:设A、B都是复数域C上的n阶矩
2、阵,若AB=BA且A、B都可对角化,则存在可逆的T,使得T-1AT、T-1BT同时为对角形. 证:因为A可对角化,所以存在可逆的P,使得 其中?d1,…,?d互不相同且n1+...+ns=n.又AB=BA(P-1AP)(P-1BP)=(P-1BP)(P-1AP),所以 是准对角矩阵.其中Bi是ni阶方阵(i=1,2,…,s).但因为B可对角化,所以它的初等因子都是一次的,于是Bi的初等因子都是一次的,所以存在ni阶可逆方阵Qi,使得Qi-1BiQi(i=1,2,…6,s)为对角形,于是令Q=diag[Q1,...,Qs],则必有 是对角形.于是令T=PQ,则T可逆,并且 同时
3、都是对角形. 2.算法设计 定理给出了判定两个矩阵能否同时相似对角化的条件,定理的证明给出了两个矩阵同时相似对角化的方法,据此设计算法如下: Step1.依次判定是否AB=BA、B是否可以相似对角化、A是否可以相似对角化,若均是则转,否则输出A与B不能同时相似对角化(在MATLAB中可使用命令"[P,D]=eig(A)"求出一个矩阵P及对角矩阵D,再计算P的行列式的值即可断定A能否相似对角化)。 Step2.确定A的特征根的个数s及每个特征根的重数ni,并将D改写为D=diag[?d1ni,..., ?dsns](?d1,...,?ds是A的互不相同的特征根,ni是?di的重
4、数),且对P的列按照D中?di的次序进行排列; Step3.计算P-1BP=diag[B1,...,Bs],且求变换矩阵Qi,使Qi-1BiQi(i=1,...,s)为对角形; Step4.令Q=diag[Q1,...,Qs],T=PQ,则T-1AT、T-1BT同为对角形。 算法的关键步骤是计算P-1BP=diag[B1,...,Bs],而其中的P必须由以下形式的D来确定:(D=diag[?d1ni,...,?dsns](?d1,...,?ds是A的互不相同的特征根,ni是?di的重数,n1+...+ns=n),而P的第i列?gi与D的对角线上的第i个元素?di6相对应,即?gi
5、是A属于?di的特征向量。然而MATLAB的相似对角化命令[P,D]=eig(A)所求出的P与D未必满足要求,所以必须将MATLAB所求出的P与D变形为我们所需要的P与D,为此就应该对MATLAB所求出的D的对角线上的元素重新排列、同时对P的列也做相应的排列,具体方法是:扫描的对角线上的元素,每次扫描确定一个特征根的重数,并将该次扫描所得到的相同的特征根集中排列在一起,并对P的列做同步排列,同时对扫描处理过的元素做出特定的标记,通过若干次扫描而求得A的特征根个数s与每个特征根?di的重数ni,并得到所需要的P与D。据此思想设计算法如下: whilek6、o: if已被标记,那么继续; 否则将?di作为一个新的特征根,令:s=s+1(统计特征根个数),k=k+1(已处理过的特征根的个数),ni(s)=ni(s)+1(统计重数),m=i(记忆最近处理过的?di的位置),?di=b(对?di做已处理标记); forj=i+1tonDo: if?dj已被标记,那么继续?dj+1; else如果?dj=?dm,那么令:ni(s)=ni(s)+1(?di增加重数),k=k+1(又处理一个); ifj-m=1(即?dj与?dm相邻),那么D与P都不必重排; else需要交换P的第m+1与第j列,为此构造初等方阵Pij=Pm+1,j,令7、P=P*Pij,同时相应交换D的元素?dj与?dm+1,并标记6?dm+1已被处理,且记m+m+1。 3.程序设计 根据上述算法,设计MATLAB程序如下: fprintf('本程序的功能是判定两个n阶方阵A、B是否能够同时相似对角化,若\n'); fprintf('能,则求出一个变换矩阵T,使得T^(-1)AT与T^(-1)BT同时为对角形。\n'); fprintf('输入矩阵时,矩阵元素请放在"[]"内,并且同行中的元素用空格\
6、o: if已被标记,那么继续; 否则将?di作为一个新的特征根,令:s=s+1(统计特征根个数),k=k+1(已处理过的特征根的个数),ni(s)=ni(s)+1(统计重数),m=i(记忆最近处理过的?di的位置),?di=b(对?di做已处理标记); forj=i+1tonDo: if?dj已被标记,那么继续?dj+1; else如果?dj=?dm,那么令:ni(s)=ni(s)+1(?di增加重数),k=k+1(又处理一个); ifj-m=1(即?dj与?dm相邻),那么D与P都不必重排; else需要交换P的第m+1与第j列,为此构造初等方阵Pij=Pm+1,j,令
7、P=P*Pij,同时相应交换D的元素?dj与?dm+1,并标记6?dm+1已被处理,且记m+m+1。 3.程序设计 根据上述算法,设计MATLAB程序如下: fprintf('本程序的功能是判定两个n阶方阵A、B是否能够同时相似对角化,若\n'); fprintf('能,则求出一个变换矩阵T,使得T^(-1)AT与T^(-1)BT同时为对角形。\n'); fprintf('输入矩阵时,矩阵元素请放在"[]"内,并且同行中的元素用空格\
此文档下载收益归作者所有