zoukankan      html  css  js  c++  java
  • matlab练习(消去变换及选主元法求逆算法)

    消去变换的定义
    消去变换实际上是Gauss-Jordan消去变换(G-J消去变换)的一种紧凑写法,它可以由两步完成,一步是G-J消去变换,另一步是替换,具体更多内容可见高慧璇著的《统计计算》,它的一个更贴近于代码实现的定义如下图所示

    可以看到,这个变换很容易实现,只需要就4种不同情况分别定义好相应取值即可,下面是matlab中消去变换的实现

    function B = Tij(A,i,j)
    [m,n] = size(A);
    B = zeros(m,n);
    % case 1
    B(i,j) = 1/A(i,j);
    % case 2
    for k = [1:i-1 i+1:m]
      B(k,j) = -1*A(k,j)/A(i,j);
    end
    % case 3
    for k = [1:j-1 j+1:n]
      B(i,k) = A(i,k)/A(i,j);
    end
    % case 4
    for k = [1:i-1 i+1:m]
      for s = [1:j-1 j+1:n]
        B(k,s) = A(k,s) - A(k,j)*A(i,s)/A(i,j);
      end
    end
    end

    选主元法求逆算法
    按行选主元法求逆算法具体流程如下图所示,它的证明可以通过置换(可以分解为对换的乘积:$(i_1,i_2,cdots,i_n)=(i_1 i_2)(i_2 i_3)cdots(i_{n-1} i_n)$,从右往左的置换)以及消去变换的性质得到

    下面是matlab中的实现

    function B = inv_by_Tij(A)
    [~,n] = size(A);
    B = zeros(n);
    C = 1:n;
    L = zeros(1,n);
    for i = 1:n
      [~,j] = max(A(i,C));
      A = Tij(A,i,C(j));
      L(i) = C(j);
      C(C==C(j)) = [];
    end
    for i = 1:n
      for j = 1:n
        B(L(i),j) = A(i,L(j));
      end
    end
    end

    总结
    消去变换是一种非常有用的方法,其本质仍然是高斯消去变换,不过这种紧凑的“原地求逆”变换一方面节省了存储空间,另一方面也使得它在处理某些问题时会显得非常方便

  • 相关阅读:
    《SpringBoot揭秘 快速构建微服务体系》读后感(二)
    《SpringBoot揭秘 快速构建微服务体系》读后感(一)
    《Java多线程编程核心技术》读后感(十八)
    4.Go-结构体、结构体指针和方法
    3.GO-项目结构、包访问权限、闭包和值传递引用传递
    3.Flask-SQLAlchemy
    3.django Model
    2.深入类和对象
    2.shell编程-函数的高级用法
    mysql命令
  • 原文地址:https://www.cnblogs.com/sanmujun/p/12601309.html
Copyright © 2011-2022 走看看