【问题标题】:LU Decomposition Crout ReductionLU 分解压榨法
【发布时间】:2015-04-04 19:44:00
【问题描述】:

这是我的 LU 分解 Crout 方法的代码:

function [L, U] = croutreduction(A)
    [row,column]=size(A);
    L=eye(row,column);

    //A = 3x3
    if row==3 then
        U(1,1)=A(1,1); U(1,2)=A(1,2); U(1,3)=A(1,3);
        L(2,1)=A(2,1)/U(1,1); L(3,1)=A(3,1)/U(1,1);

        U(2,2)=A(2,2)-L(2,1)*U(1,2);
        U(2,3)=A(2,3)-L(2,1)*U(1,3);
        L(3,2)=A(3,2)/U(2,2);

        U(3,3)=A(3,3)-L(3,2)*U(2,3);    
    end

    //A = 4x4
    if column==4 then
        U(1,1)=A(1,1); U(1,2)=A(1,2); U(1,3)=A(1,3); U(1,4)=A(1,4);
        L(2,1)=A(2,1)/U(1,1); L(3,1)=A(3,1)/U(1,1); L(4,1)=A(4,1)/U(1,1);

        U(2,2)=A(2,2)-L(2,1)*U(1,2);
        U(2,3)=A(2,3)-L(2,1)*U(1,3);
        U(2,4)=A(2,4)-L(2,1)*U(1,4);
        L(3,2)=(A(3,2)-L(3,1)*U(1,2))/U(2,2);
        L(4,2)=(A(4,2)-L(4,1)*U(1,2))/U(2,2);

        U(3,3)=A(3,3)-(L(3,1)*U(1,3)+L(3,2)*U(2,3));  
        U(3,4)=A(3,4)-(L(3,1)*U(1,4)+L(3,2)*U(2,4));  
        L(4,3)=(A(4,3)-(L(4,1)*U(1,3)+L(4,2)*U(2,3)))/U(3,3);

        U(4,4)=A(4,4)-(L(4,1)*U(1,4)+L(4,2)*U(2,4)+L(4,3)*U(3,4));
    end   
endfunction

如何修改我的代码以处理具有不同维度的矩阵?如您所见,上面的代码仅适用于 3x3 和 4x4 矩阵。

【问题讨论】:

  • Crout 减少代码可通过 Google 获得,关于第一个问题,请先尝试这样做,在您遇到任何问题和问题后,我们将很乐意为您提供帮助
  • 你能检查我的新代码吗?
  • 如果您有 N 维矩阵,我建议您将其重塑为方形 2D 矩阵并执行反转然后重新整形。

标签: matlab scilab reduction


【解决方案1】:

您应该使用 for 循环而不是硬编码索引。基于这个例子:http://en.wikipedia.org/wiki/Crout_matrix_decomposition我修改了Scilab的代码(原代码是C和Matlab/Octave):

function [L,U]=LUdecompCrout(A)
  [r,c]=size(A);
  for i=1:r
    L(i,1)=A(i,1);
    U(i,i)=1;
  end
  for j=2:r
    U(1,j)=A(1,j)/L(1,1);
  end
  for i=2:r
    for j=2:i
      L(i,j)=A(i,j)-L(i,1:j-1)*U(1:j -1,j);
    end

    for j=i+1:r
      U(i,j)=(A(i,j)-L(i,1:i-1)*U(1:i-1,j))/L(i,i);
    end
  end
endfunction

但是这给出的结果与您的代码不同,我没有检查哪一个是错误的以及在哪里......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2020-03-25
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多