⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 invmat.m

📁 利用矩阵的奇异值分解压缩图像
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%                     用四种方法求矩阵的逆                           %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function InvMat(A)
if(0 == det(A))
    error('可逆矩阵的特征值必须非零!')
end
[m,n] = size(A);
if(m ~= n)
    error('可逆矩阵必须为方阵!')
end

%%%  第一种方法:伴随矩阵法
tic
inv_A = zeros(size(A));
detA = det(A);
for i = 1:n
    for j = 1:n
        temp_Matrix = A;
        temp_Matrix(i,:) = []; 
        temp_Matrix(:,j) = [];
        inv_A(j,i) = (-1)^(i+j)*det(temp_Matrix)/detA;
    end
end
inv_A1 = inv_A;
time1 = toc;

%%% 第二种方法:初等变换法
tic
B = [A,eye(n)];
B(1,:) = sum(B);
B(1,:) = B(1,:)/B(1,1);
for i = 1:n-1       %第i列
    for j = i+1:n   %第j行
        B(j,:) = B(j,:) - B(j,i)*B(i,:);    
    end
    B(i+1,:) = B(i+1,:)/B(i+1,i+1);
end
B(n,:) = B(n,:)/B(n,n);                 %至此已将矩阵的前半部分上三角化,且对角线上元素都为1
                                        %下面将已得到的前半部分单位化为 I(n)
for i = n-1:-1:1
    for j = i+1:n
        B(i,:) = B(i,:) - B(i,j)*B(j,:);
    end
end
inv_A2 = B(:,n+1:2*n);
time2 = toc;


%%% 第三种方法:奇异值分解法
tic
[U,S,V] = svd(A);
for i = 1:n
    if S(i,i) ~= 0
        S(i,i) = 1/S(i,i);
    end
end
inv_A3 = V*S*U';
time3 = toc;


%%% 第四种方法:Greville方法
tic
inv_A4 = A(:,1)'/(norm(A(:,1)))^2;
for k = 2:n
    dk = inv_A4*A(:,k);
    ck = A(:,k) - A(:,1:k-1)*dk;
    if(norm(ck) == 0)         %c(k)=0
        bk = (dk'*inv_A4)'/(1+dk'*dk);
    else
        bk = (ck'/norm(ck)^2)';
    end
    inv_A4 = [(inv_A4 - dk*bk')',bk]'; 
end
time4 = toc;

disp('通过第一种方法--伴随矩阵法得到的逆矩阵为:')
inv_A1;
sprintf('The First Method Elapsed time is    %fs',time1)

disp('通过第二种方法--初等变换法得到的逆矩阵为:')
inv_A2;
sprintf('The Second Method Elapsed time is    %fs',time2)

disp('通过第三种方法--奇异值分解法得到的逆矩阵为:')
inv_A3;
sprintf('The Third Method Elapsed time is    %f s',time3)

disp('通过第四种方法--Greville法得到的逆矩阵为:')
inv_A4;
sprintf('The Forth Method Elapsed time is    %f s',time4)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -