为什么我的高斯消除算法无法正确地局部枢轴旋转?

时间:2019-10-11 21:31:43

标签: matlab for-loop if-statement matrix linear-algebra

我正在通过MatLab练习的一些练习练习,其中一个问题要求我包括部分转到之前的问题,该问题要求编写高斯消除算法(已完成)。

部分枢轴实施对我来说很沮丧。我尝试将部分枢轴代码放入循环中,但最终仍会输出错误的答案。这是我到目前为止的内容:

r = RandStream('mt19937ar','Seed',1234);
A = r.randn(6,7);
n = 6;
out = [];
for ii = 1:n-1 
    % Partial pivoting
    for k = ii:n-1
      [~,f] = max(abs(A(k:end,k)));
      f = n-(n-k+1)+f;    
      A([k f],:) = A([f k],:);
    end

    % Regular Gaussian elimination
    for j = ii+1:n
      if A(ii,ii) == 0
         print('Method failed: matrix is rank deficient');
      else
         A(j,:) = A(j,:) - (A(j,ii)/A(ii,ii))*A(ii,:);
      end
    end

    out = vertcat(t4_out,A);
end

输入是一个n x m(m> = n)的矩阵A,输出应该是n x m的上三角马蒂克斯。在每次迭代的最后,我都有一个矩阵A(i),第i列的对角线下方为零,我需要构造矩阵[A(1),A(2),...,A(n -1)](因此使用vertcat),输出应为30x7矩阵。我尽力实现部分枢轴,但并非所有迭代最终都是上三角矩阵。我的部分透视代码并没有真正出问题。如果没有部分透视,我的常规高斯消除算法仍然有效,并且得到了上三角矩阵。有人可以帮我弄清楚为什么我的部分旋转代码不能将我带到上三角矩阵吗?任何帮助将不胜感激。

0 个答案:

没有答案