diff options
author | Nguyễn Gia Phong <vn.mcsinyx@gmail.com> | 2020-02-16 14:26:55 +0700 |
---|---|---|
committer | Nguyễn Gia Phong <vn.mcsinyx@gmail.com> | 2020-02-16 14:26:55 +0700 |
commit | 82e6cf7d1046d6cee16f7e8b044ec33e7ec6c4b7 (patch) | |
tree | f7b7ae0bce69070c47a1b31a85bd2bc69dfecf09 /usth/MATH2.4/labwork/3/GaussPivot.m | |
parent | 29d1001e2e21eff289bff23412e284c8b2e44595 (diff) | |
download | cp-82e6cf7d1046d6cee16f7e8b044ec33e7ec6c4b7.tar.gz |
[usth] Numerical Method is MATH2.4
Diffstat (limited to 'usth/MATH2.4/labwork/3/GaussPivot.m')
-rw-r--r-- | usth/MATH2.4/labwork/3/GaussPivot.m | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/usth/MATH2.4/labwork/3/GaussPivot.m b/usth/MATH2.4/labwork/3/GaussPivot.m new file mode 100644 index 0000000..7764b3a --- /dev/null +++ b/usth/MATH2.4/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 |