Performing Gauss Elimination with MatLab

조회 수: 1,281 (최근 30일)
Lukumon Kazeem
Lukumon Kazeem 2012년 7월 11일
댓글: Ilyas Nhasse 2021년 10월 26일
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?

답변 (3개)

József Szabó
József Szabó 2020년 1월 29일
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
  댓글 수: 2
Tyvaughn Holness
Tyvaughn Holness 2020년 3월 28일
편집: Tyvaughn Holness 2020년 3월 29일
Great work, thanks! I found a faster implementation that avoids the double for loop to reduce complexity and time.
Ilyas Nhasse
Ilyas Nhasse 2021년 10월 26일
what if we got an A(i,i)=0

댓글을 달려면 로그인하십시오.


Richard Brown
Richard Brown 2012년 7월 12일
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
Lukumon Kazeem
Lukumon Kazeem 2012년 7월 12일
Thank you Richard for your response. I have used this approach a no. of times ([L U]=lu(k)) and the results are always different from that in published literature. I suspect it's because it performs partial and not complete pivoting
Richard Brown
Richard Brown 2012년 7월 13일
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
James Tursa 2012년 7월 11일
  댓글 수: 2
Lukumon Kazeem
Lukumon Kazeem 2012년 7월 12일
James, thank you for your response. I have tried to apply your suggestion to the matrix I posed earlier but it came up with the below prompt. What do you think?
"??? Undefined function or method 'gecp' for input arguments of type 'double'".
James Tursa
James Tursa 2012년 7월 13일
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Particle & Nuclear Physics에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by