Why is my own echelon function printing incorrect matrix

I am trying to create an echelon function, however, I am having trouble debugging my error. It works for almost all matrices but for the following matrix it gives an incorrect result:
A=[1 2 3 ; 1 2 4 ; 1 2 4]
echelon(A)
function x = echelon(A)
[m,n]= (size(A)); % m= rows , %n= columns
j=1;
i=1;
while( i <m )
for k=i+1:m
if (A(i,j)==0)
C = A(i,:); %Let C be the ith first row of the matrix
A(i,:)= A(i+1,:);%Exchange the row with the one below it
A(i+1,:) = C %Let C be the row that was above now (This code swaps rows)
end
if ~all(A(k,:)==0) %check to see if row of zeros or not
A(k,:)=A(k,:)-((A(k,j)/A(i,j))*A(i,:)) %zero out corresponding row
end
end
j=j+1;
i=i+1;
end
x=A
end
It gives the following incorrect result:
1 2 3
0 0 1
0 0 1
Also for the following matrix:
A=[1 2 3 ; 1 2 5]
gives the following incorrect result:
1 2 3
0 0 2

댓글 수: 2

Are you trying to produce any row echelon form, or the reduced row echelon form?
Just echelon form, not reduced echelon form, so just with 1 as pivots.

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

 채택된 답변

James Tursa
James Tursa 2019년 9월 24일
I haven't checked all of your code, but I assume this:
if ~all(A(k,:))==0 %check to see if row of zeros or not
was meant to be this instead:
if ~all(A(k,:)==0) %check to see if row of zeros or not
Also, you divide by A(i,j) before checking to see if it is 0.

댓글 수: 3

Natalie Murawski
Natalie Murawski 2019년 9월 24일
편집: Natalie Murawski 2019년 9월 24일
Thanks, I fixed that, but I moved the checking if A(i,j) is 0 above gives this result:
1 2 3
0 0 1
NaN NaN NaN
I must be dividing by 0 somewhere.
James Tursa
James Tursa 2019년 9월 24일
편집: James Tursa 2019년 9월 24일
Best way to debug at this point is to step through your code line by line and see what is happening to A at each step. Then you can easily find where that divide by 0 is happening and correct it. If you still have problems, post your current code and ask more questions.
What algorithm are you using to ensure you are not dividing by 0? Looks like you may need to rethink how you are doing your row swapping.
Alright, thank you!

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Numerical Integration and Differential Equations에 대해 자세히 알아보기

태그

질문:

2019년 9월 23일

댓글:

2019년 9월 24일

Community Treasure Hunt

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

Start Hunting!

Translated by