diff options
author | Nguyễn Gia Phong <vn.mcsinyx@gmail.com> | 2019-12-16 21:31:18 +0700 |
---|---|---|
committer | Nguyễn Gia Phong <vn.mcsinyx@gmail.com> | 2019-12-16 21:31:18 +0700 |
commit | e461df7573c2b7b7e26c965d8cf2d8e175d67378 (patch) | |
tree | 193b8439edac52c1749764395fe5f7787889eda9 /usth/MATH2.2/labwork/3/GaussPivot.m | |
parent | c1008fe39217be7f91f0ea23483e747bfbc5743e (diff) | |
download | cp-e461df7573c2b7b7e26c965d8cf2d8e175d67378.tar.gz |
[usth/MATH2.2] Numerical Methods
The future starts now.
Diffstat (limited to 'usth/MATH2.2/labwork/3/GaussPivot.m')
-rw-r--r-- | usth/MATH2.2/labwork/3/GaussPivot.m | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/usth/MATH2.2/labwork/3/GaussPivot.m b/usth/MATH2.2/labwork/3/GaussPivot.m new file mode 100644 index 0000000..7764b3a --- /dev/null +++ b/usth/MATH2.2/labwork/3/GaussPivot.m @@ -0,0 +1,25 @@ +function x = GaussPivot (A, b) + [m n] = size (A); + m ~= n && error ('Matrix A must be square'); + nb = n + 1; + Aug = [A b]; + % forward elimination + for k = 1 : n - 1 + % partial pivoting + [big i] = max (abs (Aug(k:n, k))); + ipr = i + k - 1; + if ipr ~= k + Aug([k ipr], :) = Aug([ipr k], :); + end + for i = k + 1 : n + coeff = Aug(i, k) / Aug(k, k); + Aug(i, k:nb) = Aug(i, k:nb) - coeff * Aug(k, k:nb); + end + end + % back substitution + x = zeros (n, 1); + x(n) = Aug(n, nb) / Aug(n, n); + for i = n - 1 : -1 : 1 + x(i) = (Aug(i, nb) - Aug(i, i+1:n) * x(i+1:n)) / Aug(i, i); + end +end |