Untitled

Anonymous
matlab
02/10/2026 8:34 AM
3.1 KB
20
Indexable
function x = GaussianElimination(A)
    [n, cols] = size(A);
    if cols ~= n + 1
        error('Input must be an augmented matrix of size n x n+1');
    end

    for i = 1:n-1
        p = -1;
        for k = i:n
            if A(k, i) ~= 0
                p = k;
                break;
            end
        end
        
        if p == -1
            disp('no unique solution');
            x = [];
            return;
        end
        
        if p ~= i
            temp = A(i, :);
            A(i, :) = A(p, :);
            A(p, :) = temp;
        end
        
        for j = i+1:n
            m = A(j, i) / A(i, i);
            A(j, :) = A(j, :) - m * A(i, :);
        end
    end

    if A(n, n) == 0
        disp('no unique solution');
        x = [];
        return;
    end

    x = zeros(n, 1);
    x(n) = A(n, n+1) / A(n, n);

    for i = n-1:-1:1
        sum_val = 0;
        for j = i+1:n
            sum_val = sum_val + A(i, j) * x(j);
        end
        x(i) = (A(i, n+1) - sum_val) / A(i, i);
    end
end



function GaussianEliminationPartialPivoting(A)
    [n, cols] = size(A);
    if cols ~= n + 1
        error('Input must be an augmented matrix of size n x n+1');
    end

    NROW = 1:n; 

    for i = 1:n-1
        max_val = -1;
        p = -1;
        
        for k = i:n
            curr_val = abs(A(NROW(k), i));
            if curr_val > max_val
                max_val = curr_val;
                p = k;
            end
        end
        
        if A(NROW(p), i) == 0
            disp('no unique solution');
            x = [];
            return;
        end
        
        if NROW(i) ~= NROW(p)
            temp = NROW(i);
            NROW(i) = NROW(p);
            NROW(p) = temp;
        end
        
        for j = i+1:n
            m = A(NROW(j), i) / A(NROW(i), i);
            A(NROW(j), :) = A(NROW(j), :) - m * A(NROW(i), :);
        end
    end

    if A(NROW(n), n) == 0
        disp('no unique solution');
        x = [];
        return;
    end

    x = zeros(n, 1);
    x(n) = A(NROW(n), n+1) / A(NROW(n), n);

    for i = n-1:-1:1
        sum_val = 0;
        for j = i+1:n
            sum_val = sum_val + A(NROW(i), j) * x(j);
        end
        x(i) = (A(NROW(i), n+1) - sum_val) / A(NROW(i), i);
    end
end
Editor is loading...
Leave a Comment