解線性方程組的直接方法–低階稠密矩陣三角分解法–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)