1.代码
%%LU分解法
function LUDM = LU_Decomposition_method(A,b)
global n;global B;global U;global L;global M;
[n,n] = size(A);
B = [A,b];
R_A = rank(A);R_B = rank(B);
if R_A ~= R_B
disp('方程无解');
elseif (R_A == R_B) && (R_A == n)
disp('此方程有唯一解');
M = LU_decomposition(A);
L = M(:,:,1);U = M(:,:,2);
matrix1 = [L b];
Y = Lower_trig_iterative_solution(matrix1);
matrix2 = [U Y];
X = Upper_trig_iterative_solution(matrix2);
disp('LU分解中L=');
L
disp('LU分解中U=');
U
else
disp('方程有无穷多组解');
end
disp('解向量为:');
LUDM = X;
%%矩阵的LU分解
function LUD = LU_decomposition(A)
[n,n] = size(A);
M = Elementary_transformation_of_the_lower_triangle(A);
L = M(:,:,n);U=A;
for i = 1:1:n-1
U = M(:,:,i)*U;
end
LUD(:,:,1) = L;
LUD(:,:,2) = U;
end
%%下三角初等变换
function ETLT = Elementary_transformation_of_the_lower_triangle(A)
[n,n] = size(A);
L = zeros(n,1,n);
for i = 1:1:n
for j = 1:1:n
for k = 1:1:n
if j == k
L(j,k,i) = 1;
end
end
end
end
for i = 1:1:n-1
for j = 1:1:n
for k = 1:1:n
if j > k
if i == k
L(j,k,i) = -A(j,k)/A(k,k);
end
L(i+1:n,i,n) = -L(i+1:n,i,i);
end
end
end
A = L(:,:,i)*A;
end
ETLT = L;
end
%%下三角迭代法
function LTIS = Lower_trig_iterative_solution(M)
[m,n] = size(M);
B =M(:,1:n-1);ba = M(:,n);
y = zeros(1,m);
y(1) = ba(1);
for i = 2:1:m
sum = 0;
for j = 1:1:i-1
sum = sum+B(i,j)*y(j);
end
y(i) = ba(i)-sum;
end
LTIS = y';
end
%%上三角迭代法
function UTIS = Upper_trig_iterative_solution(M)
[m,n] = size(M);
B = M(:,1:n-1);ba = M(:,n);
x = zeros(1,m);
x(m) =ba(m)/B(m,m);
for i = m-1:-1:1
sum = 0;
for j = i+1:1:m
sum = sum+B(i,j)*x(j);
end
x(i) = (ba(i)-sum)/B(i,i);
end
UTIS = x';
end
end
2.例子
clear all clc M = rand(9) b = reshape(rand(3),9,1) S = LU_Decomposition_method(M,b) M
结果
M =
列 1 至 7
0.5944 0.4709 0.4076 0.4235 0.5181 0.0680 0.6022
0.0225 0.6959 0.8200 0.0908 0.9436 0.2548 0.3868
0.4253 0.6999 0.7184 0.2665 0.6377 0.2240 0.9160
0.3127 0.6385 0.9686 0.1537 0.9577 0.6678 0.0012
0.1615 0.0336 0.5313 0.2810 0.2407 0.8444 0.4624
0.1788 0.0688 0.3251 0.4401 0.6761 0.3445 0.4243
0.4229 0.3196 0.1056 0.5271 0.2891 0.7805 0.4609
0.0942 0.5309 0.6110 0.4574 0.6718 0.6753 0.7702
0.5985 0.6544 0.7788 0.8754 0.6951 0.0067 0.3225
列 8 至 9
0.7847 0.1917
0.4714 0.7384
0.0358 0.2428
0.1759 0.9174
0.7218 0.2691
0.4735 0.7655
0.1527 0.1887
0.3411 0.2875
0.6074 0.0911
b =
0.5762
0.6834
0.5466
0.4257
0.6444
0.6476
0.6790
0.6358
0.9452
此方程有唯一解
LU分解中L=
L =
列 1 至 7
1.0000 0 0 0 0 0 0
0.0379 1.0000 0 0 0 0 0
0.7155 0.5352 1.0000 0 0 0 0
0.5261 0.5762 -74.4491 1.0000 0 0 0
0.2717 -0.1391 -136.4397 1.7669 1.0000 0 0
0.3008 -0.1074 -74.0359 0.9200 0.6765 1.0000 0
0.7115 -0.0228 42.5434 -0.5996 0.3838 -141.0829 1.0000
0.1585 0.6728 -1.3001 -0.0414 0.8852 -70.1396 0.4925
1.0070 0.2658 -39.5864 0.4476 1.3552 49.3425 -0.3788
列 8 至 9
0 0
0 0
0 0
0 0
0 0
0 0
0 0
1.0000 0
5.1107 1.0000
LU分解中U=
U =
列 1 至 7
0.5944 0.4709 0.4076 0.4235 0.5181 0.0680 0.6022
0 0.6781 0.8045 0.0748 0.9240 0.2522 0.3640
0 0 -0.0039 -0.0765 -0.2275 0.0404 0.2903
0 0 0 -5.8101 -16.7848 3.4944 21.0900
-0.0000 0 0 0 -1.1550 0.1988 2.6992
0.0000 0 0 0 0 -0.0074 0.5483
0.0000 -0.0000 0 0 0 0 76.6535
0.0000 0.0000 0 -0.0000 0 0 0
-0.0000 -0.0000 0 0.0000 0 0 0
列 8 至 9
0.7847 0.1917
0.4416 0.7312
-0.7621 -0.2857
-57.2283 -20.8735
-2.2924 -1.7782
-1.9343 0.0429
-274.3037 6.4447
-1.9999 -0.0598
0 0.7768
解向量为:
S =
-0.9496
2.2130
0.5483
1.9595
-3.8859
-0.4632
0.4453
0.3978
2.6573
ans =
-0.9496
2.2130
0.5483
1.9595
-3.8859
-0.4632
0.4453
0.3978
2.6573
>>