about summary refs log tree commit diff
path: root/usth/MATH2.4/labwork/3/LU_pivot.m
diff options
context:
space:
mode:
authorNguyễn Gia Phong <vn.mcsinyx@gmail.com>2020-02-16 14:26:55 +0700
committerNguyễn Gia Phong <vn.mcsinyx@gmail.com>2020-02-16 14:26:55 +0700
commit82e6cf7d1046d6cee16f7e8b044ec33e7ec6c4b7 (patch)
treef7b7ae0bce69070c47a1b31a85bd2bc69dfecf09 /usth/MATH2.4/labwork/3/LU_pivot.m
parent29d1001e2e21eff289bff23412e284c8b2e44595 (diff)
downloadcp-82e6cf7d1046d6cee16f7e8b044ec33e7ec6c4b7.tar.gz
[usth] Numerical Method is MATH2.4
Diffstat (limited to 'usth/MATH2.4/labwork/3/LU_pivot.m')
-rw-r--r--usth/MATH2.4/labwork/3/LU_pivot.m20
1 files changed, 20 insertions, 0 deletions
diff --git a/usth/MATH2.4/labwork/3/LU_pivot.m b/usth/MATH2.4/labwork/3/LU_pivot.m
new file mode 100644
index 0000000..c506697
--- /dev/null
+++ b/usth/MATH2.4/labwork/3/LU_pivot.m
@@ -0,0 +1,20 @@
+function [L U P] = LU_pivot (A)
+  [n _] = size (A);
+  [L P U] = deal (eye (n), eye (n), A);
+  for k = 1:n
+    [pivot m] = max (abs (U(k:n, k)));
+    m = m + k - 1;
+    if (m ~= k)
+      U([m k], :) = U([k m], :);  % interchange rows m and k in U
+      P([m k], :) = P([k m], :);  % interchange rows m and k in P
+      if k >= 2;  % very important point
+        % interchange rows m and k in columns 1:k-1 of L
+        L([m k], 1:k-1) = L([k m], 1:k-1);
+      end
+    end
+    for i = k + 1 : n
+      L(i, k) = U(i, k) / U(k, k);
+      U(i, :) -= L(i, k)*U(k, :);
+    end
+  end
+end