资源简介

对于矩阵A,根据不同的参数number实现不同方法的矩阵分解:高斯消元法的LU分解,基于Gram-Schmidt、Householder、Givens 的QR分解

资源截图

代码片段和文件信息

function [QR]=Reduction(Anumber)
if number==1
 [QR]=LUcomposition(A);
elseif number==2
      [QR] = GramSchmidt(A);
elseif number==3
      [QR] = HouseHolder(A);
elseif number==4
      [QR]=Givens(A);
elseif error(‘not valid number‘);
end
end
function [LU]=LUcomposition(A) %A=[2 2 2;4 7 7;6 18 22]  A=[10 20 30;20 45 80;30 80 171]
B=A;
[mn]=size(A);
if m~=n
    error(‘不是方阵!‘);
end
if rank(A)~=n
   error(‘奇异矩阵无法进行LU分解!‘); %检测参数异常停止程序
end
L=eye(n);
for i=1:n-1
    if abs(A(ii))        disp(‘zero pivot encountered--use PA=LU ‘);
        [LU]=partialLUDecomposition(Bn);
        return;
    end
    for j=i+1:n            
            L(ji)=A(ji)/A(ii);
            A(j:)=A(j:)-(A(ji)/A(ii))*A(i:);
    end
end
U=A;
disp(‘-----LU Reduction----- ‘);
end
function [LU]=partialLUDecomposition(Am)  % A=[1 2 -3 4;4 8 12 -8;2 3 2 1;-3 -1 1 -4]
L=zeros(m);
P=eye(m);
for i=1:m-1
    index=find(abs(A(i:mi))==max(abs(A(i:mi))));
    k=index+i-1;
    if k~=i
     L([i k]:)=L([k i]:);
     A([i k]:)=A([k i]:); 
     P([i k]:)=P([k i]:); 
    end
    for j=i+1:m  
        L(ji)=A(ji)/A(ii);
        A(j:)=A(j:)-(A(ji)/A(ii))*A(i:);
    end
end
U=A;
L=L+eye(m); 
disp(‘--partial LU Reduction---‘); 
end
% 对m*n维的矩阵A具有线性无关列,进行基于Gram-Schmidt的QR分解:A=QR,其中Q为m*n维正交矩阵,R为n*n维上三角矩阵且对角线元素大于0
function [QR] =GramSchmidt(A)  %A=[0 -20 -14;3 27 -4;4 11 -2]
[m n] = size(A);
if rank(A)~=n
   error(‘该矩阵无法进行进行基于Gram-Schmidt的QR分解!‘); %检测参数异常停止程序
end
Q = zeros( m n );
R = zeros( n n );
R(11)= norm( A( : 1) );
Q(: 1) = A( : 1)/R( 1 1 );
 for k = 2: n
     for j = 1: k - 1
         R( j k ) = Q( : j )‘ * A( : k);
     end
     q = zeros( m 1 );    
     for j = 1: k - 1
         q = Q( : j) * R( j k ) + q;
     end   
     R( k k ) = norm( A( : k ) - q );
     Q( : k ) = ( A( : k) - q ) / R( k k );
 end
disp(‘---Gram-Schmidt Reduction---‘); 
end
%%houseHolder进行QR分解 
function [QR]=HouseHolder(A) 
[m n] = size(A); % m- number of rows n- number of columns
if m > n
    num = n;%the number of housholder matrix
else
    num = m - 1;
end
a=A;
for i=1:num
    if i==1 
       u=a(:1)-norm(a(:1))*eye(m1); 
       R=eye(m)-2*(u*u‘)/(u‘*u); 
       Q=R; 
       R=R*A;
       fR=R;
    else
        a=R(i:mi:n); 
        u=a(:1)-norm(a(:1))*eye(m-i+11); 
        R1=eye(m-i+1)-2*(u*u‘)/(u‘*u);
        R=[eye(i-1) zeros(i-1m-i+1);zeros(m-i+1i-1)R1]; 
        Q=Q*R; 
        R=R*fR; 
        fR=R;
    end
end
disp(‘------Householder Reduction------‘); 
end

function [QR]=Givens(A)%A是
[mn]=size(A); %m行数n列数 A=[1 19 -34;-2 -5 20;2 8 37]
R=A;
Q=eye(m);
for i=1:n-1 
    for j=i+1:m 
        x=R(:i);
        G=givensmatrix(xij);
        %Q=Q*G‘;
        Q=G*Q;
        R=G*R;
    end
end
Q=Q‘;
disp(‘----Givens Reduction----‘);
end
function G=givensmatrix(xij)
xi=x(i);          
xj=x(j);
r=sqrt(xi^2+xj^2);
c=x

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3187  2018-12-26 00:16  矩阵分解\Reduction.m
     文件       43759  2018-12-26 00:36  矩阵分解\说明文档.docx

评论

共有 条评论