about summary refs log tree commit diff
path: root/usth/MATH2.2/labwork/3/LU_pivot.m
diff options
context:
space:
mode:
Diffstat (limited to 'usth/MATH2.2/labwork/3/LU_pivot.m')
-rw-r--r--usth/MATH2.2/labwork/3/LU_pivot.m20
1 files changed, 20 insertions, 0 deletions
diff --git a/usth/MATH2.2/labwork/3/LU_pivot.m b/usth/MATH2.2/labwork/3/LU_pivot.m
new file mode 100644
index 0000000..c506697
--- /dev/null
+++ b/usth/MATH2.2/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