解線性方程組的直接方法--低階稠密矩陣三角分解法--Courant分解學習matlab實現

在這裏插入圖片描述

解線性方程組的直接方法–低階稠密矩陣三角分解法–Dolittle分解學習matlab實現

function [L,U,Y,X] = LU_separetion2(A, B)
% LU係數矩陣分解
%       AX=B     A=LU     LUX=B
%             -> LY=B   ->YX=B
%                UX=Y
% inputs:
%        A:輸入的係數矩陣,尺寸爲[n,n]
%        B:輸入的乘積矩陣,尺寸爲[n,1]
% outputs:
%        L :下三角陣,尺寸爲[n,n]
%        U :上三角陣,尺寸爲[n,n]
%        y :中間矩陣,尺寸爲[n,1]
%        x :結果矩陣,尺寸爲[n,1]
%測試案例:
% clear;clc
% A=[1 2 1;-2 -1 -5;0 -1 6];
% B=[24;-63;50];
%% 第一步:初始化
% 獲取n值
[row_a, col_a] = size(A);
% 初始化下三角陣的第一列
for r = 1:row_a 
    L(r,1) = A(r,1);
end  
% 初始化上三角陣的第一行
U(1,1) = 1;
for r = 1:col_a 
    U(1,r) = A(1,r)/L(1,1);
    U(r,r)=1;
end 
%% 第二步:求L、U
for k = 1:col_a    %L列
    for i =1:row_a %L行        
        temp_sum1=0;
        for r =1:k-1
            temp_sum1 = temp_sum1 + L(i,r)* U(r,k);
        end
        L(i,k) = A(i,k)-temp_sum1;                
    end
    for j=k+1:col_a       
        temp_sum2=0;
        for r=1:k-1
            temp_sum2 = temp_sum2 +L(k,r)*U(r,j);
        end
        U(k,j)=(A(k,j)-temp_sum2)/L(k,k);
    end
end

%% 第三步:求Y  LY=B
for i=1:row_a
  temp_sum3=0;
   for j=1:i-1
       temp_sum3 =temp_sum3+L(i,j)*Y(j,1);
   end
   Y(i,1) = (B(i,1)-temp_sum3)/L(i,i);
end
%% 第四步:求X   UX=Y
for i=row_a:-1:1
    temp_sum4=0;
    for j=i+1:row_a
        temp_sum4 =temp_sum4 +U(i,j)*X(j,1);
    end
    X(i,1) = Y(i,1)-temp_sum4;
end
end

測試新案例:
>> A=[1 2 1 ;-2 -1 -5;0 -1 6];
>> B=[11,-1,-17];
>> [l,u,y,x]=LU_separetion2(A,B)

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章