Untitled
Anonymous
matlab
02/10/2026 8:34 AM
3.1 KB
18
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
endEditor is loading...
Leave a Comment