Нужна помощь в отладке кода для функции матрицы формы эшелона - PullRequest
0 голосов
/ 25 сентября 2019

В MATLAB: возникают проблемы с отладкой кода для функции, которая переводит матрицу в эшелонированную форму.

Я пробовал следующую матрицу: A = [1 2 3; 1 2 4;1 2 4;1 2 4] и дает мне тот же результат после нескольких попыток исправить это: A =

 1     2     3
 0     0     1
 0     0     1
 0     0     1
A=[1 2 3 ;1 2 4; 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 && j<=n )
       if is_pivot(A,i,j)==true 
           for k=i+1:m
            if A(i,j)~=0
              A(k,:)=A(k,:)-((A(k,j)/A(i,j))*A(i,:));%zero out corresponding row        
       else 
            C = A(i,:); %Let C be the ith first row of the matrix
            A(i,:)= A(k,:);%Exchange the row with the one below it
            A(k,:) = C;
          end
          end
            if A(i,j)~=0
              A(k,:)=A(k,:)-((A(k,j)/A(i,j))*A(i,:));%zero out corresponding row
            end 
       end           
       if ~all(A(i,:)==0)
          i=i+1;
          j=j+1;
       end
       if i==m &&  all(A(i,:)==0)
           break;
       end
       A
   end
end

Матрица должна быть уменьшена до:

1     2     3
0     0     1
0     0     0
0     0     0

is_pivotфункция следующая

%is_pivot function checks to see if value is a pivot
%user gives A the matrix, i =row, j=column
function x= is_pivot2(A,i,j)
   x=false;
   idx = 1:size(A, 2) < j;
   if all(A(i,:)==0)
       x=false;
   elseif  all(A(:,j)==0)
       x=false;
   elseif j==1 && A(i,j)~=0
       x=true;   
   elseif all(A(i, idx) == 0) 
      x=true;
   end
x
end

...