Performing Gauss Elimination with MatLab
Ältere Kommentare anzeigen
K =
-0.2106 0.4656 -0.4531 0.7106
-0.6018 0.2421 -0.8383 1.3634
0.0773 -0.5600 0.4168 -0.2733
0.7945 1.0603 1.5393 0.0098
I have the above matrix and I'd like to perform Gauss elimination on it with MatLab such that I am left with an upper triangular matrix. Please how can I proceed?
1 Kommentar
Raphael Chinchilla
am 8 Okt. 2017
use the function rref(K)
Antworten (3)
József Szabó
am 29 Jan. 2020
function x = solveGauss(A,b)
s = length(A);
for j = 1:(s-1)
for i = s:-1:j+1
m = A(i,j)/A(j,j);
A(i,:) = A(i,:) - m*A(j,:);
b(i) = b(i) - m*b(j);
end
end
x = zeros(s,1);
x(s) = b(s)/A(s,s);
for i = s-1:-1:1
sum = 0;
for j = s:-1:i+1
sum = sum + A(i,j)*x(j);
end
x(i) = (b(i)- sum)/A(i,i);
end
4 Kommentare
Tyvaughn Holness
am 28 Mär. 2020
Bearbeitet: Tyvaughn Holness
am 29 Mär. 2020
Great work, thanks! I found a faster implementation that avoids the double for loop to reduce complexity and time.
Ilyas Nhasse
am 26 Okt. 2021
what if we got an A(i,i)=0
Brinzan
am 25 Nov. 2024
There are no input arguments, what do I do, qnd I dont even know where to put or how much to put like at the Matrix for A do I just write A=[00011110011],[0100001111],[0111110000] or what în the Code cuz it just not working.
A = randi([-1 2], 5, 5)
b = randi([-2 2], 5, 1)
x = solveGauss(A, b)
function x = solveGauss(A,b)
s = length(A);
for j = 1:(s-1)
for i = s:-1:j+1
m = A(i,j)/A(j,j);
A(i,:) = A(i,:) - m*A(j,:);
b(i) = b(i) - m*b(j);
end
end
x = zeros(s,1);
x(s) = b(s)/A(s,s);
for i = s-1:-1:1
sum = 0;
for j = s:-1:i+1
sum = sum + A(i,j)*x(j);
end
x(i) = (b(i)- sum)/A(i,i);
end
end
Richard Brown
am 12 Jul. 2012
The function you want is LU
[L, U] = lu(K);
The upper triangular matrix resulting from Gaussian elimination with partial pivoting is U. L is a permuted lower triangular matrix. If you're using it to solve equations K*x = b, then you can do
x = U \ (L \ b);
or if you only have one right hand side, you can save a bit of effort and let MATLAB do it:
x = K \ b;
2 Kommentare
Lukumon Kazeem
am 12 Jul. 2012
Richard Brown
am 13 Jul. 2012
I wouldn't expect it would necessarily compare with published literature - what you get depends on the pivoting strategy (as you point out).
Complete pivoting is rarely used - it is pretty universally recognised that there is no practical advantage to using it over partial pivoting, and there is significantly more implementation overhead. So I would question whether results you've found in the literature use complete pivoting, unless it was a paper studying pivoting strategies.
What you might want is the LU factorisation with no pivoting. You can trick lu into providing this by using the sparse version of the algorithm with a pivoting threshold of zero:
[L, U] = lu(sparse(K),0);
% L = full(L); U = full(U); %optionally
James Tursa
am 11 Jul. 2012
0 Stimmen
You could start with this FEX submission:
2 Kommentare
Lukumon Kazeem
am 12 Jul. 2012
James Tursa
am 13 Jul. 2012
You need to download the gecp function from the FEX link I posted above, and then put the file gecp.m somewhere on the MATLAB path.
Kategorien
Mehr zu Linear Algebra finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!