diff options
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 |