紧凑格式的LU分解Matlab实现

列主元的LU分解Matlab实现

  • 使用说明
    • Matlab代码

使用说明

原创代码。
代码仅供参考,欢迎讨论。
代码不规范,注释不全,欢迎指出。
(懒)。

Matlab代码

// An highlighted block
function [L,U]=liezhuyuanLU(A)
[m,n] = size(A);
L = zeros(m,n);% 下三角
U = zeros(m,n);% 上三角
sum = 0;
sum2 = 0;

% [zuida,hanghao] = max(abs(A(:,1)));
% B = A(hanghao,:);%交换最大列主元行
% A(hanghao,:) = A(1,:);%交换最大列主元行
% A(1,:) = B;%交换最大列主元行

for i = 1:m
    for k = i:m
        for k1 = 1:i - 1
            sum = L(i,k1)*U(k1,k) + sum;%求和
            sum2 = L(k,k1)*U(k1,i) + sum2;
        end
        U(i,k) = A(i,k) - sum;%% 列主元的下三角分解

        L(k,i) = A(k,i) - sum2;%先存着
        sum = 0;
        sum2 = 0;
    end
     [zuida,hanghao2] = max(abs(L(:,i)));
     if(zuida > U(i,i))
     B = A(hanghao2,:);%交换最大列主元行
     A(hanghao2,:) = A(i,:);%交换最大列主元行
     A(i,:) = B;%交换最大列主元行
     C = L(hanghao2,:);
     L(hanghao2,:) = L(i,:);
     L(i,:) = C;
     %交换完列主元再分解一次
     for k = i:m
        for k1 = 1:i - 1
            sum = L(i,k1)*U(k1,k) + sum;%求和
%              sum2 = L(k,k1)*U(k1,i) + sum2;
        end
        U(i,k) = A(i,k) - sum;
%          L(k,i) = A(k,i) - sum2;%先存着
        sum = 0;
%          sum2 = 0;
    end
     L(:,i) = L(:,i)./U(i,i);%分解完比上
     end
end
      L;
      U;
end
...

你可能感兴趣的:(紧凑格式的LU分解Matlab实现)