LU分解、QR分解Householderreduction、Givensreduction1.输入输出参数的含义Factorization_and_Reduction.m中输入输出参数的含义:输入参数:A:待分解的矩阵mode:工作模式的选择mode=0:函数进行LU分解mode=1:函数进行QR分解mode=2:函数进行Householdreductionmode=3:函数进行Givensreduction输出参数:flag_right:分解或约减成功标志,为0时表示失败,为1时表示成功B1,B2,B3,在不同模式下的含义如下mode=0:B1=L:下三角阵;B2=U:上三角阵;B3=P:permutationmatrix;满足PA=LU。mode=1:B1=Q:R(A)的单位正交基为列组成的矩阵;B2=R:上三角阵;B3=0:没有实际意义,默认值为0;满足A=QR。mode=2:B1=P:由反射得到的单位正交阵(unitarymatrixororthogonalmatrix);B2=T:上梯形阵;B3=P_T:P的转置;满足PA=T和A=P_T*T。mode=3:B1=P:由旋转得到的单位正交阵(unitarymatrixororthogonalmatrix);B2=T:上梯形阵;B3=P_T:P的转置;满足PA=T和A=P_T*T。2.实验步骤和原理1)LU分解(1)输入待分解的矩阵:111212122212......nnmmmnaaaaaaAaaa(2)判断输入矩阵A是否为方阵,如果不是,不进行LU分解。(3)根据矩阵A的大小,初始化矩阵L,U,P和标签label(用于记录行交换后行的位置,将其初始化为nlabel...21)。(4)j从1到n循环执行以下步骤(j表示第j个主元):①在第j列),(jj以下位置中寻找第一个非零元素作为第j个主元,即从)(nijaij中寻找第一个非零元素作为主元。②如果找到的非零主元不在第j行,而是在第i行,分别交换A和L中第i行和第j行,交换label中第i个和第j个元素。③将A的第j行赋给U的第j行,并将L中),(jj位置元素赋1。④将A中主元以下的元素变为0,并将消元时主元行需要乘的系数赋给L的相应位置元素,如:将主元jja以下的ija变为0时,L中),(ji位置的元素jjijijaal。(5)对矩阵P进行赋值,即将P的第i行的第label(i)个元素赋为1,其他元素为0。(6)判断矩阵A是否为奇异阵:查看矩阵U的主元位置是否存在0元素,如果存在则U为奇异阵且A也为奇异阵,此时A不能进行LU分解。(7)对分解结果进行验证,计算LUPA是否成立,若成立,则分解正确。2)QR分解(1)输入待分解的矩阵:111212122212......nnmmmnaaaaaaAaaa(2)k从1到n循环执行以下步骤:①如果k=1,1*Au(1*A表示矩阵A的第一列);否则,11****11****|kiikTikkiikikQAQAQAQAu(kA*表示矩阵A的第k列,iQ*表示矩阵Q的第i列,)。②矩阵Q的第k列:uuQk*③给矩阵R的第k行赋值:),,1,(|**nkkjAQRjkkj(3)循环结束即可得到Q矩阵和R矩阵。下面验证以上QR分解的结果是否正确:①验证Q矩阵的各列是否相互正交且各列的模为1,即验证IQQT是否成立。②验证QRA是否成立。若以上两个条件均满足,则QR分解正确。3)Householderreduction(1)输入待处理的矩阵:111212122212......nnmmmnaaaaaaAaaa(2)初始化矩阵P为单位矩阵I。(3)k从1到n循环执行以下步骤:①令矩阵Ak是P*A的第k行k列下方右方构成的矩阵,如k=2,Ak矩阵如下图红框所示:111212122212......nnmmmnaaaaaaaaa’’’’’’’’’②令11*1*eAkAku③uuuuIRTT2ˆ④构造m*m的矩阵RIRˆ00⑤更新P:RPP⑥用P*A的第k+1行和k+1列下方右方的元素构成的矩阵更新Ak(4)以上循环结束以后,即可得到矩阵P,矩阵T=P*A。(5)下面验证以上Householderreduction的结果是否正确:①验证P是否是单位正交矩阵(unitarymatrixororthogonalmatrix),即验证IPPPPTT是否成立。②验证TPAT是否成立。若以上两个条件均满足,则Householderreduction分解正确。4)GivensreductionAk(1)输入待处理的矩阵:111212122212......nnmmmnaaaaaaAaaa(2)初始化矩阵P为单位矩阵I。(3)k从1到n循环执行以下步骤:利用旋转矩阵,使得原矩阵k列中k行元素以下的元素为0则j从k+1到m循环执行以下步骤:①令矩阵Ak等于P*A②22jkkkkkAkAkAkc,22jkkkjkAkAkAks③令IPˆ,然后用c去替代Pˆ中第k行k列的元素,用s去替代Pˆ中第k行j列的元素,用-s去替代Pˆ中第j行k列的元素,用c去替代Pˆ中第j行j列的元素。④更新P:PPPˆ⑤更新Ak:PAkA(4)以上循环结束以后,即可得到矩阵P,矩阵T=P*A。(5)下面验证以上Givensreduction的结果是否正确:①验证P是否是单位正交阵(unitarymatrixororthogonalmatrix),即验证IPPPPTT是否成立。②验证TPAT是否成立。若以上两个条件均满足,则Givensreduction分解正确。3.实验结果截图1)当输入矩阵A为方阵例:2114427314200A(1)LU分解显示结果中变量含义:L:下三角阵;U:上三角阵;P:permutationmatrix。(2)QR分解显示结果中变量含义:Q:R(A)的单位正交基为列组成的矩阵;R:上三角阵。(3)Householderreduction显示结果中变量含义:P_H:由反射得到的单位正交阵(unitarymatrixororthogonalmatrix);T_H:上梯形阵;P_T_H:P_H的转置。(后缀_H用于与Givens的结果区分)(4)Givensreduction显示结果中变量含义:P_G:由旋转得到的单位正交阵(unitarymatrixororthogonalmatrix);T_G:上梯形阵;P_T_G:P_G的转置。(后缀_G用于与Householder的结果区分)2)当输入矩阵A不是方阵例:157101423142434A(1)LU分解(2)QR分解显示结果中变量含义:Q:R(A)的单位正交基为列组成的矩阵;R:上三角阵。(3)Householderreduction显示结果中变量含义:P_H:由反射得到的单位正交阵(unitarymatrixororthogonalmatrix);T_H:上梯形阵;P_T_H:P_H的转置。(后缀_H用于与Givens的结果区分)(4)Givensreduction显示结果中变量含义:P_G:由旋转得到的单位正交阵(unitarymatrixororthogonalmatrix);T_G:上梯形阵;P_T_G:P_G的转置。(后缀_G用于与Householder的结果区分)4.程序代码1)RUN_FR.mclc;clearall;%赵晓梅2014280146280662014.11.19%提供几个待分解的矩阵%A=[4,-3,4;2,-14,-3;-2,14,0;1,-7,15];%待分解矩阵1——非方阵A=[0,-20,-14;3,27,-4;4,11,-2];%待分解矩阵2——方阵fprintf('待处理的矩阵为\n');A%在CommandWindow中显示待处理矩阵fprintf('**********************************************\n');[L,U,P,flag_right_0]=Factorization_and_Reduction(A,0);%LU分解ifflag_right_0==1%如果分解正确,显示结果fprintf('显示LU分解结果:\n');L%下三角阵;U%上三角阵;P%permutationmatrix;endfprintf('**********************************************\n');[Q,R,B3,flag_right_1]=Factorization_and_Reduction(A,1);%QR分解ifflag_right_1==1%如果分解正确,显示结果fprintf('显示QR分解结果:\n');Q%R(A)的单位正交基为列组成的矩阵;R%上三角阵;endfprintf('**********************************************\n');[P_H,T_H,P_T_H,flag_right_2]=Factorization_and_Reduction(A,2);%Householderreductionifflag_right_2==1%如果Householderreduction正确,显示结果fprintf('显示Householderreduction结果(后缀_H用于与Givens区分):\n');P_H%由反射得到的单位正交阵;T_H%上梯形阵;P_T_H%P_H的转置;endfprintf('**********************************************\n');[P_G,T_G,P_T_G,flag_right_3]=Factorization_and_Reduction(A,3);%Givensreductionifflag_right_3==1%如果Givensreduction正确,显示结果fprintf('显示Givensreduction结果(后缀_G用于与Householder区分):\n');P_G%由反射得到的单位正交阵;T_G%上梯形阵;P_T_G%P_G的转置;end2)Factorization_and_Reduction.m%------------------------------------%函数名称:Factorization_and_Reduction%函数功能:对矩阵进行LU分解,QR分解,Householdreduction,Givensreduction%输入参数:A:待分解的矩阵%mode:工作模式的选择%mode=0:函数进行LU分解%mode=1:函数进行QR分解%mode=2:函数进行Householderreduction%mode=3:函数进行Givensreduction%输出参数:flag_right:分解或约减成功标志,为0时表示失败,为1时表示成功%B1,B2,B3,在不同模式下的含义如下%mode=0:B1=L:下三角阵;%B2=U:上三角阵;%B3=P:permutationmatrix;%满足PA=LU。%mode=1:B1=Q:R(A)的单位正交基为列组成的矩阵;%B2=R:上三角阵;%B3=0:没有实际意义,默认值为0;%满足A=QR。%mode=2:B1=P:由反射得到的单位正交阵(unitarymatrixororthogonalmatrix);%B2=T:上梯形阵;%B3=P_T:P的转置;%满足PA=T和A=P_T*T。%mode=3:B1=P:由旋转得到的单位正交阵(unitarymatrixororthogonalmatrix);%B2=T:上梯形阵;%B3=P_T: