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

📄 几种常用求逆的matlab程序.txt

📁 几种常用求逆的Matlab程序,在一个博客中找到
💻 TXT
字号:
% Examples:   a = [2 0 0;1 1 2;1 -1 3];
%             Inv_matrix(A)

function [X,time] = Inv_matrix(A)

%%%%%%%%%%%%%%%%% 奇异值分解法求矩阵的逆 %%%%%%%%%%%%%%%%
tic;
[u,d,v] = svd(A);    % 求A的奇异值分解
% 将矩阵d对角线上的非零元素变为其倒数
r = diag(d);
n = length(r);
i = 1;
while( i<=n && r(i) ~= 0 )
    r(i) = 1/r(i);
    i=i+1;
end
d = diag(r);
X1 = v*d*u';
time1 = toc;
disp('奇异值分解法求逆结果与耗时:');
disp('    逆矩阵为:')
disp(X1);
disp('    耗时:');
disp(time1);

%%%%%%%%%%%%%%%%%% Greville方法求矩阵的逆 %%%%%%%%%%%%%%%%%
tic;
X2=A(:,1)'/( A(:,1)'*A(:,1) );
for i=2:n
    di=X2*A(:,i);
    ci=A(:,i)-A(:,1:(i-1))*di;
    if ci'*ci==0
        bi=(di'*X2/(1+di'*di))';
    else
        bi=(ci'/(ci'*ci))';
    end
    X2=[X2-di*bi';bi'];
end
time2 = toc;
disp('Greville方法求逆结果与耗时:');
disp('    逆矩阵为:')
disp(X2);
disp('    耗时:');
disp(time2);

if det(A)==0 
    error('矩阵行列式为0,不能用伴随矩阵法和高斯消去法求矩阵的逆!');
end

%%%%%%%%%%%%%%%%%% 伴随矩阵法求矩阵的逆 %%%%%%%%%%%%%%%%%
tic;
bs_A = zeros(n);  % 初始化A的伴随矩阵
% 求A的伴随矩阵
for i = 1:n
    for j = 1:n
        bs_A(i,j) = (-1)^(i+j)*det(A([1:j-1 j+1:n],[1:i-1 i+1:n]));
    end
end
X3 = bs_A/(det(A));
time3 = toc;
disp('伴随矩阵法求逆结果与耗时:');
disp('    逆矩阵为:')
disp(X3);
disp('    耗时:');
disp(time3);

%%%%%%%%%%%%%%%%%% 高斯消去法求矩阵的逆 %%%%%%%%%%%%%%%%%
tic;
B = [A eye(n)];

% 将A对角线以下的元素都化为0,对角线元素都化为1
for i=1:n
    % 判断该行对角元素是否为零,为零就进行换行
    j=i+1;
    while(abs(B(i,i)) < 0.000001 && j<=n)
        t=B(i,:);
        B(i,:)=B(j,:);
        B(j,:)=t;
        j=j+1;
    end
    B(i,:)=B(i,:)/B(i,i);
    for k=i+1:n
        B(k,:)=B(k,:)-B(i,:)*B(k,i)/B(i,i);
    end
end

% 将A对角线以上的元素都化为0
for i=n:-1:1
    for k=i-1:-1:1
        B(k,:)=B(k,:)-B(k,i)*B(i,:);
    end
end
X4 = B(:,[n+1:n+n]);
time4 = toc;
disp('高斯消去法求逆结果与耗时:');
disp('    逆矩阵为:')
disp(X4);
disp('    耗时:');
disp(time4);
if nargout==1
    X=[X1,X2,X3,X4];
end
if nargout==2
    X=[X1,X2,X3,X4];
    time = [time1,time2,time3,time4];
end

 
  

⌨️ 快捷键说明

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