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\b
结果
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 >>